aliyunsdkros源码及相关API

本文涉及的产品
资源编排,不限时长
简介: 简要列出ros模块的目录结构,以及提供的API

参考文章:

ROS API概览

Python SDK使用说明

阿里云资源编排服务 Python SDK 使用入门

源码下载:

阿里云python-SDK源码GitHub

一、目录结构

    --aliyunsdkros
        --request
            --v20150901        # 版本
                --init.py
                --AbandonStackRequest.py                     废弃资源栈
                --CreateStacksRequest.py                    创建资源栈
                --DeleteStackRequest.py                        删除资源栈
                --DescribeEventsRequest.py                    查询事件列表
                --DescribeRegionsRequest.py                    查询Region列表
                --DescribeResourceDetailRequest.py            查询资源详情
                --DescribeResourcesRequest.py                查询资源列表
                --DescribeResourceTypeDetailRequest.py        查询资源类型详情
                --DescribeResourceTypesRequest.py            查询资源类型列表
                --DescribeResourceTypeTemplateRequest.py    查询资源模板示例
                --DescribeStackDetailRequest.py                查询资源栈详情
                --DescribeStacksRequest.py                    查询资源栈列表
                --DescribeTemplateRequest.py                查询模板
                --DoActionsRequest.py
                --InquiryStackRequest.py
                --PreviewStackRequest.py                    预览资源栈
                --UpdateStackRequest.py                        更新资源栈
                --ValidateTemplateRequest.py                验证模板合法性
            --init.py
        --init.py

二、API概览

资源栈相关接口

URI Method 描述
/stacks POST 创建资源栈
/stacks GET 查询资源栈列表
/stacks/{StackName}/{StackId} GET 查询资源栈信息
/stacks/{StackName}/{StackId} PUT 更新资源栈
/stacks/{StackName}/{StackId} DELETE 删除资源栈
/stacks/{StackName}/{StackId}/abandon DELETE 废弃资源栈
/stacks/preview POST 预览资源栈

资源相关接口

URI Method 描述
/stacks/{StackName}/{StackId}/resources GET 查询资源列表
/stacks/{StackName}/{StackId}/resources/{ResourceName} GET 查询资源信息
/resource_types GET 查询资源类型列表
/resource_types/{TypeName} GET 查询资源类型信息
/resource_types/{TypeName}/template GET 查询资源类型模板信息

模板相关接口

URI Method 描述
/stacks/{StackName}/{StackId}/template GET 查询模板信息
/validate POST 验证模板信息

其他接口

URI Method 描述
/stacks/{StackName}/{StackId}/events GET 查询事件列表
/regions GET 查询 Region 列表

三、源码

​ aliyunsdkros模块主要封装ROS资源编排服务提供的API接口。

​ 该模块下的Request类均继承自aliyunsdkcore.request.RoaRequest,RoaRequest则继承自同AcsRequest,所以先贴出AcsReques和RoaRequest的源码。

1、AcsRequest


