Modified: jclouds/site-content/guides/aws-sqs/index.html URL: http://svn.apache.org/viewvc/jclouds/site-content/guides/aws-sqs/index.html?rev=1923693&r1=1923692&r2=1923693&view=diff ============================================================================== --- jclouds/site-content/guides/aws-sqs/index.html (original) +++ jclouds/site-content/guides/aws-sqs/index.html Mon Feb 10 07:25:53 2025 @@ -149,63 +149,46 @@ <div class="page-header"> <h1>Simple Queue Service: In Depth</h1> </div> - <p>Amazon SQS (<code>aws-sqs</code>) is an easy queuing service with which you can easily send or receive 1-10 messages at a time. SQS support has been in jclouds since version 1.5.0.</p> + <p>Amazon SQS (<code class="language-plaintext highlighter-rouge">aws-sqs</code>) is an easy queuing service with which you can easily send or receive 1-10 messages at a time. SQS support has been in jclouds since version 1.5.0.</p> -<h3>Creating a queue</h3> +<h3 id="creating-a-queue">Creating a queue</h3> -<p>You can lookup a queue by name or create one on demand. Here's a common pattern for that:</p> +<p>You can lookup a queue by name or create one on demand. Hereâs a common pattern for that:</p> -<div class="highlight"><pre><code class="java"><span class="n">URI</span> <span class="n">queue</span> <span class="o">=</span> <span class="n">queueApi</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">queueName</span><span class="o">);</span> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="no">URI</span> <span class="n">queue</span> <span class="o">=</span> <span class="n">queueApi</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">queueName</span><span class="o">);</span> <span class="k">if</span> <span class="o">(</span><span class="n">queue</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> <span class="n">queue</span> <span class="o">=</span> <span class="n">queueApi</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="n">queueName</span><span class="o">);</span> -<span class="o">}</span> -</code></pre></div> +<span class="o">}</span></code></pre></figure> +<h3 id="getting-an-api-connection-to-a-queue">Getting an api connection to a queue</h3> -<h3>Getting an api connection to a queue</h3> +<p>In SQS, once you discover or create a queue, you can focus a connection to to that, by supplying the queueâs url.</p> -<p>In SQS, once you discover or create a queue, you can focus a connection to to that, by supplying the queue's url.</p> - -<div class="highlight"><pre><code class="java"><span class="n">queueApi</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getApi</span><span class="o">().</span><span class="na">getMessageApiForQueue</span><span class="o">(</span><span class="n">queueURI</span><span class="o">);</span> -</code></pre></div> - - -<h3>sending a message</h3> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">queueApi</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getApi</span><span class="o">().</span><span class="na">getMessageApiForQueue</span><span class="o">(</span><span class="n">queueURI</span><span class="o">);</span></code></pre></figure> +<h3 id="sending-a-message">sending a message</h3> <p>Sending a message is simple, just supply the text you wish to send.</p> -<div class="highlight"><pre><code class="java"><span class="n">queueApi</span><span class="o">.</span><span class="na">send</span><span class="o">(</span><span class="s">"my message"</span><span class="o">);</span> -</code></pre></div> - - -<h3>receiving a message</h3> - -<p>Receiving a message is also simple: invoke <code>receive</code> and if your result is not null, you have a message!</p> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">queueApi</span><span class="o">.</span><span class="na">send</span><span class="o">(</span><span class="s">"my message"</span><span class="o">);</span></code></pre></figure> -<div class="highlight"><pre><code class="java"><span class="n">message</span> <span class="o">=</span> <span class="n">queueApi</span><span class="o">.</span><span class="na">receive</span><span class="o">();</span> -</code></pre></div> +<h3 id="receiving-a-message">receiving a message</h3> +<p>Receiving a message is also simple: invoke <code class="language-plaintext highlighter-rouge">receive</code> and if your result is not null, you have a message!</p> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">message</span> <span class="o">=</span> <span class="n">queueApi</span><span class="o">.</span><span class="na">receive</span><span class="o">();</span></code></pre></figure> -<h3>sending many messages</h3> - +<h3 id="sending-many-messages">sending many messages</h3> <p>You can check whether bulk message requests came back, by checking the status result</p> -<div class="highlight"><pre><code class="java"><span class="n">BatchResult</span><span class="o"><</span><span class="n">MessageIdAndMD5</span><span class="o">></span> <span class="n">acks</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="na">send</span><span class="o">(</span><span class="n">ImmutableMap</span><span class="o">.<</span><span class="n">String</span><span class="o">,</span> <span class="n">String</span><span class="o">></span> <span class="n">builder</span><span class="o">()</span> - <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"id1"</span><span class="o">,</span> <span class="s">"test message one"</span><span class="o">)</span> - <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"id2"</span><span class="o">,</span> <span class="s">"test message two"</span><span class="o">)</span> - <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"id3"</span><span class="o">,</span> <span class="s">"test message two"</span><span class="o">)</span> - <span class="o">.</span><span class="na">build</span><span class="o">());</span> -</code></pre></div> - - -<h3>receiving many messages</h3> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="nc">BatchResult</span><span class="o"><</span><span class="nc">MessageIdAndMD5</span><span class="o">></span> <span class="n">acks</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="na">send</span><span class="o">(</span><span class="nc">ImmutableMap</span><span class="o">.<</span><span class="nc">String</span><span class="o">,</span> <span class="nc">String</span><span class="o">></span> <span class="nf">builder</span><span class="o">()</span> + <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"id1"</span><span class="o">,</span> <span class="s">"test message one"</span><span class="o">)</span> + <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"id2"</span><span class="o">,</span> <span class="s">"test message two"</span><span class="o">)</span> + <span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">"id3"</span><span class="o">,</span> <span class="s">"test message two"</span><span class="o">)</span> + <span class="o">.</span><span class="na">build</span><span class="o">());</span></code></pre></figure> +<h3 id="receiving-many-messages">receiving many messages</h3> <p>Note that you can receive the same message twice <em>even in the same request!</em>. Hence we use List, not Set.</p> -<div class="highlight"><pre><code class="java"><span class="n">List</span><span class="o"><</span><span class="n">Message</span><span class="o">></span> <span class="n">messages</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="na">receive</span><span class="o">(</span><span class="mi">10</span><span class="o">);</span> -</code></pre></div> - - +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="nc">List</span><span class="o"><</span><span class="nc">Message</span><span class="o">></span> <span class="n">messages</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="na">receive</span><span class="o">(</span><span class="mi">10</span><span class="o">);</span></code></pre></figure> <div class="row clearfix">
Modified: jclouds/site-content/guides/aws/index.html URL: http://svn.apache.org/viewvc/jclouds/site-content/guides/aws/index.html?rev=1923693&r1=1923692&r2=1923693&view=diff ============================================================================== --- jclouds/site-content/guides/aws/index.html (original) +++ jclouds/site-content/guides/aws/index.html Mon Feb 10 07:25:53 2025 @@ -149,98 +149,91 @@ <div class="page-header"> <h1>Amazon Web Services: Getting Started Guide</h1> </div> - <p>This page helps you get started with <code>jclouds</code> API with Amazon Web Services</p> + <p>This page helps you get started with <code class="language-plaintext highlighter-rouge">jclouds</code> API with Amazon Web Services</p> <ol> -<li>Sign up for <a href="https://aws-portal.amazon.com/gp/aws/developer/registration/index.html">Amazon Web Services Signup</a>.</li> -<li>Get your Access Key ID and Secret Access Key by going to this <a href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key">page</a>. + <li>Sign up for <a href="https://aws-portal.amazon.com/gp/aws/developer/registration/index.html">Amazon Web Services Signup</a>.</li> + <li>Get your Access Key ID and Secret Access Key by going to this <a href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key">page</a>. As a best practise, do NOT use AWS account level credentials. Instead create a new user through AWS Identity and Access Management (IAM) and grant adequate permissions to the user. Use Access Key ID and Secret Access Key for this newly created user.</li> -<li>Ensure you are using a recent JDK 6 version.</li> -<li>Setup your project to include aws-ec2 and aws-s3. - -<ul> -<li>Get the dependencies <code>org.apache.jclouds.provider/aws-ec2</code> and <code>org.apache.jclouds.provider/aws-s3</code> using jclouds <a href="/start/install">Installation</a>.</li> -<li>In order to use the SshjSshClientModule and Log4JLoggingModule you have to get dependencies <code>org.apache.jclouds.driver/jclouds-sshj</code> and <code>org.apache.jclouds.driver/jclouds-sl4j</code>.</li> -</ul> -</li> -<li>Start coding</li> + <li>Ensure you are using a recent JDK 6 version.</li> + <li>Setup your project to include aws-ec2 and aws-s3. + <ul> + <li>Get the dependencies <code class="language-plaintext highlighter-rouge">org.apache.jclouds.provider/aws-ec2</code> and <code class="language-plaintext highlighter-rouge">org.apache.jclouds.provider/aws-s3</code> using jclouds <a href="/start/install">Installation</a>.</li> + <li>In order to use the SshjSshClientModule and Log4JLoggingModule you have to get dependencies <code class="language-plaintext highlighter-rouge">org.apache.jclouds.driver/jclouds-sshj</code> and <code class="language-plaintext highlighter-rouge">org.apache.jclouds.driver/jclouds-sl4j</code>.</li> + </ul> + </li> + <li>Start coding</li> </ol> +<h2 id="using-s3">Using S3</h2> -<h2>Using S3</h2> - -<div class="highlight"><pre><code class="java"><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">jclouds</span><span class="o">.</span><span class="na">aws</span><span class="o">.</span><span class="na">s3</span><span class="o">.</span><span class="na">options</span><span class="o">.</span><span class="na">PutObjectOptions</span><span class="o">.</span><span class="na">Builder</span><span class="o">.</span><span class="na">withAcl</span><span class="o">;</span> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">jclouds</span><span class="o">.</span><span class="na">aws</span><span class="o">.</span><span class="na">s3</span><span class="o">.</span><span class="na">options</span><span class="o">.</span><span class="na">PutObjectOptions</span><span class="o">.</span><span class="na">Builder</span><span class="o">.</span><span class="na">withAcl</span><span class="o">;</span> <span class="c1">// get a context with amazon that offers the portable BlobStore API</span> -<span class="n">BlobStoreContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"aws-s3"</span><span class="o">)</span> +<span class="nc">BlobStoreContext</span> <span class="n">context</span> <span class="o">=</span> <span class="nc">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"aws-s3"</span><span class="o">)</span> <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">accesskeyid</span><span class="o">,</span> <span class="n">secretkey</span><span class="o">)</span> - <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="n">BlobStoreContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> + <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="nc">BlobStoreContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> <span class="c1">// create a container in the default location</span> -<span class="n">BlobStore</span> <span class="n">blobStore</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">();</span> +<span class="nc">BlobStore</span> <span class="n">blobStore</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">();</span> <span class="n">blobStore</span><span class="o">.</span><span class="na">createContainerInLocation</span><span class="o">(</span><span class="kc">null</span><span class="o">,</span> <span class="n">bucket</span><span class="o">);</span> <span class="c1">// add blob</span> -<span class="n">Blob</span> <span class="n">blob</span> <span class="o">=</span> <span class="n">blobStore</span><span class="o">.</span><span class="na">newBlob</span><span class="o">(</span><span class="s">"test"</span><span class="o">);</span> -<span class="n">blob</span><span class="o">.</span><span class="na">setPayload</span><span class="o">(</span><span class="s">"test data"</span><span class="o">);</span> +<span class="nc">Blob</span> <span class="n">blob</span> <span class="o">=</span> <span class="n">blobStore</span><span class="o">.</span><span class="na">newBlob</span><span class="o">(</span><span class="s">"test"</span><span class="o">);</span> +<span class="n">blob</span><span class="o">.</span><span class="na">setPayload</span><span class="o">(</span><span class="s">"test data"</span><span class="o">);</span> <span class="n">blobStore</span><span class="o">.</span><span class="na">putBlob</span><span class="o">(</span><span class="n">bucket</span><span class="o">,</span> <span class="n">blob</span><span class="o">);</span> <span class="c1">// when you need access to s3-specific features,</span> <span class="c1">// use the provider-specific context</span> -<span class="n">AWSS3Client</span> <span class="n">s3Client</span> <span class="o">=</span> - <span class="n">AWSS3Client</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">cast</span><span class="o">(</span><span class="n">context</span><span class="o">.</span><span class="na">getProviderSpecificContext</span><span class="o">().</span><span class="na">getApi</span><span class="o">());</span> +<span class="nc">AWSS3Client</span> <span class="n">s3Client</span> <span class="o">=</span> + <span class="nc">AWSS3Client</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">cast</span><span class="o">(</span><span class="n">context</span><span class="o">.</span><span class="na">getProviderSpecificContext</span><span class="o">().</span><span class="na">getApi</span><span class="o">());</span> <span class="c1">// make the object world readable</span> -<span class="n">String</span> <span class="n">publicReadWriteObjectKey</span> <span class="o">=</span> <span class="s">"public-read-write-acl"</span><span class="o">;</span> -<span class="n">S3Object</span> <span class="n">object</span> <span class="o">=</span> <span class="n">s3Client</span><span class="o">.</span><span class="na">newS3Object</span><span class="o">();</span> +<span class="nc">String</span> <span class="n">publicReadWriteObjectKey</span> <span class="o">=</span> <span class="s">"public-read-write-acl"</span><span class="o">;</span> +<span class="nc">S3Object</span> <span class="n">object</span> <span class="o">=</span> <span class="n">s3Client</span><span class="o">.</span><span class="na">newS3Object</span><span class="o">();</span> <span class="n">object</span><span class="o">.</span><span class="na">getMetadata</span><span class="o">().</span><span class="na">setKey</span><span class="o">(</span><span class="n">publicReadWriteObjectKey</span><span class="o">);</span> -<span class="n">object</span><span class="o">.</span><span class="na">setPayload</span><span class="o">(</span><span class="s">"hello world"</span><span class="o">);</span> -<span class="n">s3Client</span><span class="o">.</span><span class="na">putObject</span><span class="o">(</span><span class="n">bucket</span><span class="o">,</span> <span class="n">object</span><span class="o">,</span> <span class="n">withAcl</span><span class="o">(</span><span class="n">CannedAccessPolicy</span><span class="o">.</span><span class="na">PUBLIC_READ</span><span class="o">));</span> - -<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span> -</code></pre></div> +<span class="n">object</span><span class="o">.</span><span class="na">setPayload</span><span class="o">(</span><span class="s">"hello world"</span><span class="o">);</span> +<span class="n">s3Client</span><span class="o">.</span><span class="na">putObject</span><span class="o">(</span><span class="n">bucket</span><span class="o">,</span> <span class="n">object</span><span class="o">,</span> <span class="n">withAcl</span><span class="o">(</span><span class="nc">CannedAccessPolicy</span><span class="o">.</span><span class="na">PUBLIC_READ</span><span class="o">));</span> +<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span></code></pre></figure> -<h2>Using EC2</h2> +<h2 id="using-ec2">Using EC2</h2> -<div class="highlight"><pre><code class="java"><span class="c1">// get a context with ec2 that offers the portable ComputeService API</span> -<span class="n">ComputeServiceContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"aws-ec2"</span><span class="o">)</span> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="c1">// get a context with ec2 that offers the portable ComputeService API</span> +<span class="nc">ComputeServiceContext</span> <span class="n">context</span> <span class="o">=</span> <span class="nc">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"aws-ec2"</span><span class="o">)</span> <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">accesskeyid</span><span class="o">,</span> <span class="n">secretkey</span><span class="o">)</span> - <span class="o">.</span><span class="na">modules</span><span class="o">(</span><span class="n">ImmutableSet</span><span class="o">.<</span><span class="n">Module</span><span class="o">></span> <span class="n">of</span><span class="o">(</span><span class="k">new</span> <span class="n">Log4JLoggingModule</span><span class="o">(),</span> + <span class="o">.</span><span class="na">modules</span><span class="o">(</span><span class="nc">ImmutableSet</span><span class="o">.<</span><span class="nc">Module</span><span class="o">></span> <span class="nf">of</span><span class="o">(</span><span class="k">new</span> <span class="nc">Log4JLoggingModule</span><span class="o">(),</span> <span class="k">new</span> <span class="nf">SshjSshClientModule</span><span class="o">()))</span> - <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="n">ComputeServiceContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> + <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="nc">ComputeServiceContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> -<span class="c1">// here's an example of the portable api</span> -<span class="n">Set</span><span class="o"><?</span> <span class="kd">extends</span> <span class="n">Location</span><span class="o">></span> <span class="n">locations</span> <span class="o">=</span> +<span class="c1">// here's an example of the portable api</span> +<span class="nc">Set</span><span class="o"><?</span> <span class="kd">extends</span> <span class="nc">Location</span><span class="o">></span> <span class="n">locations</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">listAssignableLocations</span><span class="o">();</span> -<span class="n">Set</span><span class="o"><?</span> <span class="kd">extends</span> <span class="n">Image</span><span class="o">></span> <span class="n">images</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">listImages</span><span class="o">();</span> +<span class="nc">Set</span><span class="o"><?</span> <span class="kd">extends</span> <span class="nc">Image</span><span class="o">></span> <span class="n">images</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">listImages</span><span class="o">();</span> <span class="c1">// pick the highest version of the RightScale CentOS template</span> -<span class="n">Template</span> <span class="n">template</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">templateBuilder</span><span class="o">().</span><span class="na">osFamily</span><span class="o">(</span><span class="n">OsFamily</span><span class="o">.</span><span class="na">CENTOS</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> +<span class="nc">Template</span> <span class="n">template</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">templateBuilder</span><span class="o">().</span><span class="na">osFamily</span><span class="o">(</span><span class="nc">OsFamily</span><span class="o">.</span><span class="na">CENTOS</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> <span class="c1">// specify your own groups which already have the correct rules applied</span> -<span class="n">template</span><span class="o">.</span><span class="na">getOptions</span><span class="o">().</span><span class="na">as</span><span class="o">(</span><span class="n">AWSEC2TemplateOptions</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">securityGroups</span><span class="o">(</span><span class="n">group1</span><span class="o">);</span> +<span class="n">template</span><span class="o">.</span><span class="na">getOptions</span><span class="o">().</span><span class="na">as</span><span class="o">(</span><span class="nc">AWSEC2TemplateOptions</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">securityGroups</span><span class="o">(</span><span class="n">group1</span><span class="o">);</span> <span class="c1">// specify your own keypair for use in creating nodes</span> -<span class="n">template</span><span class="o">.</span><span class="na">getOptions</span><span class="o">().</span><span class="na">as</span><span class="o">(</span><span class="n">AWSEC2TemplateOptions</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">keyPair</span><span class="o">(</span><span class="n">keyPair</span><span class="o">);</span> +<span class="n">template</span><span class="o">.</span><span class="na">getOptions</span><span class="o">().</span><span class="na">as</span><span class="o">(</span><span class="nc">AWSEC2TemplateOptions</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">keyPair</span><span class="o">(</span><span class="n">keyPair</span><span class="o">);</span> <span class="c1">// run a couple nodes accessible via group</span> -<span class="n">Set</span><span class="o"><?</span> <span class="kd">extends</span> <span class="n">NodeMetadata</span><span class="o">></span> <span class="n">nodes</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">createNodesInGroup</span><span class="o">(</span><span class="s">"webserver"</span><span class="o">,</span> <span class="mi">2</span><span class="o">,</span> <span class="n">template</span><span class="o">);</span> +<span class="nc">Set</span><span class="o"><?</span> <span class="kd">extends</span> <span class="nc">NodeMetadata</span><span class="o">></span> <span class="n">nodes</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">createNodesInGroup</span><span class="o">(</span><span class="s">"webserver"</span><span class="o">,</span> <span class="mi">2</span><span class="o">,</span> <span class="n">template</span><span class="o">);</span> <span class="c1">// when you need access to very ec2-specific features, use the provider-specific context</span> -<span class="n">AWSEC2Client</span> <span class="n">ec2Client</span> <span class="o">=</span> <span class="n">AWSEC2Client</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">cast</span><span class="o">(</span><span class="n">context</span><span class="o">.</span><span class="na">getProviderSpecificContext</span><span class="o">().</span><span class="na">getApi</span><span class="o">());</span> +<span class="nc">AWSEC2Client</span> <span class="n">ec2Client</span> <span class="o">=</span> <span class="nc">AWSEC2Client</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">cast</span><span class="o">(</span><span class="n">context</span><span class="o">.</span><span class="na">getProviderSpecificContext</span><span class="o">().</span><span class="na">getApi</span><span class="o">());</span> <span class="c1">// ex. to get an ip and associate it with a node</span> -<span class="n">NodeMetadata</span> <span class="n">node</span> <span class="o">=</span> <span class="n">Iterables</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">nodes</span><span class="o">,</span> <span class="mi">0</span><span class="o">);</span> -<span class="n">String</span> <span class="n">ip</span> <span class="o">=</span> <span class="n">ec2Client</span><span class="o">.</span><span class="na">getElasticIPAddressServices</span><span class="o">().</span><span class="na">allocateAddressInRegion</span><span class="o">(</span><span class="n">node</span><span class="o">.</span><span class="na">getLocation</span><span class="o">().</span><span class="na">getId</span><span class="o">());</span> +<span class="nc">NodeMetadata</span> <span class="n">node</span> <span class="o">=</span> <span class="nc">Iterables</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">nodes</span><span class="o">,</span> <span class="mi">0</span><span class="o">);</span> +<span class="nc">String</span> <span class="n">ip</span> <span class="o">=</span> <span class="n">ec2Client</span><span class="o">.</span><span class="na">getElasticIPAddressServices</span><span class="o">().</span><span class="na">allocateAddressInRegion</span><span class="o">(</span><span class="n">node</span><span class="o">.</span><span class="na">getLocation</span><span class="o">().</span><span class="na">getId</span><span class="o">());</span> <span class="n">ec2Client</span><span class="o">.</span><span class="na">getElasticIPAddressServices</span><span class="o">().</span><span class="na">associateAddressInRegion</span><span class="o">(</span><span class="n">node</span><span class="o">.</span><span class="na">getLocation</span><span class="o">().</span><span class="na">getId</span><span class="o">(),</span><span class="n">ip</span><span class="o">,</span> <span class="n">node</span><span class="o">.</span><span class="na">getProviderId</span><span class="o">());</span> -<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span> -</code></pre></div> - - +<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span></code></pre></figure> <div class="row clearfix"> Modified: jclouds/site-content/guides/azure-storage/index.html URL: http://svn.apache.org/viewvc/jclouds/site-content/guides/azure-storage/index.html?rev=1923693&r1=1923692&r2=1923693&view=diff ============================================================================== --- jclouds/site-content/guides/azure-storage/index.html (original) +++ jclouds/site-content/guides/azure-storage/index.html Mon Feb 10 07:25:53 2025 @@ -150,112 +150,104 @@ <h1>Azure Storage Service: Getting Started Guide</h1> </div> <ol> -<li>Sign up for an <a href="https://www.microsoft.com/windowsazure/offers/">Azure Account</a></li> -<li>Get your account and key - -<ul> -<li>Login to the <a href="https://manage.windowsazure.com">Microsoft Azure Portal</a>. The <a href="https://portal.azure.com">new portal</a> is in preview stage and hence instructions are not aligned with it.</li> -<li>Click 'New', 'Data Servies', 'Storage' and 'Quick Create'.</li> -<li>Enter the Storage Account Name. Make sure the account is available and then click <em>Create</em> - -<ul> -<li>This is your Storage account name you use in jclouds.</li> -</ul> -</li> -<li>Under the main Azure screen, you should see Cloud Storage and the service you setup; Click on that.</li> -<li>Click on 'Manage Access Keys' at bottom of the page and copy Primary Access Key. - -<ul> -<li>Primary Access Key is the key you use in jclouds</li> -</ul> -</li> -</ul> -</li> -<li>Ensure you are using a recent JDK 6</li> -<li>Setup your project to include <code>azureblob</code> - -<ul> -<li>Get the dependency <code>org.apache.jclouds.provider/azureblob</code> using jclouds <a href="/start/install">Installation</a>.</li> -</ul> -</li> -<li>Setup your project to include 'guava'. Include following dependency to jclouds <a href="/start/install">Installation</a>. Update the version mentioned in dependency below to the latest available version. - <dependency> + <li>Sign up for an <a href="https://www.microsoft.com/windowsazure/offers/">Azure Account</a></li> + <li>Get your account and key + <ul> + <li>Login to the <a href="https://manage.windowsazure.com">Microsoft Azure Portal</a>. The <a href="https://portal.azure.com">new portal</a> is in preview stage and hence instructions are not aligned with it.</li> + <li>Click âNewâ, âData Serviesâ, âStorageâ and âQuick Createâ.</li> + <li>Enter the Storage Account Name. Make sure the account is available and then click <em>Create</em> + <ul> + <li>This is your Storage account name you use in jclouds.</li> + </ul> + </li> + <li>Under the main Azure screen, you should see Cloud Storage and the service you setup; Click on that.</li> + <li>Click on âManage Access Keysâ at bottom of the page and copy Primary Access Key. + <ul> + <li>Primary Access Key is the key you use in jclouds</li> + </ul> + </li> + </ul> + </li> + <li>Ensure you are using a recent JDK 6</li> + <li>Setup your project to include <code class="language-plaintext highlighter-rouge">azureblob</code> + <ul> + <li>Get the dependency <code class="language-plaintext highlighter-rouge">org.apache.jclouds.provider/azureblob</code> using jclouds <a href="/start/install">Installation</a>.</li> + </ul> + </li> + <li>Setup your project to include âguavaâ. Include following dependency to jclouds <a href="/start/install">Installation</a>. Update the version mentioned in dependency below to the latest available version. + <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>16.0</version> - </dependency></li> -<li>Start coding. Replace values in angular brackets <> with actual values.</li> + </dependency> + </li> + <li>Start coding. Replace values in angular brackets <> with actual values.</li> </ol> - -<div class="highlight"><pre><code class="java"><span class="kn">import</span> <span class="nn">org.jclouds.blobstore.*</span><span class="o">;</span> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">import</span> <span class="nn">org.jclouds.blobstore.*</span><span class="o">;</span> <span class="kn">import</span> <span class="nn">org.jclouds.ContextBuilder</span><span class="o">;</span> <span class="kn">import</span> <span class="nn">org.jclouds.blobstore.domain.*</span><span class="o">;</span> <span class="kn">import</span> <span class="nn">org.jclouds.azureblob.*</span><span class="o">;</span> <span class="kn">import</span> <span class="nn">com.google.common.io.*</span><span class="o">;</span> <span class="kn">import</span> <span class="nn">java.io.*</span><span class="o">;</span> -<span class="n">String</span> <span class="n">storageAccountName</span> <span class="o">=</span> <span class="s">"<Your storage account name>"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">storageAccountKey</span> <span class="o">=</span> <span class="s">"<Your storage account primary access key>"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">containerName</span> <span class="o">=</span> <span class="s">"<Your container name>"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">blobFullyQualifiedFileName</span> <span class="o">=</span> <span class="s">"<Fully qualified filename>"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">blobName</span> <span class="o">=</span> <span class="s">"<Your blob name>"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">storageAccountName</span> <span class="o">=</span> <span class="s">"<Your storage account name>"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">storageAccountKey</span> <span class="o">=</span> <span class="s">"<Your storage account primary access key>"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">containerName</span> <span class="o">=</span> <span class="s">"<Your container name>"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">blobFullyQualifiedFileName</span> <span class="o">=</span> <span class="s">"<Fully qualified filename>"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">blobName</span> <span class="o">=</span> <span class="s">"<Your blob name>"</span><span class="o">;</span> <span class="c1">// Get a context with amazon that offers the portable BlobStore api</span> -<span class="n">BlobStoreContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"azureblob"</span><span class="o">)</span> - <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">storageAccountName</span><span class="o">,</span> <span class="n">storageAccountKey</span><span class="o">)</span> - <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="n">BlobStoreContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> +<span class="nc">BlobStoreContext</span> <span class="n">context</span> <span class="o">=</span> <span class="nc">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"azureblob"</span><span class="o">)</span> + <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">storageAccountName</span><span class="o">,</span> <span class="n">storageAccountKey</span><span class="o">)</span> + <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="nc">BlobStoreContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> <span class="c1">// Access the BlobStore</span> -<span class="n">BlobStore</span> <span class="n">blobStore</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">();</span> +<span class="nc">BlobStore</span> <span class="n">blobStore</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">();</span> <span class="c1">// Create a Container</span> <span class="n">blobStore</span><span class="o">.</span><span class="na">createContainerInLocation</span><span class="o">(</span><span class="kc">null</span><span class="o">,</span> <span class="n">containerName</span><span class="o">);</span> <span class="c1">// Create a blob. </span> -<span class="n">ByteSource</span> <span class="n">payload</span> <span class="o">=</span> <span class="n">Files</span><span class="o">.</span><span class="na">asByteSource</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">blobFullyQualifiedFileName</span><span class="o">));</span> -<span class="n">Blob</span> <span class="n">blob</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">().</span><span class="na">blobBuilder</span><span class="o">(</span><span class="n">blobName</span><span class="o">)</span> - <span class="o">.</span><span class="na">payload</span><span class="o">(</span><span class="n">payload</span><span class="o">)</span> <span class="c1">// or InputStream</span> - <span class="o">.</span><span class="na">contentLength</span><span class="o">(</span><span class="n">payload</span><span class="o">.</span><span class="na">size</span><span class="o">())</span> - <span class="o">.</span><span class="na">build</span><span class="o">();</span> +<span class="nc">ByteSource</span> <span class="n">payload</span> <span class="o">=</span> <span class="nc">Files</span><span class="o">.</span><span class="na">asByteSource</span><span class="o">(</span><span class="k">new</span> <span class="nc">File</span><span class="o">(</span><span class="n">blobFullyQualifiedFileName</span><span class="o">));</span> +<span class="nc">Blob</span> <span class="n">blob</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">().</span><span class="na">blobBuilder</span><span class="o">(</span><span class="n">blobName</span><span class="o">)</span> + <span class="o">.</span><span class="na">payload</span><span class="o">(</span><span class="n">payload</span><span class="o">)</span> <span class="c1">// or InputStream</span> + <span class="o">.</span><span class="na">contentLength</span><span class="o">(</span><span class="n">payload</span><span class="o">.</span><span class="na">size</span><span class="o">())</span> + <span class="o">.</span><span class="na">build</span><span class="o">();</span> <span class="c1">// Upload the Blob</span> <span class="n">blobStore</span><span class="o">.</span><span class="na">putBlob</span><span class="o">(</span><span class="n">containerName</span><span class="o">,</span> <span class="n">blob</span><span class="o">);</span> <span class="c1">// When you need access to azureblob-specific features, use the provider-specific context</span> -<span class="n">AzureBlobClient</span> <span class="n">azureBlobClient</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">unwrapApi</span><span class="o">(</span><span class="n">AzureBlobClient</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> -<span class="n">Object</span> <span class="n">object</span> <span class="o">=</span> <span class="n">azureBlobClient</span><span class="o">.</span><span class="na">getBlobProperties</span><span class="o">(</span><span class="n">containerName</span><span class="o">,</span> <span class="n">blobName</span><span class="o">);</span> - -<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Object: "</span> <span class="o">+</span> <span class="n">object</span><span class="o">);</span> -<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span> -</code></pre></div> +<span class="nc">AzureBlobClient</span> <span class="n">azureBlobClient</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">unwrapApi</span><span class="o">(</span><span class="nc">AzureBlobClient</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> +<span class="nc">Object</span> <span class="n">object</span> <span class="o">=</span> <span class="n">azureBlobClient</span><span class="o">.</span><span class="na">getBlobProperties</span><span class="o">(</span><span class="n">containerName</span><span class="o">,</span> <span class="n">blobName</span><span class="o">);</span> +<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Object: "</span> <span class="o">+</span> <span class="n">object</span><span class="o">);</span> +<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span></code></pre></figure> <p>To use Azure Active Directory with Azure Blob storage, follow these steps:</p> <ol> -<li>Setup <a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli">Azure CLI</a></li> -<li>Create a new Azure App: <code>az ad app create --display-name <name> --password <password></code></li> -<li>Create a new service principal: <code>az ad sp create --id <Application-id></code></li> -<li>Assign a Storage Blob Data Contributor role to the app: <code>az role assignment create --role "Storage Blob Data Contributor" --assignee <service principal ID></code></li> -<li>Lookup the tenant ID: <code>az account show</code></li> + <li>Setup <a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli">Azure CLI</a></li> + <li>Create a new Azure App: <code class="language-plaintext highlighter-rouge">az ad app create --display-name <name> --password <password></code></li> + <li>Create a new service principal: <code class="language-plaintext highlighter-rouge">az ad sp create --id <Application-id></code></li> + <li>Assign a Storage Blob Data Contributor role to the app: <code class="language-plaintext highlighter-rouge">az role assignment create --role "Storage Blob Data Contributor" --assignee <service principal ID></code></li> + <li>Lookup the tenant ID: <code class="language-plaintext highlighter-rouge">az account show</code></li> </ol> - <p>In step 2, note the Azure Application ID returned. It will be used to create the service principal. -In step 3, note the service principal ID returned -- it is required in step 4 to assign the role so that the service principal can access the storage account.</p> +In step 3, note the service principal ID returned â it is required in step 4 to assign the role so that the service principal can access the storage account.</p> <p>Now you can use Azure Blob using Azure AD authentication. The required properties are:</p> <ul> -<li><code>jclouds.azureblob.auth=azureAd</code></li> -<li><code>jclouds.identity=<service principal ID></code></li> -<li><code>jclouds.credential=<service principal password></code></li> -<li><code>jclouds.azureblob.tenantId=<tenant ID></code></li> -<li><code>jclouds.azureblob.account=<Azure Blob storage account></code></li> + <li><code class="language-plaintext highlighter-rouge">jclouds.azureblob.auth=azureAd</code></li> + <li><code class="language-plaintext highlighter-rouge">jclouds.identity=<service principal ID></code></li> + <li><code class="language-plaintext highlighter-rouge">jclouds.credential=<service principal password></code></li> + <li><code class="language-plaintext highlighter-rouge">jclouds.azureblob.tenantId=<tenant ID></code></li> + <li><code class="language-plaintext highlighter-rouge">jclouds.azureblob.account=<Azure Blob storage account></code></li> </ul> - <div class="row clearfix"> <div id="footer" class="col-md-12 column"> <div id="footer"> Modified: jclouds/site-content/guides/chef/index.html URL: http://svn.apache.org/viewvc/jclouds/site-content/guides/chef/index.html?rev=1923693&r1=1923692&r2=1923693&view=diff ============================================================================== --- jclouds/site-content/guides/chef/index.html (original) +++ jclouds/site-content/guides/chef/index.html Mon Feb 10 07:25:53 2025 @@ -150,185 +150,177 @@ <h1>Chef: Getting Started Guide</h1> </div> <ol> -<li>Setup a Chef Server or register for <a href="https://getchef.opscode.com/signup">Enterprise Chef</a>.</li> -<li>Ensure you are using a recent JDK 6 version.</li> -<li>Setup your project to include <code>chef</code>, or <code>enterprisechef</code>, depending on the Chef flavor you are going to connect to. - -<ul> -<li>Get the dependencies <code>org.apache.jclouds.api/chef</code> using jclouds <a href="/start/install">Installation</a>.</li> -<li>Get the dependencies <code>org.apache.jclouds.provider/enterprisechef</code> using jclouds <a href="/start/install">Installation</a>.</li> -</ul> -</li> -<li>Start coding</li> + <li>Setup a Chef Server or register for <a href="https://getchef.opscode.com/signup">Enterprise Chef</a>.</li> + <li>Ensure you are using a recent JDK 6 version.</li> + <li>Setup your project to include <code class="language-plaintext highlighter-rouge">chef</code>, or <code class="language-plaintext highlighter-rouge">enterprisechef</code>, depending on the Chef flavor you are going to connect to. + <ul> + <li>Get the dependencies <code class="language-plaintext highlighter-rouge">org.apache.jclouds.api/chef</code> using jclouds <a href="/start/install">Installation</a>.</li> + <li>Get the dependencies <code class="language-plaintext highlighter-rouge">org.apache.jclouds.provider/enterprisechef</code> using jclouds <a href="/start/install">Installation</a>.</li> + </ul> + </li> + <li>Start coding</li> </ol> - -<h2>About Enterprise Chef</h2> +<h2 id="about-enterprise-chef">About Enterprise Chef</h2> <p>The Enterprise Chef API is still not complete. The User and Organization APIs are still a work in progress, so please, be patient. The core Chef API, however, provides access to all Chef features in all Chef flavors, so you can use that API to connect to your favorite endpoint.</p> -<h2>Using the Chef Server API</h2> +<h2 id="using-the-chef-server-api">Using the Chef Server API</h2> <p>You can easily access the Chef Server API to manage the different components of your Chef Server. The following example shows several calls to the API and the creation of the context, so you can get an idea of how jclouds-chef works.</p> -<p>Note that you can use <code>chef</code> or <code>enterprisechef</code> to create the context.</p> +<p>Note that you can use <code class="language-plaintext highlighter-rouge">chef</code> or <code class="language-plaintext highlighter-rouge">enterprisechef</code> to create the context.</p> -<div class="highlight"><pre><code class="java"><span class="n">String</span> <span class="n">client</span> <span class="o">=</span> <span class="s">"clientName"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">organization</span> <span class="o">=</span> <span class="s">"organization"</span> -<span class="n">String</span> <span class="n">pemFile</span> <span class="o">=</span> <span class="n">System</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"user.home"</span><span class="o">)</span> <span class="o">+</span> <span class="s">"/.chef/"</span> <span class="o">+</span> <span class="n">client</span> <span class="o">+</span> <span class="s">".pem"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">credential</span> <span class="o">=</span> <span class="n">Files</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">pemFile</span><span class="o">),</span> <span class="n">Charsets</span><span class="o">.</span><span class="na">UTF_8</span><span class="o">);</span> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="nc">String</span> <span class="n">client</span> <span class="o">=</span> <span class="s">"clientName"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">organization</span> <span class="o">=</span> <span class="s">"organization"</span> +<span class="nc">String</span> <span class="n">pemFile</span> <span class="o">=</span> <span class="nc">System</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"user.home"</span><span class="o">)</span> <span class="o">+</span> <span class="s">"/.chef/"</span> <span class="o">+</span> <span class="n">client</span> <span class="o">+</span> <span class="s">".pem"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">credential</span> <span class="o">=</span> <span class="nc">Files</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="k">new</span> <span class="nc">File</span><span class="o">(</span><span class="n">pemFile</span><span class="o">),</span> <span class="nc">Charsets</span><span class="o">.</span><span class="na">UTF_8</span><span class="o">);</span> -<span class="n">ChefContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"enterprisechef"</span><span class="o">)</span> - <span class="o">.</span><span class="na">endpoint</span><span class="o">(</span><span class="s">"https://api.opscode.com/organizations/"</span> <span class="o">+</span> <span class="n">organization</span><span class="o">)</span> +<span class="nc">ChefContext</span> <span class="n">context</span> <span class="o">=</span> <span class="nc">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"enterprisechef"</span><span class="o">)</span> + <span class="o">.</span><span class="na">endpoint</span><span class="o">(</span><span class="s">"https://api.opscode.com/organizations/"</span> <span class="o">+</span> <span class="n">organization</span><span class="o">)</span> <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">client</span><span class="o">,</span> <span class="n">credential</span><span class="o">)</span> - <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="n">ChefContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> + <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="nc">ChefContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> <span class="c1">// The raw API has access to all chef features, as exposed in the Chef REST API</span> -<span class="n">EnterpriseChefApi</span> <span class="n">api</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">unwrapApi</span><span class="o">(</span><span class="n">EnterpriseChefApi</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> -<span class="n">Set</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">databags</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="na">listDatabags</span><span class="o">();</span> +<span class="nc">EnterpriseChefApi</span> <span class="n">api</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">unwrapApi</span><span class="o">(</span><span class="nc">EnterpriseChefApi</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> +<span class="nc">Set</span><span class="o"><</span><span class="nc">String</span><span class="o">></span> <span class="n">databags</span> <span class="o">=</span> <span class="n">api</span><span class="o">.</span><span class="na">listDatabags</span><span class="o">();</span> <span class="c1">// ChefService has helpers for common commands</span> -<span class="n">String</span> <span class="n">nodeName</span> <span class="o">=</span> <span class="s">"chef-example"</span><span class="o">;</span> -<span class="n">List</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">runlist</span> <span class="o">=</span> <span class="k">new</span> <span class="n">RunListBuilder</span><span class="o">().</span><span class="na">addRecipe</span><span class="o">(</span><span class="s">"apache2"</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> -<span class="n">Node</span> <span class="n">node</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getChefService</span><span class="o">().</span><span class="na">createNodeAndPopulateAutomaticAttributes</span><span class="o">(</span><span class="n">nodeName</span><span class="o">,</span> <span class="n">runlist</span><span class="o">);</span> +<span class="nc">String</span> <span class="n">nodeName</span> <span class="o">=</span> <span class="s">"chef-example"</span><span class="o">;</span> +<span class="nc">List</span><span class="o"><</span><span class="nc">String</span><span class="o">></span> <span class="n">runlist</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">RunListBuilder</span><span class="o">().</span><span class="na">addRecipe</span><span class="o">(</span><span class="s">"apache2"</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> +<span class="nc">Node</span> <span class="n">node</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getChefService</span><span class="o">().</span><span class="na">createNodeAndPopulateAutomaticAttributes</span><span class="o">(</span><span class="n">nodeName</span><span class="o">,</span> <span class="n">runlist</span><span class="o">);</span> <span class="c1">// Release resources</span> -<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span> -</code></pre></div> - +<span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span></code></pre></figure> -<h2>Bootstrap nodes with Chef and the ComputeService</h2> +<h2 id="bootstrap-nodes-with-chef-and-the-computeservice">Bootstrap nodes with Chef and the ComputeService</h2> <p>You can also combine the jclouds compute portable API with the Chef API to bootstrap nodes using Chef. The example below shows how you can combine both APIs to achieve this.</p> -<h3>Relationship between compute groups and run lists</h3> +<h3 id="relationship-between-compute-groups-and-run-lists">Relationship between compute groups and run lists</h3> -<p>Jclouds compute-chef integration is facilitated by the Chef concept of databags. We use a databag to store the relationships between Chef nodes and jclouds compute groups. By default these relationships are stored in a databag named "bootstrap", however, you can change this by adjusting the property <code>chef.bootstrap-databag</code>. -We also provide a couple of utilities to help manage the data in this special bag. The two methods are named <code>updateRunListForGroup</code> and <code>getRunListForGroup</code> in java, and <code>update-run-list</code> and <code>run-list</code> in clojure at the moment.</p> +<p>Jclouds compute-chef integration is facilitated by the Chef concept of databags. We use a databag to store the relationships between Chef nodes and jclouds compute groups. By default these relationships are stored in a databag named âbootstrapâ, however, you can change this by adjusting the property <code class="language-plaintext highlighter-rouge">chef.bootstrap-databag</code>. +We also provide a couple of utilities to help manage the data in this special bag. The two methods are named <code class="language-plaintext highlighter-rouge">updateRunListForGroup</code> and <code class="language-plaintext highlighter-rouge">getRunListForGroup</code> in java, and <code class="language-plaintext highlighter-rouge">update-run-list</code> and <code class="language-plaintext highlighter-rouge">run-list</code> in clojure at the moment.</p> -<div class="highlight"><pre><code class="java"><span class="c1">// Get the credentials that will be used to authenticate to the Chef server</span> -<span class="n">String</span> <span class="n">client</span> <span class="o">=</span> <span class="s">"clientName"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">organization</span> <span class="o">=</span> <span class="s">"organization"</span> -<span class="n">String</span> <span class="n">pemFile</span> <span class="o">=</span> <span class="n">System</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"user.home"</span><span class="o">)</span> <span class="o">+</span> <span class="s">"/.chef/"</span> <span class="o">+</span> <span class="n">client</span> <span class="o">+</span> <span class="s">".pem"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">credential</span> <span class="o">=</span> <span class="n">Files</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">pemFile</span><span class="o">),</span> <span class="n">Charsets</span><span class="o">.</span><span class="na">UTF_8</span><span class="o">);</span> +<figure class="highlight"><pre><code class="language-java" data-lang="java"><span class="c1">// Get the credentials that will be used to authenticate to the Chef server</span> +<span class="nc">String</span> <span class="n">client</span> <span class="o">=</span> <span class="s">"clientName"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">organization</span> <span class="o">=</span> <span class="s">"organization"</span> +<span class="nc">String</span> <span class="n">pemFile</span> <span class="o">=</span> <span class="nc">System</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"user.home"</span><span class="o">)</span> <span class="o">+</span> <span class="s">"/.chef/"</span> <span class="o">+</span> <span class="n">client</span> <span class="o">+</span> <span class="s">".pem"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">credential</span> <span class="o">=</span> <span class="nc">Files</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="k">new</span> <span class="nc">File</span><span class="o">(</span><span class="n">pemFile</span><span class="o">),</span> <span class="nc">Charsets</span><span class="o">.</span><span class="na">UTF_8</span><span class="o">);</span> <span class="c1">// Provide the validator information to let the nodes to auto-register themselves</span> <span class="c1">// in the Chef server during bootstrap</span> -<span class="n">String</span> <span class="n">validator</span> <span class="o">=</span> <span class="n">organization</span> <span class="o">+</span> <span class="s">"-validator"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">validatorPemFile</span> <span class="o">=</span> <span class="n">System</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"user.home"</span><span class="o">)</span> <span class="o">+</span> <span class="s">"/.chef/"</span> <span class="o">+</span> <span class="n">validator</span> <span class="o">+</span> <span class="s">".pem"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">validatorCredential</span> <span class="o">=</span> <span class="n">Files</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">validatorPemFile</span><span class="o">),</span> <span class="n">Charsets</span><span class="o">.</span><span class="na">UTF_8</span><span class="o">);</span> - -<span class="n">Properties</span> <span class="n">chefConfig</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Properties</span><span class="o">();</span> -<span class="n">chefConfig</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">ChefProperties</span><span class="o">.</span><span class="na">CHEF_VALIDATOR_NAME</span><span class="o">,</span> <span class="n">validator</span><span class="o">);</span> -<span class="n">chefConfig</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">ChefProperties</span><span class="o">.</span><span class="na">CHEF_VALIDATOR_CREDENTIAL</span><span class="o">,</span> <span class="n">validatorCredential</span><span class="o">);</span> +<span class="nc">String</span> <span class="n">validator</span> <span class="o">=</span> <span class="n">organization</span> <span class="o">+</span> <span class="s">"-validator"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">validatorPemFile</span> <span class="o">=</span> <span class="nc">System</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"user.home"</span><span class="o">)</span> <span class="o">+</span> <span class="s">"/.chef/"</span> <span class="o">+</span> <span class="n">validator</span> <span class="o">+</span> <span class="s">".pem"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">validatorCredential</span> <span class="o">=</span> <span class="nc">Files</span><span class="o">.</span><span class="na">toString</span><span class="o">(</span><span class="k">new</span> <span class="nc">File</span><span class="o">(</span><span class="n">validatorPemFile</span><span class="o">),</span> <span class="nc">Charsets</span><span class="o">.</span><span class="na">UTF_8</span><span class="o">);</span> + +<span class="nc">Properties</span> <span class="n">chefConfig</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Properties</span><span class="o">();</span> +<span class="n">chefConfig</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="nc">ChefProperties</span><span class="o">.</span><span class="na">CHEF_VALIDATOR_NAME</span><span class="o">,</span> <span class="n">validator</span><span class="o">);</span> +<span class="n">chefConfig</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="nc">ChefProperties</span><span class="o">.</span><span class="na">CHEF_VALIDATOR_CREDENTIAL</span><span class="o">,</span> <span class="n">validatorCredential</span><span class="o">);</span> <span class="c1">// Create the connection to the Chef server</span> -<span class="n">ChefContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"enterprisechef"</span><span class="o">)</span> - <span class="o">.</span><span class="na">endpoint</span><span class="o">(</span><span class="s">"https://api.opscode.com/organizations/"</span> <span class="o">+</span> <span class="n">organization</span><span class="o">)</span> +<span class="nc">ChefContext</span> <span class="n">context</span> <span class="o">=</span> <span class="nc">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"enterprisechef"</span><span class="o">)</span> + <span class="o">.</span><span class="na">endpoint</span><span class="o">(</span><span class="s">"https://api.opscode.com/organizations/"</span> <span class="o">+</span> <span class="n">organization</span><span class="o">)</span> <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">client</span><span class="o">,</span> <span class="n">credential</span><span class="o">)</span> <span class="o">.</span><span class="na">overrides</span><span class="o">(</span><span class="n">chefConfig</span><span class="o">)</span> - <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="n">ChefContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> + <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="nc">ChefContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> <span class="c1">// Create the connection to the compute provider. Note that ssh will be used to bootstrap chef</span> -<span class="n">ComputeServiceContext</span> <span class="n">computeContext</span> <span class="o">=</span> <span class="n">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"<the compute provider name>"</span><span class="o">)</span> - <span class="o">.</span><span class="na">endpoint</span><span class="o">(</span><span class="s">"<the compute endpoint>"</span><span class="o">)</span> - <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="s">"<identity>"</span><span class="o">,</span> <span class="s">"<credential>"</span><span class="o">)</span> - <span class="o">.</span><span class="na">modules</span><span class="o">(</span><span class="n">ImmutableSet</span><span class="o">.<</span><span class="n">Module</span><span class="o">></span> <span class="n">of</span><span class="o">(</span><span class="k">new</span> <span class="n">SshjSshClientModule</span><span class="o">()))</span> - <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="n">ComputeServiceContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> +<span class="nc">ComputeServiceContext</span> <span class="n">computeContext</span> <span class="o">=</span> <span class="nc">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">"<the compute provider name>"</span><span class="o">)</span> + <span class="o">.</span><span class="na">endpoint</span><span class="o">(</span><span class="s">"<the compute endpoint>"</span><span class="o">)</span> + <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="s">"<identity>"</span><span class="o">,</span> <span class="s">"<credential>"</span><span class="o">)</span> + <span class="o">.</span><span class="na">modules</span><span class="o">(</span><span class="nc">ImmutableSet</span><span class="o">.<</span><span class="nc">Module</span><span class="o">></span> <span class="nf">of</span><span class="o">(</span><span class="k">new</span> <span class="nc">SshjSshClientModule</span><span class="o">()))</span> + <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="nc">ComputeServiceContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span> <span class="c1">// Group all nodes in both Chef and the compute provider by this group</span> -<span class="n">String</span> <span class="n">group</span> <span class="o">=</span> <span class="s">"jclouds-chef-example"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">group</span> <span class="o">=</span> <span class="s">"jclouds-chef-example"</span><span class="o">;</span> <span class="c1">// Set the recipe to install and the configuration values to override</span> -<span class="n">String</span> <span class="n">recipe</span> <span class="o">=</span> <span class="s">"apache2"</span><span class="o">;</span> -<span class="n">String</span> <span class="n">attributes</span> <span class="o">=</span> <span class="s">"{\"apache\": {\"listen_ports\": \"8080\"}}"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">recipe</span> <span class="o">=</span> <span class="s">"apache2"</span><span class="o">;</span> +<span class="nc">String</span> <span class="n">attributes</span> <span class="o">=</span> <span class="s">"{\"apache\": {\"listen_ports\": \"8080\"}}"</span><span class="o">;</span> <span class="c1">// Check to see if the recipe you want exists</span> -<span class="n">List</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">runlist</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span> -<span class="n">Iterable</span><span class="o"><</span> <span class="o">?</span> <span class="kd">extends</span> <span class="n">CookbookVersion</span><span class="o">></span> <span class="n">cookbookVersions</span> <span class="o">=</span> +<span class="nc">List</span><span class="o"><</span><span class="nc">String</span><span class="o">></span> <span class="n">runlist</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span> +<span class="nc">Iterable</span><span class="o"><</span> <span class="o">?</span> <span class="kd">extends</span> <span class="nc">CookbookVersion</span><span class="o">></span> <span class="n">cookbookVersions</span> <span class="o">=</span> <span class="n">chefContext</span><span class="o">.</span><span class="na">getChefService</span><span class="o">().</span><span class="na">listCookbookVersions</span><span class="o">();</span> <span class="k">if</span> <span class="o">(</span><span class="n">any</span><span class="o">(</span><span class="n">cookbookVersions</span><span class="o">,</span> <span class="n">containsRecipe</span><span class="o">(</span><span class="n">recipe</span><span class="o">)))</span> <span class="o">{</span> - <span class="n">runlist</span> <span class="o">=</span> <span class="k">new</span> <span class="n">RunListBuilder</span><span class="o">().</span><span class="na">addRecipe</span><span class="o">(</span><span class="n">recipe</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> + <span class="n">runlist</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">RunListBuilder</span><span class="o">().</span><span class="na">addRecipe</span><span class="o">(</span><span class="n">recipe</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> <span class="o">}</span> <span class="c1">// Update the chef service with the run list you wish to apply to all nodes in the group</span> <span class="c1">// and also provide the json configuration used to customize the desired values</span> -<span class="n">BootstrapConfig</span> <span class="n">config</span> <span class="o">=</span> <span class="n">BootstrapConfig</span><span class="o">.</span><span class="na">builder</span><span class="o">().</span><span class="na">runList</span><span class="o">(</span><span class="n">runlist</span><span class="o">).</span><span class="na">attributes</span><span class="o">(</span><span class="n">attributes</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> +<span class="nc">BootstrapConfig</span> <span class="n">config</span> <span class="o">=</span> <span class="nc">BootstrapConfig</span><span class="o">.</span><span class="na">builder</span><span class="o">().</span><span class="na">runList</span><span class="o">(</span><span class="n">runlist</span><span class="o">).</span><span class="na">attributes</span><span class="o">(</span><span class="n">attributes</span><span class="o">).</span><span class="na">build</span><span class="o">();</span> <span class="n">chefContext</span><span class="o">.</span><span class="na">getChefService</span><span class="o">().</span><span class="na">updateBootstrapConfigForGroup</span><span class="o">(</span><span class="n">group</span><span class="o">,</span> <span class="n">config</span><span class="o">);</span> <span class="c1">// Build the script that will bootstrap the node</span> -<span class="n">Statement</span> <span class="n">bootstrap</span> <span class="o">=</span> <span class="n">chefContext</span><span class="o">.</span><span class="na">getChefService</span><span class="o">().</span><span class="na">createBootstrapScriptForGroup</span><span class="o">(</span><span class="n">group</span><span class="o">);</span> +<span class="nc">Statement</span> <span class="n">bootstrap</span> <span class="o">=</span> <span class="n">chefContext</span><span class="o">.</span><span class="na">getChefService</span><span class="o">().</span><span class="na">createBootstrapScriptForGroup</span><span class="o">(</span><span class="n">group</span><span class="o">);</span> <span class="c1">// Run a node on the compute provider that bootstraps chef</span> -<span class="n">Set</span><span class="o"><</span> <span class="o">?</span> <span class="kd">extends</span> <span class="n">NodeMetadata</span><span class="o">></span> <span class="n">nodes</span> <span class="o">=</span> +<span class="nc">Set</span><span class="o"><</span> <span class="o">?</span> <span class="kd">extends</span> <span class="nc">NodeMetadata</span><span class="o">></span> <span class="n">nodes</span> <span class="o">=</span> <span class="n">computeContext</span><span class="o">.</span><span class="na">getComputeService</span><span class="o">().</span><span class="na">createNodesInGroup</span><span class="o">(</span><span class="n">group</span><span class="o">,</span> <span class="mi">1</span><span class="o">,</span> <span class="n">runScript</span><span class="o">(</span><span class="n">bootstrap</span><span class="o">));</span> <span class="c1">// Release resources</span> <span class="n">chefContext</span><span class="o">.</span><span class="na">close</span><span class="o">();</span> -<span class="n">computeContext</span><span class="o">.</span><span class="na">close</span><span class="o">();</span> -</code></pre></div> +<span class="n">computeContext</span><span class="o">.</span><span class="na">close</span><span class="o">();</span></code></pre></figure> +<h3 id="what-does-the-generated-bootstrap-script-do">What does the generated bootstrap script do?</h3> -<h3>What does the generated bootstrap script do?</h3> - -<p>The methods named <code>createBootstrapScriptForGroup</code> in java and <code>create-bootstrap</code> in clojure do all the heavy lifting required to create a valid bootstrap script for chef. +<p>The methods named <code class="language-plaintext highlighter-rouge">createBootstrapScriptForGroup</code> in java and <code class="language-plaintext highlighter-rouge">create-bootstrap</code> in clojure do all the heavy lifting required to create a valid bootstrap script for chef. Here is the overall process:</p> <ol> -<li>Grab the run-list associated with the group from the bootstrap databag.</li> -<li>Write a single shell script that does the following: - -<ol> -<li>Installs Ruby and Chef Gems using the same process as <a href="https://docs.opscode.com/knife_bootstrap.html">Knife Bootstrap</a></li> -<li>mkdir /etc/chef</li> -<li>Write /etc/chef/client.rb, which sets the nodename as group-ip_address Ex. hadoop-175.2.2.3 (note that the ip address comes from ohai).</li> -<li>Write /etc/chef/validation.pem associated with the provided validator.</li> -<li>Write /etc/chef/first-boot.json with the run-list from step 1 above.</li> -<li>Execute chef-client -j /etc/chef/first-boot.json</li> -</ol> -</li> + <li>Grab the run-list associated with the group from the bootstrap databag.</li> + <li>Write a single shell script that does the following: + <ol> + <li>Installs Ruby and Chef Gems using the same process as <a href="https://docs.opscode.com/knife_bootstrap.html">Knife Bootstrap</a></li> + <li>mkdir /etc/chef</li> + <li>Write /etc/chef/client.rb, which sets the nodename as group-ip_address Ex. hadoop-175.2.2.3 (note that the ip address comes from ohai).</li> + <li>Write /etc/chef/validation.pem associated with the provided validator.</li> + <li>Write /etc/chef/first-boot.json with the run-list from step 1 above.</li> + <li>Execute chef-client -j /etc/chef/first-boot.json</li> + </ol> + </li> </ol> +<h2 id="customize-how-chef-is-installed">Customize how Chef is installed</h2> -<h2>Customize how Chef is installed</h2> - -<p>There are two different ways to install Chef: Using the Opscode Omnibus installer (<code>1.7</code> only), or manually installing the Chef gems.</p> +<p>There are two different ways to install Chef: Using the Opscode Omnibus installer (<code class="language-plaintext highlighter-rouge">1.7</code> only), or manually installing the Chef gems.</p> -<p>When using the Omnibus installer (the default option in jclouds <code>1.7</code>), the installer itself will download and install an entire Ruby and RubyGems distribution with the Chef gems preinstalled. All will be installed in an isolated directory so it does not affect any existing Ruby version. This is the preferred way to install Chef.</p> +<p>When using the Omnibus installer (the default option in jclouds <code class="language-plaintext highlighter-rouge">1.7</code>), the installer itself will download and install an entire Ruby and RubyGems distribution with the Chef gems preinstalled. All will be installed in an isolated directory so it does not affect any existing Ruby version. This is the preferred way to install Chef.</p> <p>If you need more control on what versions of Chef are installed, you can make jclouds install the appropriate gems. The following additional properties can be configured when creating the context to customize how Chef is installed:</p> <table> -<thead> -<tr> -<th> <em>Property</em> </th> -<th> <em>Description</em> </th> -</tr> -</thead> -<tbody> -<tr> -<td> ChefProperties.USE_OMNIBUS </td> -<td> Boolean property to enable/disable the Omnibus installer. By default is <code>true</code>.</td> -</tr> -<tr> -<td> ChefProperties.CHEF_VERSION </td> -<td> The version of the Chef gem to install. It accepts concrete versions, and also ranges like '>= 0.10.8', etc. If the property is not set, the latest available version of the gem will be installed.</td> -</tr> -<tr> -<td> ChefProperties.CHEF_GEM_SYSTEM_VERSION </td> -<td> The version of Rubygems to install (if not yet installed). By default will install version <code>1.8.10</code>, to keep compatibility with previous jclouds-chef versions. However, this property can now be used to install the desired version of Rubygems.</td> -</tr> -<tr> -<td> ChefProperties.CHEF_UPDATE_GEM_SYSTEM </td> -<td> Boolean property to force a <code>gem update --system</code> (or a <code>gem update --system <version></code> if the previous property is set. By default is <code>false</code>.</td> -</tr> -<tr> -<td> ChefProperties.CHEF_UPDATE_GEMS </td> -<td> Boolean property to force a general update of the existing gems. By default is <code>false</code>.</td> -</tr> -</tbody> + <thead> + <tr> + <th><em>Property</em></th> + <th><em>Description</em></th> + </tr> + </thead> + <tbody> + <tr> + <td>ChefProperties.USE_OMNIBUS</td> + <td>Boolean property to enable/disable the Omnibus installer. By default is <code class="language-plaintext highlighter-rouge">true</code>.</td> + </tr> + <tr> + <td>ChefProperties.CHEF_VERSION</td> + <td>The version of the Chef gem to install. It accepts concrete versions, and also ranges like â>= 0.10.8â, etc. If the property is not set, the latest available version of the gem will be installed.</td> + </tr> + <tr> + <td>ChefProperties.CHEF_GEM_SYSTEM_VERSION</td> + <td>The version of Rubygems to install (if not yet installed). By default will install version <code class="language-plaintext highlighter-rouge">1.8.10</code>, to keep compatibility with previous jclouds-chef versions. However, this property can now be used to install the desired version of Rubygems.</td> + </tr> + <tr> + <td>ChefProperties.CHEF_UPDATE_GEM_SYSTEM</td> + <td>Boolean property to force a <code class="language-plaintext highlighter-rouge">gem update --system</code> (or a <code class="language-plaintext highlighter-rouge">gem update --system <version></code> if the previous property is set. By default is <code class="language-plaintext highlighter-rouge">false</code>.</td> + </tr> + <tr> + <td>ChefProperties.CHEF_UPDATE_GEMS</td> + <td>Boolean property to force a general update of the existing gems. By default is <code class="language-plaintext highlighter-rouge">false</code>.</td> + </tr> + </tbody> </table>
