diff options
-rw-r--r-- | src/posts/multi-cloud-with-python-openstackclient.hbs | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/posts/multi-cloud-with-python-openstackclient.hbs b/src/posts/multi-cloud-with-python-openstackclient.hbs new file mode 100644 index 0000000..d4d3566 --- /dev/null +++ b/src/posts/multi-cloud-with-python-openstackclient.hbs | |||
@@ -0,0 +1,122 @@ | |||
1 | <!doctype html> | ||
2 | <html> | ||
3 | <head> | ||
4 | <title>python-openstackclient and os-client-config</title> | ||
5 | <meta name="description" content="How to use multiple clouds like a pro" /> | ||
6 | </head> | ||
7 | <body> | ||
8 | <p>Sometimes it's the little things.</p> | ||
9 | <p>Sometime this last year we added support to | ||
10 | <a href='http://docs.openstack.org/developer/python-openstackclient/'> | ||
11 | python-openstackclient | ||
12 | </a> | ||
13 | for using | ||
14 | <a href='http://docs.openstack.org/developer/os-client-config/'> | ||
15 | os-client-config</a> | ||
16 | based configuration. Doesn't that sound | ||
17 | exciting? It should - because it means you can put your 15 OpenStack | ||
18 | public cloud accounts into ~/.config/openstack/clouds.yaml and refer to | ||
19 | them by name. Like this:</p> | ||
20 | <pre><code> | ||
21 | clouds: | ||
22 | vexxhost: | ||
23 | profile: vexxhost | ||
24 | auth: | ||
25 | project_name: d8af8a8f-a573-48e6-898a-af333b970a2d | ||
26 | username: 0b8c435b-cc4d-4e05-8a47-a2ada0539af1 | ||
27 | password: XXXXXXXXXXXXXXXXXX | ||
28 | region_name: ca-ymq-1 | ||
29 | ovh: | ||
30 | profile: ovh | ||
31 | auth: | ||
32 | username: 6WjmCk3Kbe5v | ||
33 | password: XXXXXXXXXXXXXXXXX | ||
34 | project_name: 3614264792735868 | ||
35 | regions: | ||
36 | - SBG1 | ||
37 | - GRA1 | ||
38 | </code></pre> | ||
39 | |||
40 | <p>The profile entry in the file is a reference to | ||
41 | <a href='http://docs.openstack.org/developer/os-client-config/vendor-support.html'>known cloud vendors</a> so that you can take advantage of us | ||
42 | knowing things like their AUTH_URL and whether they use tasks or PUT | ||
43 | for image uploads</p> | ||
44 | |||
45 | <p>The neat thing about all that is that you can then just say:</p> | ||
46 | |||
47 | <pre><code> | ||
48 | openstack --os-cloud=vexxhost server list | ||
49 | openstack --os-cloud=vexxhost --os-region-name=SBG1 server list | ||
50 | </code></pre> | ||
51 | |||
52 | <p>to interact with your cloud accounts. The exact same config file | ||
53 | can also drive your ansible playbooks, so you cn do:</p> | ||
54 | <pre><code> | ||
55 | --- | ||
56 | - hosts: localhost | ||
57 | connection: local | ||
58 | gather_facts: False | ||
59 | tasks: | ||
60 | - os_keypair: | ||
61 | cloud: vexxhost | ||
62 | name: mordred | ||
63 | state: present | ||
64 | </code></pre> | ||
65 | |||
66 | <p>Followed by:</p> | ||
67 | <pre><code> | ||
68 | openstack --os-cloud=vexxhost openstack keypair show mordred | ||
69 | </code></pre> | ||
70 | |||
71 | <p>When you need to poke around manually.</p> | ||
72 | |||
73 | <h3>That's still too much typing</h3> | ||
74 | |||
75 | <p>If you're like me, that's still too much of a pain. So I added the | ||
76 | following to my bashrc:</p> | ||
77 | |||
78 | <pre><code> | ||
79 | if [ "$color_prompt" = yes ]; then | ||
80 | PS1='${debian_chroot:+($debian_chroot)}${OS_CLOUD:+${OS_CLOUD}:}${OS_REGION_NAME:+${OS_REGION_NAME}:}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | ||
81 | else | ||
82 | PS1='${debian_chroot:+($debian_chroot)}${OS_CLOUD:+${OS_CLOUD}:}${OS_REGION_NAME:+${OS_REGION_NAME}:}\u@\h:\w\$ ' | ||
83 | fi | ||
84 | |||
85 | function use { | ||
86 | declare -a CloudRegion=(${1//:/ }) | ||
87 | export OS_CLOUD=${CloudRegion[0]} | ||
88 | export OS_REGION_NAME=${CloudRegion[1]} | ||
89 | } | ||
90 | </code></pre> | ||
91 | |||
92 | <p>Which got me this:</p> | ||
93 | <pre><code> | ||
94 | mordred@camelot:~/src/openstack-infra/shade$ use vexxhostvexxhost:mordred@camelot:~/src/openstack-infra/shade$ openstack keypair show mordred | ||
95 | +-------------+-------------------------------------------------+ | ||
96 | | Field | Value | | ||
97 | +-------------+-------------------------------------------------+ | ||
98 | | created_at | 2015-04-13T13:30:12.000000 | | ||
99 | | deleted | False | | ||
100 | | deleted_at | None | | ||
101 | | fingerprint | 6b:8c:bd:93:e6:05:c7:1b:2f:fd:3c:11:b5:da:a6:52 | | ||
102 | | id | 68 | | ||
103 | | name | mordred | | ||
104 | | updated_at | None | | ||
105 | | user_id | e9b21dc437d149858faee0898fb08e92 | | ||
106 | +-------------+-------------------------------------------------+ | ||
107 | vexxhost:mordred@camelot:~/src/openstack-infra/shade$ use ovh:GRA1ovh:GRA1:mordred@camelot:~/src/openstack-infra/shade$ openstack keypair show mordred | ||
108 | +-------------+-------------------------------------------------+ | ||
109 | | Field | Value | | ||
110 | +-------------+-------------------------------------------------+ | ||
111 | | created_at | 2015-09-22T19:15:01.000000 | | ||
112 | | deleted | False | | ||
113 | | deleted_at | None | | ||
114 | | fingerprint | 6b:8c:bd:93:e6:05:c7:1b:2f:fd:3c:11:b5:da:a6:52 | | ||
115 | | id | 84923 | | ||
116 | | name | mordred | | ||
117 | | updated_at | None | | ||
118 | | user_id | e84b8554e09e4d9a9403b5c0b1184850 | | ||
119 | +-------------+-------------------------------------------------+ | ||
120 | </code></pre> | ||
121 | </body> | ||
122 | </html> | ||