Jamie Hannaford | 2aaf1a6 | 2014-10-16 12:55:50 +0200 | [diff] [blame^] | 1 | <h2 id="tokens">Tokens</h2> |
| 2 | |
| 3 | <p>A token is an arbitrary bit of text that is used to access resources. Each |
| 4 | token has a scope that describes which resources are accessible with it. A |
| 5 | token may be revoked at anytime and is valid for a finite duration.</p> |
| 6 | |
| 7 | <h3 id="generate-a-token">Generate a token</h3> |
| 8 | |
| 9 | <p>The nature of required and optional auth options will depend on your provider, |
| 10 | but generally the <code>Username</code> and <code>IdentityEndpoint</code> fields are always |
| 11 | required. Some providers will insist on a <code>Password</code> instead of an <code>APIKey</code>, |
| 12 | others will prefer <code>TenantID</code> over <code>TenantName</code> - so it is always worth |
| 13 | checking before writing your implementation in Go.</p> |
| 14 | |
| 15 | <div class="highlight"><pre><code class="language-go" data-lang="go"><span class="kn">import</span> <span class="s">"github.com/rackspace/gophercloud/openstack/identity/v2/tokens"</span> |
| 16 | |
| 17 | <span class="nx">opts</span> <span class="o">:=</span> <span class="nx">tokens</span><span class="p">.</span><span class="nx">AuthOptions</span><span class="p">{</span> |
| 18 | <span class="nx">IdentityEndpoint</span><span class="p">:</span> <span class="s">"{identityURL}"</span><span class="p">,</span> |
| 19 | <span class="nx">Username</span><span class="p">:</span> <span class="s">"{username}"</span><span class="p">,</span> |
| 20 | <span class="nx">APIKey</span><span class="p">:</span> <span class="s">"{apiKey}"</span><span class="p">,</span> |
| 21 | <span class="p">}</span> |
| 22 | |
| 23 | <span class="nx">token</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">tokens</span><span class="p">.</span><span class="nx">Create</span><span class="p">(</span><span class="nx">client</span><span class="p">,</span> <span class="nx">opts</span><span class="p">).</span><span class="nx">Extract</span><span class="p">()</span></code></pre></div> |
| 24 | |
| 25 | <h2 id="tenants">Tenants</h2> |
| 26 | |
| 27 | <p>A tenant is a container used to group or isolate API resources. Depending on |
| 28 | the provider, a tenant can map to a customer, account, organization, or project.</p> |
| 29 | |
| 30 | <h3 id="list-tenants"> List tenants</h3> |
| 31 | |
| 32 | <div class="highlight"><pre><code class="language-go" data-lang="go"><span class="kn">import</span> <span class="p">(</span> |
| 33 | <span class="s">"github.com/rackspace/gophercloud/pagination"</span> |
| 34 | <span class="s">"github.com/rackspace/gophercloud/openstack/identity/v2/tenants"</span> |
| 35 | <span class="p">)</span> |
| 36 | |
| 37 | <span class="c1">// We have the option of filtering the tenant list. If we want the full</span> |
| 38 | <span class="c1">// collection, leave it as an empty struct</span> |
| 39 | <span class="nx">opts</span> <span class="o">:=</span> <span class="nx">tenants</span><span class="p">.</span><span class="nx">ListOpts</span><span class="p">{</span><span class="nx">Limit</span><span class="p">:</span> <span class="mi">10</span><span class="p">}</span> |
| 40 | |
| 41 | <span class="c1">// Retrieve a pager (i.e. a paginated collection)</span> |
| 42 | <span class="nx">pager</span> <span class="o">:=</span> <span class="nx">tenants</span><span class="p">.</span><span class="nx">List</span><span class="p">(</span><span class="nx">client</span><span class="p">,</span> <span class="nx">opts</span><span class="p">)</span> |
| 43 | |
| 44 | <span class="c1">// Define an anonymous function to be executed on each page's iteration</span> |
| 45 | <span class="nx">err</span> <span class="o">:=</span> <span class="nx">pager</span><span class="p">.</span><span class="nx">EachPage</span><span class="p">(</span><span class="kd">func</span><span class="p">(</span><span class="nx">page</span> <span class="nx">pagination</span><span class="p">.</span><span class="nx">Page</span><span class="p">)</span> <span class="p">(</span><span class="kt">bool</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span> |
| 46 | <span class="nx">tenantList</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">tenants</span><span class="p">.</span><span class="nx">ExtractTenants</span><span class="p">(</span><span class="nx">page</span><span class="p">)</span> |
| 47 | |
| 48 | <span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">t</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">tenantList</span> <span class="p">{</span> |
| 49 | <span class="c1">// "t" will be a tenants.Tenant</span> |
| 50 | <span class="p">}</span> |
| 51 | <span class="p">})</span></code></pre></div> |
| 52 | |