class AcsRequest:
    """
    Acs request base class. This class wraps up common parameters for a request.
    Acs请求类的基类,这个类为请求类封装通用参数。
    """
    # 定义AcsRequest为抽象基类
    __metaclass__ = abc.ABCMeta

    def __init__(self, product, version=None,
                 action_name=None,
                 location_service_code=None,
                 location_endpoint_type='openAPI',
                 accept_format=None,
                 protocol_type=None,
                 method=None):
        """

        :param product:    产品
        :param version: 版本
        :param action_name:    指令名/操作名
        :param params:    参数
        :param resource_owner_account: 
        :param protocol_type: 协议类型
        :param accept_format: ?
        :param method: 请求方法
        :return:
        """
        
        # 初始化参数
        self._version = version
        self._product = product
        self._action_name = action_name
        self._protocol_type = protocol_type
        # 未指定协议类型则使用默认:protocol_type.HTTP(http协议)
        if self._protocol_type is None:
            self._protocol_type = _default_protocol_type

        self._accept_format = accept_format
        self._params = {}
        self._method = method
        self._header = {}
        self._body_params = {}
        self._uri_pattern = None
        self._uri_params = None
        self._content = None
        self._location_service_code = location_service_code
        self._location_endpoint_type = location_endpoint_type
        self.add_header('x-sdk-invoke-type', 'normal')
    

    def add_query_param(self, k, v):
        self._params[k] = v
        
    def add_body_params(self, k, v):
        self._body_params[k] = v

    def get_body_params(self):
        return self._body_params

    def get_uri_pattern(self):
        return self._uri_pattern

    def get_uri_params(self):
        return self._uri_params

    def get_product(self):
        return self._product

    def get_version(self):
        return self._version

    def get_action_name(self):
        return self._action_name

    def get_accept_format(self):
        return self._accept_format

    def get_protocol_type(self):
        return self._protocol_type

    def get_query_params(self):
        return self._params

    def get_method(self):
        return self._method

    def set_uri_pattern(self, pattern):
        self._uri_pattern = pattern

    def set_uri_params(self, params):
        self._uri_params = params

    def set_method(self, method):
        self._method = method

    def set_product(self, product):
        self._product = product

    def set_version(self, version):
        self._version = version

    def set_action_name(self, action_name):
        self._action_name = action_name

    def set_accept_format(self, accept_format):
        self._accept_format = accept_format

    def set_protocol_type(self, protocol_type):
        self._protocol_type = protocol_type

    def set_query_params(self, params):
        self._params = params

    def set_content(self, content):
        # content:字节数组
        self._content = content

    def get_content(self):
        # 返回字节数组
        return self._content

    def get_headers(self):
          # 返回dict
        return self._header

    def set_headers(self, headers):
        # headers:dict
        self._header = headers

    def add_header(self, k, v):
        self._header[k] = v
        
    def set_user_agent(self, agent):
        self.add_header('User-Agent', agent)

    def set_location_service_code(self, location_service_code):
        self._location_service_code = location_service_code

    def get_location_service_code(self):
        return self._location_service_code

    def get_location_endpoint_type(self):
        return self._location_endpoint_type

    def set_content_type(self, content_type):
        self.add_header("Content-Type", content_type)
        
    # 定义抽象方法
    @abc.abstractmethod
    def get_style(self):
        pass

    @abc.abstractmethod
    def get_url(self, region_id, ak, secret):
        pass

    @abc.abstractmethod
    def get_signed_header(self, region_id, ak, secret):
        pass

2、RoaRequest

class RoaRequest(AcsRequest):
    """
    Class to compose an ROA style request with.
    具有Roa(面向资源)风格的Request类
    """

    def __init__(
            self,
            product,
            version,
            action_name,
            location_service_code=None,
            location_endpoint_type='openAPI',
            method=None,
            headers=None,
            uri_pattern=None,
            path_params=None,
            protocol=None):
        """

        :param product: String 字符串, 必需
        :param version: String 字符串, 必需
        :param action_name: String 字符串, 必需
        :param method: String 字符串
        :param headers: Dict 字典
        :param uri_pattern: String 字符串
        :param path_params: Dict 字典
        :param protocol: String 字符串
        :return:
        """
        AcsRequest.__init__(
            self,
            product,
            version,
            action_name,
            location_service_code,
            location_endpoint_type,
            ft.RAW,
            protocol,
            method)
        
        # 设置默认风格:ROA
        self._style = STYLE_ROA
        self._method = method
        if headers:
            self._header = headers
        self._uri_pattern = uri_pattern
        self._path_params = path_params

    def get_style(self):
        return self._style

    def get_path_params(self):
        return self._path_params

    def set_path_params(self, path_params):
        self._path_params = path_params

    def add_path_param(self, k, v):
        if self._path_params is None:
            self._path_params = {}
        self._path_params[k] = v

    def _get_sign_params(self):
        req_params = self.get_query_params()
        if req_params is None:
            req_params = {}
        self.add_header("x-acs-version", self.get_version())
        return req_params
    
    # 计算签名 
    def get_signed_header(self, region_id, ak, secret):
        """
        Generate signed header
        :param region_id: String
        :param ak: String
        :param secret: String
        :return: Dict
        """
        sign_params = self._get_sign_params()
        if self.get_content() is not None:
            md5_str = md5_tool.get_md5_base64_str(self.get_content())
            self.add_header('Content-MD5', md5_str)
        signed_headers = roa_signer.get_signature_headers(
            sign_params,
            ak,
            secret,
            self.get_accept_format(),
            self.get_headers(),
            self.get_uri_pattern(),
            self.get_path_params(),
            self.get_method())
        return signed_headers
    
    # 获取url
    def get_url(self, region_id, ak=None, secret=None):
        """
        Compose request url without domain
        :param region_id: String
        :return: String
        """
        sign_params = self.get_query_params()
        # if region_id not in sign_params.keys():
        #     sign_params['RegionId'] = region_id
        url = roa_signer.get_url(
            self.get_uri_pattern(),
            sign_params,
            self.get_path_params())
        return url

