{"id":1646,"date":"2016-10-04T20:38:38","date_gmt":"2016-10-05T00:38:38","guid":{"rendered":"http:\/\/blog.domb.net\/?p=1646"},"modified":"2017-05-18T11:43:48","modified_gmt":"2017-05-18T15:43:48","slug":"deploy-and-build-containers-on-red-hat-openshift-container-platform-3-3-via-cloudforms-self-service","status":"publish","type":"post","link":"https:\/\/blog.domb.net\/?p=1646","title":{"rendered":"Deploy and build  containers on Red Hat OpenShift Container Platform 3.4 via CloudForms 4.2 self service"},"content":{"rendered":"<p>I had multiple requests if CloudForms is able to provision containers via self service to the Red Hat OpenShift container platform. I liked the idea as you can not expect from every developer in your company to know how to create templates or build configs. I will walk you through, step by step how this can be achieved with CloudForms and it&#8217;s native integration into Ansible Tower.<\/p>\n<p><iframe loading=\"lazy\" title=\"Deploy Containers With CloudForms On OpenShift Container Platform\" width=\"640\" height=\"480\" src=\"https:\/\/www.youtube.com\/embed\/BlwfCQwxJgw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p><strong>Step 1<\/strong> Create a new project in Ansible Tower and add https:\/\/github.com\/ldomb\/ansible_tower_roles as the giturl this will download the role \/ playbook which I wrote to prove the above case.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1574\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/newproject.png\" alt=\"newproject\" width=\"1857\" height=\"622\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/newproject.png 1857w, https:\/\/blog.domb.net\/wp-content\/uploads\/newproject-300x100.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/newproject-768x257.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/newproject-1024x343.png 1024w\" sizes=\"auto, (max-width: 1857px) 100vw, 1857px\" \/><\/p>\n<p><strong>Step 2<\/strong> I assume that you already have an inventory added to your tower instance. Let&#8217;s create the Job Template so we can launch containers \/ pod in OpenShift. Add the following values to the job template<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1798\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_071.png\" alt=\"selection_071\" width=\"1832\" height=\"853\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_071.png 1832w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_071-300x140.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_071-768x358.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_071-1024x477.png 1024w\" sizes=\"auto, (max-width: 1832px) 100vw, 1832px\" \/><\/p>\n<p><strong>Step 3 <\/strong> For extra_vars add the following<br \/>\n<em>projectname:<\/em> test<br \/>\n<em>template: <\/em>nodejs-example<br \/>\n<em>apphostname: <\/em>mynodejsapp<br \/>\n<em>templatename:<\/em> phptemplate<br \/>\n<em>createtemplate:<\/em> false<br \/>\n<em>quickapp:<\/em> false<br \/>\n<em>sti:<\/em> false<br \/>\n<em>git_url:<\/em> https:\/\/github.com\/dudash\/openshift-workshops.git<br \/>\n<em>url_to_template:<\/em> https:\/\/github.com\/dudash\/openshift-workshops.git<br \/>\n<em>scaleme:<\/em> false<br \/>\n<em>autoscale:<\/em> false<br \/>\n<em>username:<\/em> laurent<br \/>\n<em>pass: <\/em>redhat<br \/>\n<em>contextdir:<\/em> .<br \/>\n<em>number_of_instances:<\/em> 1<br \/>\n<em>ochost:<\/em> https:\/\/osemaster.rdu.salab.redhat.com<br \/>\n<em>ocport: <\/em>8443<br \/>\n<em>appdomain:<\/em> apps.rdu.salab.redhat.com<\/p>\n<p>Do not forget to check to box <strong>Prompt on launch <\/strong> and save tho job template<\/p>\n<p><strong>Step 4<\/strong> Login to CloudForms and go to the tab configuration management -&gt; Ansible Job Templates. You should see the following. Generate a catalog item from the octools template and name it ose_sti.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1801\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_072.png\" alt=\"selection_072\" width=\"1474\" height=\"750\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_072.png 1474w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_072-300x153.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_072-768x391.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_072-1024x521.png 1024w\" sizes=\"auto, (max-width: 1474px) 100vw, 1474px\" \/><\/p>\n<p><strong>Step 5 <\/strong> Then go to Automate -&gt; Customization -&gt; Service Dialogs and click on the ose_sti catalog item. For this example we can delete some of the fields as they are not needed for source to image. Make sure your catalog item has the same fields as I am showing in the picture below.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1804\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_073.png\" alt=\"selection_073\" width=\"1748\" height=\"445\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_073.png 1748w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_073-300x76.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_073-768x196.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_073-1024x261.png 1024w\" sizes=\"auto, (max-width: 1748px) 100vw, 1748px\" \/><\/p>\n<p><strong>Step 6<\/strong> Set the STI value to true as I am filtering for it in the ansible playbook. This field is read only.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1803\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_074.png\" alt=\"selection_074\" width=\"1081\" height=\"388\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_074.png 1081w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_074-300x108.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_074-768x276.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_074-1024x368.png 1024w\" sizes=\"auto, (max-width: 1081px) 100vw, 1081px\" \/><\/p>\n<p><strong>Step 7<\/strong> For autoscale create a radio button with the values true or false. If you set it to true it will automatically create a horizontal pod autoscaler based on cpu load.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1806\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_076.png\" alt=\"selection_076\" width=\"1066\" height=\"802\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_076.png 1066w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_076-300x226.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_076-768x578.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_076-1024x770.png 1024w\" sizes=\"auto, (max-width: 1066px) 100vw, 1066px\" \/><\/p>\n<p><strong>Step 8 <\/strong> The Limit for the job needs to be read only as well. I choose it to be the master as the master has the oc tools installed.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1807\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_077.png\" alt=\"selection_077\" width=\"1509\" height=\"543\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_077.png 1509w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_077-300x108.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_077-768x276.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_077-1024x368.png 1024w\" sizes=\"auto, (max-width: 1509px) 100vw, 1509px\" \/><\/p>\n<p><strong>Step 9 <\/strong> For my OpenShift installation I am using basic auth. For this demo to work you need create a user in OpenShift matching the user loggedin in CloudForms.<\/p>\n<p>Login to your openshift master and add a user to the htpasswd file<\/p>\n<p><code>$ sudo htpasswd \/etc\/origin\/htpasswd username <\/code><br \/>\nRemember the password.<\/p>\n<p><strong>Step 10<\/strong> Go back to CloudForms. For the username field I&#8217;ve created a new method based on Kevin Moreys CloudForms Dropdown list https:\/\/github.com\/ramrexx\/CloudForms_Essentials in CloudForms_Essentials -&gt; Integration -&gt; RedHat -&gt; CloudForms -&gt; Dynamic dialog -&gt; get_loggedin_user<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1809\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_078.png\" alt=\"selection_078\" width=\"1034\" height=\"513\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_078.png 1034w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_078-300x149.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_078-768x381.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_078-1024x508.png 1024w\" sizes=\"auto, (max-width: 1034px) 100vw, 1034px\" \/><\/p>\n<p><code><br \/>\ndialog_hash = {}<\/code><\/p>\n<p>users = $evm.vmdb(:user).all<\/p>\n<p>users.each do |u|<br \/>\nif u.id == $evm.root[&#8216;user&#8217;].id<br \/>\ndialog_hash[u.userid] = &#8220;#{u.userid}&#8221;<br \/>\nend<br \/>\nend<\/p>\n<p>$evm.object[&#8220;values&#8221;] = dialog_hash<br \/>\n$evm.log(:info, &#8220;$evm.object[&#8216;values&#8217;]: #{$evm.object[&#8216;values&#8217;].inspect}&#8221;)<\/p>\n<p><strong>Step 11<\/strong> Wire the field to be a dynamic dropdown and add the following values.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1810\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_079.png\" alt=\"selection_079\" width=\"1063\" height=\"586\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_079.png 1063w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_079-300x165.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_079-768x423.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_079-1024x565.png 1024w\" sizes=\"auto, (max-width: 1063px) 100vw, 1063px\" \/><\/p>\n<p><strong>Step 12<\/strong> The password field needs to be protected and match the one you&#8217;ve create with htpasswd on OpenShift. In reality you would have connected your CloudForms appliance and OpenShift to LDAP and grabbed the encrypted password from CloudForms instead of entering it.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1826\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_089.png\" alt=\"selection_089\" width=\"897\" height=\"745\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_089.png 897w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_089-300x249.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_089-768x638.png 768w\" sizes=\"auto, (max-width: 897px) 100vw, 897px\" \/><\/p>\n<p><strong>Step 13<\/strong> For the email address I used another method in the CloudForms essentials domain as I want to send an email to the developer once his application is deployed. Create new method called get_loggedin_user_email<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1813\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_082.png\" alt=\"selection_082\" width=\"999\" height=\"316\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_082.png 999w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_082-300x95.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_082-768x243.png 768w\" sizes=\"auto, (max-width: 999px) 100vw, 999px\" \/><\/p>\n<p><code><br \/>\ndialog_hash = {}<\/code><\/p>\n<p>users = $evm.vmdb(:user).all<\/p>\n<p>users.each do |u|<br \/>\nif u.id == $evm.root[&#8216;user&#8217;].id<br \/>\ndialog_hash[u.email] = &#8220;#{u.email}&#8221; if u.email<br \/>\nend<br \/>\nend<\/p>\n<p>$evm.object[&#8220;values&#8221;] = dialog_hash<br \/>\n$evm.log(:info, &#8220;$evm.object[&#8216;values&#8217;]: #{$evm.object[&#8216;values&#8217;].inspect}&#8221;)<\/p>\n<p>&nbsp;<\/p>\n<p>The field email address should look like this<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1814\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_081.png\" alt=\"selection_081\" width=\"1521\" height=\"589\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_081.png 1521w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_081-300x116.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_081-768x297.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_081-1024x397.png 1024w\" sizes=\"auto, (max-width: 1521px) 100vw, 1521px\" \/><\/p>\n<p><strong>Step 14<\/strong> To be able to send a user a customized email message I copied the ConfigurationManagement-&gt;AnsibleTower-&gt;Service-&gt;Provisioning-&gt;Email-&gt;ServiceProvision_Complete instance and its method ServiceProvision_Complete and renamed the method to ServiceProvision_Complete_OSE. Your instance should look like this.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1816\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_083.png\" alt=\"selection_083\" width=\"1683\" height=\"283\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_083.png 1683w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_083-300x50.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_083-768x129.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_083-1024x172.png 1024w\" sizes=\"auto, (max-width: 1683px) 100vw, 1683px\" \/><\/p>\n<p><strong>Step 15<\/strong> Create the email method ServiceProvision_Complete_OSE and add the following content<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1818\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_085.png\" alt=\"selection_085\" width=\"1261\" height=\"664\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_085.png 1261w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_085-300x158.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_085-768x404.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_085-1024x539.png 1024w\" sizes=\"auto, (max-width: 1261px) 100vw, 1261px\" \/><\/p>\n<p><code><br \/>\n#<br \/>\n# Description: Email the user once provisioning is done.<br \/>\n#<\/code><\/p>\n<p># Setup variables from dialog<br \/>\nuser_name = $evm.root[&#8216;dialog_param_username&#8217;]<br \/>\nuser_mail = $evm.root[&#8216;dialog_user_mail&#8217;]<br \/>\napphostname = $evm.root[&#8216;dialog_param_apphostname&#8217;]<br \/>\ngiturl = $evm.root[&#8216;dialog_param_git_url&#8217;]<br \/>\nprojectname = $evm.root[&#8216;dialog_param_projectname&#8217;]<\/p>\n<p># Set up Static variables<br \/>\nfrom = $evm.object[&#8216;from_email_address&#8217;]<\/p>\n<p>#form the messsage<br \/>\nsubject = &#8220;Container Provisioning Request Complete&#8221;<\/p>\n<p>body = &#8220;Hello #{user_name}&#8221;<br \/>\nbody += &#8221;<\/p>\n<p>Your Application #{apphostname} is up and running.&#8221;<br \/>\nbody += &#8221;<\/p>\n<p>We used the following git_url to build the app #{giturl}&#8221;<br \/>\nbody += &#8221;<\/p>\n<p>You can reach your app at http:\/\/#{apphostname}-#{projectname}.apps.yourdomain.com<br \/>\nbody += &#8221;<\/p>\n<p>Go back to work!<br \/>\nbody += &#8221;<\/p>\n<p>Please be aware that you get billed for this application&#8221;<br \/>\nbody += &#8221;<\/p>\n<p>Thank you,&#8221;<br \/>\nbody += &#8221;<\/p>\n<p>The Cloud Team&#8221;<\/p>\n<p># Send email<br \/>\n$evm.log(&#8220;info&#8221;, &#8220;Sending email to from subject: &#8220;)<br \/>\n$evm.execute(:send_email, user_mail, from, subject, body)<\/p>\n<p><strong>Step 16 <\/strong>Wire up your email field and we are done with configuring the catalog item<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1819\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_086.png\" alt=\"selection_086\" width=\"1153\" height=\"561\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_086.png 1153w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_086-300x146.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_086-768x374.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_086-1024x498.png 1024w\" sizes=\"auto, (max-width: 1153px) 100vw, 1153px\" \/><\/p>\n<p><strong>Step 17\u00a0<\/strong>Create a new StateMachine named default_ose for Email Owner add<\/p>\n<p>\/ConfigurationManagement\/AnsibleTower\/Service\/Provisioning\/Email\/ServiceProvision_complete_Ose?event=service_provisioned<\/p>\n<p>This will send off the email once you deployed the container<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1877\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Screenshot-from-2017-02-07-15-03-05.png\" alt=\"\" width=\"1484\" height=\"682\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Screenshot-from-2017-02-07-15-03-05.png 1484w, https:\/\/blog.domb.net\/wp-content\/uploads\/Screenshot-from-2017-02-07-15-03-05-300x138.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Screenshot-from-2017-02-07-15-03-05-768x353.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Screenshot-from-2017-02-07-15-03-05-1024x471.png 1024w\" sizes=\"auto, (max-width: 1484px) 100vw, 1484px\" \/><\/p>\n<p><strong>Step 18<\/strong>\u00a0Login to your cloudforms self service portal https:\/\/\/self_service and click on the ose_sti tile which will lead you to the catalog item.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1821\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_087.png\" alt=\"selection_087\" width=\"291\" height=\"320\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_087.png 291w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_087-273x300.png 273w\" sizes=\"auto, (max-width: 291px) 100vw, 291px\" \/><\/p>\n<p>Fill out the fields in the catalog item, add it to the shopping cart and order it.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1822\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_088.png\" alt=\"selection_088\" width=\"1666\" height=\"831\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_088.png 1666w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_088-300x150.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_088-768x383.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_088-1024x511.png 1024w\" sizes=\"auto, (max-width: 1666px) 100vw, 1666px\" \/><\/p>\n<p>You can know check the Ansible Tower and see that your job got kicked off<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1836\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_091.png\" alt=\"selection_091\" width=\"1597\" height=\"69\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_091.png 1597w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_091-300x13.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_091-768x33.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_091-1024x44.png 1024w\" sizes=\"auto, (max-width: 1597px) 100vw, 1597px\" \/><\/p>\n<p><strong>Step 19\u00a0<\/strong>After a few seconds you will see that OpenShift starts up the pods with your container in it.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1837\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_092.png\" alt=\"selection_092\" width=\"899\" height=\"205\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_092.png 899w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_092-300x68.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_092-768x175.png 768w\" sizes=\"auto, (max-width: 899px) 100vw, 899px\" \/><\/p>\n<p><strong>Step 20<\/strong>\u00a0If your pod started successfully you should see this<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1838\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_093.png\" alt=\"selection_093\" width=\"866\" height=\"427\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_093.png 866w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_093-300x148.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_093-768x379.png 768w\" sizes=\"auto, (max-width: 866px) 100vw, 866px\" \/><\/p>\n<p><strong>Step 21<\/strong>\u00a0Go back to CloudForms and verify that you also see the newly created pod.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1839\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_094.png\" alt=\"selection_094\" width=\"1405\" height=\"127\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_094.png 1405w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_094-300x27.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_094-768x69.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_094-1024x93.png 1024w\" sizes=\"auto, (max-width: 1405px) 100vw, 1405px\" \/><\/p>\n<p>and its services<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1840\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_095.png\" alt=\"selection_095\" width=\"1193\" height=\"466\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_095.png 1193w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_095-300x117.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_095-768x300.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_095-1024x400.png 1024w\" sizes=\"auto, (max-width: 1193px) 100vw, 1193px\" \/><\/p>\n<p><strong>Step 22<\/strong>\u00a0In the meantime you also should have received an email saying that the container provisioning was complete.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1842\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Selection_096.png\" alt=\"selection_096\" width=\"1287\" height=\"316\" srcset=\"https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_096.png 1287w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_096-300x74.png 300w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_096-768x189.png 768w, https:\/\/blog.domb.net\/wp-content\/uploads\/Selection_096-1024x251.png 1024w\" sizes=\"auto, (max-width: 1287px) 100vw, 1287px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I had multiple requests if CloudForms is able to provision containers via self service to the Red Hat OpenShift container platform. I liked the idea as you can not expect from every developer in your company to know how to create templates or build configs. I will walk you through, step by step how this&#8230;<\/p>\n","protected":false},"author":2,"featured_media":2048,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[64,37,76],"tags":[71,29,55],"class_list":["post-1646","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ansible","category-cloudforms","category-openshift","tag-ansible-tower","tag-cloudforms","tag-openshift"],"_links":{"self":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts\/1646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1646"}],"version-history":[{"count":32,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts\/1646\/revisions"}],"predecessor-version":[{"id":1878,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts\/1646\/revisions\/1878"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/media\/2048"}],"wp:attachment":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}