一个简单而强大的用于python和命令行的cloudstack api客户端。
cs的Python项目详细描述
一个简单而强大的用于python和命令行的cloudstack api客户端。
- Python2.7+和3.4+支持。
- 对Python3.5+的异步支持。
- 支持所有当前和将来的cloudstack api调用和参数。
- 如果安装了pygments,则在命令行客户端中突出显示语法。
- BSD许可证。
安装
pip install cs # with the colored output pip install cs[highlight] # with the async support (Python 3.5+) pip install cs[async] # with both pip install cs[async,highlight]
用法
在python中:
fromcsimportCloudStackcs=CloudStack(endpoint='https://api.exoscale.ch/compute',key='cloudstack api key',secret='cloudstack api secret')vms=cs.listVirtualMachines()cs.createSecurityGroup(name='web',description='HTTP traffic')
从命令行,这需要一些配置:
cat $HOME/.cloudstack.ini
[cloudstack]endpoint=https://api.exoscale.ch/computekey=cloudstack api keysecret=cloudstack api secret# Optional ca authority certificateverify=/path/to/certs/exoscale_ca.crt# Optional client PEM certificatecert=/path/to/client_exoscale.pem
然后:
$ cs listVirtualMachines
{"count":1,"virtualmachine":[{"account":"...",...}]}
$ cs authorizeSecurityGroupIngress \ cidrlist="0.0.0.0/0"endport=443startport=443\ securitygroupname="blah blah"protocol=tcp
当返回异步结果时,命令行客户端将进行轮询。禁用 轮询时,使用--async标志。
要查找列表cloudstack api调用,请转到 http://cloudstack.apache.org/api.html
配置
按以下顺序从多个位置读取配置:
- CLOUDSTACK_ENDPOINT,CLOUDSTACK_KEY,CLOUDSTACK_SECRET和 CLOUDSTACK_METHOD环境变量,
- 指向.ini文件的CLOUDSTACK_CONFIG环境变量,
- 指向CA颁发机构证书文件的CLOUDSTACK_VERIFY(可选)环境变量,
- 指向客户端pem证书文件的CLOUDSTACK_CERT(可选)环境变量,
- 当前工作目录中的cloudstack.ini文件,
- 主目录中的.cloudstack.ini文件。
从python代码中使用该配置方案:
fromcsimportCloudStack,read_configcs=CloudStack(**read_config())
注意,如果没有配置,read_config()可以提高SystemExit。 找到了。
CLOUDSTACK_METHOD或配置文件中的method项可以是 用于更改用于发出cloudstack请求的http动词。默认情况下, 请求是用get方法发出的,但是cloudstack支持post请求。 post可以用来克服cloudstack api中的一些长度限制。
CLOUDSTACK_TIMEOUT或配置文件中的timeout项可以 用于在发出cloudstack请求时更改http超时(在 秒)。默认值为10。
CLOUDSTACK_RETRY或配置文件中的retry项 (整数)可用于在上重试list和queryAsync请求 失败。默认值为0,表示不重试。
CLOUDSTACK_JOB_TIMEOUT或配置文件中的作业超时`项 (float)可用于设置在将fetch_result设置为true的情况下重试异步调用的时间。默认值是None,它将永远等待。
CLOUDSTACK_POLL_INTERVAL或配置文件中的poll_interval项(秒数,浮点)可用于设置轮询异步作业结果的频率。默认值为2。
CLOUDSTACK_EXPIRATION或配置文件中的expiration项 (整数)可用于设置签名的有效期。默认情况下,它选择 10分钟,但可以使用任何负值停用,例如-1。
CLOUDSTACK_DANGEROUS_NO_TLS_VERIFY或dangerous_no_tls_verify条目 在配置文件中(布尔值)可用于停用TLS验证 使用https协议时生成。
可以在.cloudstack.ini中设置多个凭据。这允许选择 要与命令行标志一起使用的凭据或终结点。
[cloudstack]endpoint=https://some-host/api/computekey=api keysecret=api secret[exoscale]endpoint=https://api.exoscale.ch/computekey=api keysecret=api secret
用法:
$ cs listVirtualMachines --region=exoscale
可以选择使用CLOUDSTACK_REGION覆盖默认区域cloudstack。
对于那些不想把任何秘密放在磁盘上的超级用户, CLOUDSTACK_OVERRIDES让您从 环境,即使存在于ini文件中。
分页
cloudstack对请求分页。cs能够抽象出分页 允许一次性获取大型结果集的逻辑。这是用 fetch_list参数:
$ cs listVirtualMachines fetch_list=true
或者在python中:
cs.listVirtualMachines(fetch_list=True)
跟踪http请求
偶尔,了解一下http调用的内容可能会很有用 在引擎盖下面。trace标志(或CLOUDSTACK_TRACE)就是这样做的:
$ cs --trace listVirtualMachines $ cs -t listZones
异步客户端
cs为python中的异步/等待调用提供AIOCloudStack类 3.5+。
^{公关14}$多个vm的异步部署
importasynciofromcsimportAIOCloudStack,read_configcs=AIOCloudStack(**read_config())machine={"zoneid":...,"serviceofferingid":...,"templateid":...}asyncdefmain():tasks=asyncio.gather(*(cs.deployVirtualMachine(name=f"vm-{i}",**machine,fetch_result=True)foriinrange(5)))results=awaittasks# Destroy all of them, but skip waiting on the job resultsawaitasyncio.gather(*(cs.destroyVirtualMachine(id=result['virtualmachine']['id'])forresultinresults))asyncio.run(main())