blob: ad5273fa9958cf6924feb0faf7a115f8102602ca [file] [log] [blame]
Jamie Hannaford2aaf1a62014-10-16 12:55:50 +02001<h2 id="tokens">Tokens</h2>
2
3<p>A token is an arbitrary bit of text that is used to access resources. Each
4token has a scope that describes which resources are accessible with it. A
5token 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,
10but generally the <code>Username</code> and <code>IdentityEndpoint</code> fields are always
11required. Some providers will insist on a <code>Password</code> instead of an <code>APIKey</code>,
12others will prefer <code>TenantID</code> over <code>TenantName</code> - so it is always worth
13checking 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">&quot;github.com/rackspace/gophercloud/openstack/identity/v2/tokens&quot;</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">&quot;{identityURL}&quot;</span><span class="p">,</span>
19 <span class="nx">Username</span><span class="p">:</span> <span class="s">&quot;{username}&quot;</span><span class="p">,</span>
20 <span class="nx">APIKey</span><span class="p">:</span> <span class="s">&quot;{apiKey}&quot;</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
28the 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">&quot;github.com/rackspace/gophercloud/pagination&quot;</span>
34 <span class="s">&quot;github.com/rackspace/gophercloud/openstack/identity/v2/tenants&quot;</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&#39;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">// &quot;t&quot; will be a tenants.Tenant</span>
50 <span class="p">}</span>
51<span class="p">})</span></code></pre></div>
52