3、ros的Request.py

ros的Request类url模板、操作名、各自的方法不同外,其余均类似,不做赘述。此处以AbandonStackRequest为例:

class AbandonStackRequest(RoaRequest):

   def __init__(self):
      # 初始化:产品、版本、操作名
      RoaRequest.__init__(self, 'ROS', '2015-09-01', 'AbandonStack')
      # 设置url模板
      self.set_uri_pattern('/stacks/[StackName]/[StackId]/abandon')
      # 设置请求方法
      self.set_method('DELETE')

   def get_StackName(self):
      return self.get_path_params().get('StackName')

   def set_StackName(self,StackName):
      self.add_path_param('StackName',StackName)

   def get_StackId(self):
      return self.get_path_params().get('StackId')

   def set_StackId(self,StackId):
      self.add_path_param('StackId',StackId)
相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
4天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
16 2
|
1月前
|
存储 数据可视化 JavaScript
可视化集成API接口请求+变量绑定+源码输出
可视化集成API接口请求+变量绑定+源码输出
45 4
|
3月前
|
存储 Linux API
Linux源码阅读笔记08-进程调度API系统调用案例分析
Linux源码阅读笔记08-进程调度API系统调用案例分析
|
3月前
|
Linux API
Linux源码阅读笔记07-进程管理4大常用API函数
Linux源码阅读笔记07-进程管理4大常用API函数
|
3月前
|
JSON 算法 API
京东以图搜图功能API接口调用算法源码python
京东图搜接口是一款强大工具,通过上传图片即可搜索京东平台上的商品。适合电商平台、比价应用及需商品识别服务的场景。使用前需了解接口功能并注册开发者账号获取Key和Secret;准备好图片的Base64编码和AppKey;生成安全签名后,利用HTTP客户端发送POST请求至接口URL;最后解析JSON响应数据以获取商品信息。
|
3月前
|
JSON API 网络架构
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
67 0
|
6月前
|
API 数据安全/隐私保护
单页源码加密屋zip文件加密API源码
单页源码加密屋zip文件加密API源码 api源码里面的参数已改好,往服务器或主机一丢就行,出现不能加密了就是加密次数达到上限了,告诉我在到后台修改加密次数
46 1
|
5月前
|
Java API 开发工具
企业微信api,企业微信sdk接口java调用源码
企业微信api,企业微信sdk接口java调用源码
|
5月前
|
存储 JSON API
随机图片API源码(附新图片数据
含1000+HTTP图片,存储于企业空间,速度媲美新浪。计划扩展更多类别。基础调用:`http:///dm`,JSON格式:`http:///dm?return=json`。返回示例: ```json {
117 0
|
6月前
|
存储 监控 BI
HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebService
医院管理信息系统(全称为Hospital Information System)即HIS系统。 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等,为医院管理提供更有力的保障。 HIS系统以财务信息、病人信息和物资信息为主线,通过对信息的收集、存储、传递、统计、分析、综合查询、报表输出和信息共享,及时为医院领导及各部门管理人员提供全面、准确的各种数据。 门诊医生工作站采用下拉式汉化菜单,界面友好,实用性强,设有与门诊挂号收费系统、医技科室信息系统、住院结算信息系统的软件接口。
161 1