UCloud(CloudStack) Python Client
- Original Code from https://github.com/minsu/ucloud
- Forked and Revised by Jioh L. Jung (ziozzang@gmail.com)
The Python Commandline Tool & library for UCloud.
์ ํด๋ผ์ฐ๋ ์๋ฒ API๋ฅผ ์ด์ฉํ ํ์ด์ฌ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ Command Line ์ ํธ๋ฆฌํฐ ํ๋ก๊ทธ๋จ์ ๋๋ค.
Installation Note
- PIP์ผ๋ก ์ค์น ํ๋ ๊ฒฝ์ฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉ ํ ๊ฒฝ์ฐ์๋ pip/PyPI๋ก ์ค์น ํ๋ฉด ๋ฉ๋๋ค.
pip install ucloud
- Git ์ผ๋ก ํด๋ก ํ๊ธฐ.
๋ณ๋ ์ค์น์์ด Git ํด๋ก ํ ํ์ ํด๋น ํด๋์์ ๋ช
๋ น์ ์คํํ๊ฑฐ๋ ํด๋น ํ์ด์ฌ ๋ชจ๋์ import UClient
ํ ํ์ ์ฌ์ฉํฉ๋๋ค. ๋ช
๋ น์ด ์คํ์ ๋ค์์ Example๊ณผ ๊ฐ์ด Command Line ํ๊ฒฝ์์ ์คํ ํฉ๋๋ค.
python UClient.py server listVirtualMachines
python UClient.py server deployVirtualMachine serviceofferingid=75 templateid=845 zoneid=2 diskofferingid=38 usageplantype=hourly
...
python UClient.py server queryAsyncJobResult jobid=19993
python UClient.py lb listLoadBalancers
python UClient.py waf listWAFs
ํ๊ฒฝ ์ค์
-
ํ์ผ์ ์ง์ ์์
- Client.py ๋ฅผ ์ด์ด์ API_KEY ์ SECRET ์ ์์ ํ๊ฑฐ๋, ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํ ์ ์๋ค.
-
ํ๊ฒฝ ๋ณ์๋ก ์ค์
- API/SECRET Key ์ค์ :
UCLOUD_API_KEY
,UCLOUD_SECRET
๊ฐ ํ๊ฒฝ ๋ณ์๋ก ์ค์ ๋์ด ์์ผ๋ฉด ํด๋น ๊ฐ์ ์ฝ์ด์ ์๋๋ค. (export ๋๋ ์๋์์ set ์ผ๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค) - ์ถ๋ ฅ ํ์ ์ง์ : ๊ธฐ๋ณธ์ JSON ์ถ๋ ฅ์ด๋, XML ์ถ๋ ฅ์ ํ๊ณ ์ถ์ผ๋ฉด ํ๊ฒฝ๋ณ์์
UCLOUD_RESP_TYPE
๋ฅผ xml ๋ก ์ธํ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- API/SECRET Key ์ค์ :
-
์ฝ๋๋ก ์คํ ํ๋ ๊ฒฝ์ฐ, ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ ์ฃผ๋ ๋ฐฉ๋ฒ
-
client = UClient.UClient(api_type="package", api_key=UCLOUD_API_KEY, secret=UCLOUD_SECRET)
์ ๊ฐ์ด ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค
-
์ปค๋งจ๋ ๋ผ์ธ์ผ๋ก ์คํ
./UClient.py [api_type] [command] [params1] [param2]...
๊ธฐ๋ณธ ์คํ ํ์์ ๋๋ค.
์๋ฅผ๋ค์ด zoneID ๋ฅผ ์ป๋ API๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ด๋ จ API ๋ฌธ์ http://developer.ucloudbiz.olleh.com/doc/cloudstack/etc/listZones/
./UClient.py server listZones
์๋ฅผ๋ค์ด WAF ์์ฑ API ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ด๋ จ API ๋ฌธ์ http://developer.ucloudbiz.olleh.com/doc/waf/WAF/createWAF-A/
./UClient.py waf name=wafname type=single spec=basic zoneid=9845bd17-d438-4bde-816d-1b12f37d5080 waf1consoleport=5950 waf1SSHport=5951 waf1DBport=5952
์ฝ๋๋ก ์ฌ์ฉํ๊ธฐ
ํ์ด์ฌ ๋ชจ๋๋ก ์ฌ์ฉํ ๋์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
import json
from ucloud import UClient
client = UClient.UClient(api_type="server", api_key="API_KEY_HERE", secret="SECRET_KEY_HERE")
params = {
"parameter1":"value1",
}
post_data = {
"body1": "longbody1",
}
resp = client.run("Command", params, post=post_data) # POST ๋ก ๋๊ธฐ๋ ๊ฒฝ์ฐ
resp = client.run("Command", params) # POST๋ฅผ ์ฐ์ง ์๋ ๊ฒฝ์ฐ
API ํ์ ๋ชฉ๋ก
์ค๊ฐ์ ๋ค์ด๊ฐ๋ api_type ์ ๋ค์์ ํ์ธํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
๋๋ฒ๊น ๋ฐฉ๋ฒ
ํ์ฌ ๋๋ฒ๊น ์ ์ฝ๋๋ก ์์ฑ ํ๋ ๊ฒฝ์ฐ์๋ง ์ง์ ํฉ๋๋ค. ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ์ด ์คํํ ๋์ debug=True ๋ก ์คํ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
client.run(.... , debug=True)
์ฃผ์์ฌํญ
ํ๋ก๊ทธ๋จ ์ฌ์ฉ์ ์ฃผ์ํ ์ ๋ค์ ๋๋ค.
- ์คํํ๊ธฐ ์ ์ API ํค ๊ฐ๊ณผ Secret Key ๊ฐ์ ์ค์ ํด ์ฃผ์ด์ผ ๋ช ๋ น๋ค์ด ๋์ํฉ๋๋ค.
- ์ผ๋ถ ๋ช ๋ น์ด์ ๊ฒฝ์ฐ Command Line ์คํ์ ๋ณด๊ธฐ ํธํ ํํ๋ก ์ถ๋ ฅ๋์ง๋ง, ํ์ํ ํ๋๊ฐ ๋น ์ ธ์์ ์ ์์ต๋๋ค. ๋ํ ๋๋ถ๋ถ์ ๋ช ๋ น์ ์๋ฒ๊ฐ ํ์ ํ JSON/XML ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- ๋ชจ๋๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ JSON ๋ฐ์ดํฐ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
- ์ปค๋งจ๋ ๋ผ์ธ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ์ค์ง GET ๋ฐฉ์์ผ๋ก ์์ฒญ ๋ฉ๋๋ค.
- ์๋ชป๋ ๋ช ๋ น์ ๋ํ ์๋ฒ์ ๋ฐ์์ ๋ณ๋์ ์๋ฌ๋ฉ์์ง๋ ์ถ๋ ฅ๋์ง๋ง XMLํฌ๋งท์ผ๋ก๋ ์๋ฌ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ ๋ฉ๋๋ค.
-
destroyVirtualMachine
๊ณผ ๊ฐ์ ๋ช ๋ น์stopVirtualMachine
์ด ์ด๋ฃจ์ด ์ง ๋ค์์ ์คํ๋์ด์ผ ์ ์ ๋์ํฉ๋๋ค.
์ง์ํ๋ ๋ช ๋ น๋ค
์ ํด๋ผ์ฐ๋ ์๋ฒ API ์ ์ฒด๊ฐ ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค, ํ ์คํธ ํด ๋ณธ ๊ฒ์ VM ๊ด๋ จํ ๋ช ๋ น๊ณผ Port Forwarding ๊ด๋ จ ๋ช ๋ น ๋ฟ์ ๋๋ค.
์ ํด๋ผ์ฐ๋ ๋ก๋๋ฐธ๋ฐ์ API ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. (2012. 11. 13)
์ ํด๋ผ์ฐ๋ ์น ๋ฐฉํ๋ฒฝ API ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. (2013. 02. 20)
์ ํด๋ผ์ฐ๋ Package API ์ง์์ด ์ถ๊ฐ ๋์์ต๋๋ค. (2013. 08. 19)
์ ํด๋ผ์ฐ๋ ์ ์ฒด API ์ง์์ด ์ถ๊ฐ ๋์์ต๋๋ค. (2013. 08. 23)
PIP/PyPI ์์ ์ค์น๊ฐ ๊ฐ๋ฅํฉ๋๋ค. (2013. 09. 09)
๊ธฐ๋ณธ๊ฐ ์ง์ ์ ํตํ ํธ๋ฆฌํ ์ฌ์ฉ
commands.py
์ ๋ช
์๋์ด ์๋ ๊ฐ ๋ช
๋ น์๋ default
๋ผ๋ Dictionary ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ง์ ํ ๊ฒฝ์ฐ ๋ช
๋ น์ฐฝ์์ ๋ณ๋๋ก ์ง์ ํ์ง ์๋ ํ ํด๋น default
๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. ํ์ฌ deployVirtualMachine
๋ช
๋ น์ ๊ธฐ๋ณธ๊ฐ์ kr-1b ์กด์ Ubuntu 11.04 32bit, 1vCore, 1GB RAM, 100GB Disk
์๊ฐ์ ์๊ธ์ด ๋ค์ด๊ฐ ์์ต๋๋ค.
commands.py
์ ๋ช
์ ๋์ด ์์ง ์์ ๋ช
๋ น์ด๋ ์คํ์๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ API ๋ฌธ์๋ฅผ ๋ณด๊ณ ์ ์ ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ช
์ํ๋ฉด ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฒ์
0.1A : 2012. 03. 19 Release
0.2A : 2012. 11. 13
0.3A : 2013. 02. 20
0.3A-Forked-ziozzang-v1 : 2013. 08. 19
0.3A-Forked-ziozzang-v3 : 2013. 08. 23
1.0 : 2013. 09. 09