diff options
| author | Monty Taylor <mordred@inaugust.com> | 2016-02-22 07:39:02 -0800 |
|---|---|---|
| committer | Monty Taylor <mordred@inaugust.com> | 2016-02-22 07:39:02 -0800 |
| commit | 3e5cec75c1fcb6543de8d779243fba1d05dd940d (patch) | |
| tree | ed1dcc657f2f29b8e6e2b532b3451eb5dd3d9e07 /src | |
| parent | bc9fbd9225da291a8d3a5495d30cb5ab6383bec0 (diff) | |
Add post about using os-client-config
Diffstat (limited to 'src')
| -rw-r--r-- | src/posts/simple-openstack-clients.hbs | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/posts/simple-openstack-clients.hbs b/src/posts/simple-openstack-clients.hbs new file mode 100644 index 0000000..6d7b6e4 --- /dev/null +++ b/src/posts/simple-openstack-clients.hbs | |||
| @@ -0,0 +1,130 @@ | |||
| 1 | <!doctype html> | ||
| 2 | <html> | ||
| 3 | <head> | ||
| 4 | <title>Simple OpenStack access with os-client-config</title> | ||
| 5 | <meta name="description" content="Easy consumption of OpenStack Clouds" /> | ||
| 6 | </head> | ||
| 7 | <body> | ||
| 8 | <p>Simple things should be simple, and nowhere is that more true than in | ||
| 9 | constructing objects to interface with clouds. What you wnat to do is just | ||
| 10 | interact with the cloud - what you often are required to do is generate | ||
| 11 | sequences of object constructions because there are a bunch of things you | ||
| 12 | <em>might</em> have wanted to do.</p> | ||
| 13 | |||
| 14 | <p>In the spirit of making the simple things simple, we recently added a | ||
| 15 | couple of simple helper factory functions to | ||
| 16 | <a href='http://docs.openstack.org/developer/os-client-config/'> | ||
| 17 | os-client-config</a>: One to create Client objects, and one to create | ||
| 18 | mounted Session objects. Both functions fully support the breadth of | ||
| 19 | config options afforded by os-client-config, including environment | ||
| 20 | variables, config files and command line options.</p> | ||
| 21 | |||
| 22 | <p>Examples are probably best</p> | ||
| 23 | |||
| 24 | <h3>Client Library Client Objects</h3> | ||
| 25 | |||
| 26 | <p>Make a nova client object that uses env vars for auth info:</p> | ||
| 27 | |||
| 28 | <pre><code> | ||
| 29 | client = os_client_config.make_client('compute') | ||
| 30 | </code></pre> | ||
| 31 | |||
| 32 | <p>Make a glance client object for the cloud named 'mtvexx' in my | ||
| 33 | clouds.yaml file:</p> | ||
| 34 | |||
| 35 | <pre><code> | ||
| 36 | client = os_client_config.make_client('image', cloud='mtvxx') | ||
| 37 | </code></pre> | ||
| 38 | |||
| 39 | <p>Make a neutron client by passing in all of the values directly:</p> | ||
| 40 | |||
| 41 | <pre><code> | ||
| 42 | client = os_client_config.make_client( | ||
| 43 | 'network', | ||
| 44 | auth_url=OS_AUTH_URL, username=OS_USERNAME, | ||
| 45 | password=OS_PASSWORD, project_name=OS_PROJECT_NAME, | ||
| 46 | region_name=OS_REGION_NAME) | ||
| 47 | </code></pre> | ||
| 48 | |||
| 49 | <p>Make a barbican client from env vars with all the standard arguments | ||
| 50 | passed on the comand line:</p> | ||
| 51 | |||
| 52 | <pre><code> | ||
| 53 | import argparse | ||
| 54 | client = os_client_config.make_client( | ||
| 55 | 'key-manager', options=argparse.ArgumentParser()) | ||
| 56 | </code></pre> | ||
| 57 | |||
| 58 | <p>That likely covers most of the common end-user use cases with using | ||
| 59 | OpenStack Client Libraries. If you need more flexibility, you can always | ||
| 60 | create an os-client-config CloudConfig object and call | ||
| 61 | get_legacy_client, but I'm a big believer in one step instead of three | ||
| 62 | if you can get away with it:</p> | ||
| 63 | |||
| 64 | <pre><code> | ||
| 65 | config = os_client_config.OpenStackConfig() | ||
| 66 | cloud_config = config.get_one_cloud(cloud='vexxhost') | ||
| 67 | client = cloud_config.get_legacy_client('compute') | ||
| 68 | </code></pre> | ||
| 69 | |||
| 70 | <h3>Mounted Keystone Session</h3> | ||
| 71 | |||
| 72 | <p>What if what you want to do is make some direct REST calls to an | ||
| 73 | OpenStack service, but you want to be able to do env vars or argparse or | ||
| 74 | clouds.yaml files to configure your authentication?</p> | ||
| 75 | |||
| 76 | <p>Well - you're in luck!</p> | ||
| 77 | |||
| 78 | <p>Make a Session object for nova that uses env vars for auth info:</p> | ||
| 79 | |||
| 80 | <pre><code> | ||
| 81 | client = os_client_config.session_client('compute') | ||
| 82 | </code></pre> | ||
| 83 | |||
| 84 | <p>That will get you a keystoneauth Session object that has been "mounted" on the compute service. So you can do this:</p> | ||
| 85 | |||
| 86 | <pre><code> | ||
| 87 | response = session.get('/servers') | ||
| 88 | server_list = response.json()['servers'] | ||
| 89 | </code></pre> | ||
| 90 | |||
| 91 | <p>The same argument sequence used for <em>make_client</em> works for | ||
| 92 | <em>session_client</em>. | ||
| 93 | |||
| 94 | <p>Make a glance Session object for the cloud named 'mtvexx' in my | ||
| 95 | clouds.yaml file:</p> | ||
| 96 | |||
| 97 | <pre><code> | ||
| 98 | session = os_client_config.session_client('image', cloud='mtvxx') | ||
| 99 | </code></pre> | ||
| 100 | |||
| 101 | <p>Make a neutron Session object by passing in all of the values | ||
| 102 | directly:</p> | ||
| 103 | |||
| 104 | <pre><code> | ||
| 105 | session = os_client_config.session_client( | ||
| 106 | 'network', | ||
| 107 | auth_url=OS_AUTH_URL, username=OS_USERNAME, | ||
| 108 | password=OS_PASSWORD, project_name=OS_PROJECT_NAME, | ||
| 109 | region_name=OS_REGION_NAME) | ||
| 110 | </code></pre> | ||
| 111 | |||
| 112 | <p>Make a barbican Session object from env vars with all the standard | ||
| 113 | arguments passed on the comand line:</p> | ||
| 114 | |||
| 115 | <pre><code> | ||
| 116 | import argparse | ||
| 117 | session = os_client_config.session_client( | ||
| 118 | 'key-manager', options=argparse.ArgumentParser()) | ||
| 119 | </code></pre> | ||
| 120 | |||
| 121 | <p>Do it all without syntactic help:</p> | ||
| 122 | |||
| 123 | <pre><code> | ||
| 124 | config = os_client_config.OpenStackConfig() | ||
| 125 | cloud_config = config.get_one_cloud(cloud='vexxhost') | ||
| 126 | session = cloud_config.get_session_client('compute') | ||
| 127 | </code></pre> | ||
| 128 | |||
| 129 | </body> | ||
| 130 | </html> | ||
