{"id":472,"date":"2020-09-12T19:48:35","date_gmt":"2020-09-12T18:48:35","guid":{"rendered":"http:\/\/thomas-kopton.de\/vblog\/?p=472"},"modified":"2020-09-12T19:48:35","modified_gmt":"2020-09-12T18:48:35","slug":"vrealize-operations-content-management-cd-pipeline-part-1","status":"publish","type":"post","link":"https:\/\/thomas-kopton.de\/vblog\/?p=472","title":{"rendered":"vRealize Operations Content Management &#8211; CD Pipeline &#8211; Part 1"},"content":{"rendered":"\n<p><strong><span class=\"has-inline-color has-vivid-cyan-blue-color\">vRealize Operations<\/span><\/strong> provide a wide range of content OOB. It gives the Ops teams a variety of dashboards, view, alerts etc. to run and manage their environments.<\/p>\n\n\n\n<p>Sooner or later, in most cases rather sooner than later, vROps users will create their own content. It might be completely new dashboards or maybe just adjusted alert definitions.<\/p>\n\n\n\n<p>Whatever content you create in vRealize Operations, you should treat it like every other <span class=\"has-inline-color has-vivid-cyan-blue-color\">software development project<\/span>.<\/p>\n\n\n\n<p>Ideally you have a development, test and production vROps instances. If this footprint is just too big for your environment, you should at least have a single node test\/dev for content development and testing before you import that content into your production instance.<\/p>\n\n\n\n<p><span class=\"has-inline-color has-vivid-cyan-blue-color\">Managing content<\/span> in vROps, exporting dashboards, views, alert definitions etc. and importing the corresponding files into another vROps instance may be very cumbersome and error prone. <\/p>\n\n\n\n<p>This is where <strong><span class=\"has-inline-color has-vivid-cyan-blue-color\">vRealize Suite Lifecycle Manager<\/span><\/strong> comes into play.<\/p>\n\n\n\n<p>vRSLCM offers all features to make the management of vRealize Operations (and vRA\/vRO\/vCenter) content an easy task.<\/p>\n\n\n\n<p>In this post I will describe the basics of vROps content management using vRealize Suite Lifecycle Manager and GitLab.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Logical Design<\/h3>\n\n\n\n<p>The procedure described in this post is based on the following logical design of the <span class=\"has-inline-color has-vivid-cyan-blue-color\">vROps<\/span> environment including <span class=\"has-inline-color has-vivid-cyan-blue-color\">vRSLCM<\/span> and <span class=\"has-inline-color has-vivid-cyan-blue-color\">GitLab<\/span>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-1024x995.png\" alt=\"\" class=\"wp-image-479\" width=\"512\" height=\"498\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-1024x995.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-300x291.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-768x746.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design.png 1262w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption>Figure 1: Logical design<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">vRSLCM Configuration Overview<\/h3>\n\n\n\n<p>In this post I am not going to describe how to configure vRealize Suite Lifecycle Manager, how to add content endpoints is described in detail here:<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.vmware.com\/en\/VMware-vRealize-Suite-Lifecycle-Manager\/8.0.1\/com.vmware.vrsuite.lcm.8.0.1.doc\/GUID-44C44ECA-6893-4F0D-BE00-54B0817DF5EE.html\">https:\/\/docs.vmware.com\/en\/VMware-vRealize-Suite-Lifecycle-Manager\/8.0.1\/com.vmware.vrsuite.lcm.8.0.1.doc\/GUID-44C44ECA-6893-4F0D-BE00-54B0817DF5EE.html<\/a><\/p>\n\n\n\n<p>For the walkthrough presented in this post I have configured following content endpoints in my vRSLCM.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/endpoints.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/endpoints-984x1024.png\" alt=\"\" class=\"wp-image-486\" width=\"492\" height=\"512\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/endpoints-984x1024.png 984w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/endpoints-288x300.png 288w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/endpoints-768x799.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/endpoints.png 1146w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/a><figcaption>Figure 2: vRSLCM content endpoints<\/figcaption><\/figure>\n\n\n\n<p>I have a vRSLCM-deployed vROps instance, serving as my Dev\/Test and a vROps-P1 which is the production instance.<\/p>\n\n\n\n<p>Important configuration detail here is, that the production vROps, vROps-P1, is set to accept source controlled content only. If you have only one vROps checking in content into vRSLCM repository you probably won&#8217;t set that option. If you do, you will need a source control endpoint, like GitLab. I have set that option to showcase the usage of GitLab and how changes to the content source in GitLab itself can be handled.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Walkthrough &#8211; Overview<\/h3>\n\n\n\n<p>The steps in my walkthrough are:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Have a content in Dev\/Test vROps you would like to deploy to Prod vROps.<\/li><li>Capture content from Dev\/Test into vRSLCM repo and GitLab (including Git merge).<\/li><li>Try to deploy content to Prod vROps from vRSLCM repo directly.<\/li><li>Capture and deploy content from GitLab to Prod vROps.<\/li><li>Modify content in GitLab.<\/li><li>Re-capture from GitLab and deploy to all vROps endpoints.<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1 &#8211; vROps Content<\/h3>\n\n\n\n<p>For the demo I am using a simple dashboard as shown in the following picture.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-01-1024x540.png\" alt=\"\" class=\"wp-image-493\" width=\"768\" height=\"405\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-01-1024x540.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-01-300x158.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-01-768x405.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-01-1536x811.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-01-2048x1081.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 3: vROps dashboard &#8211; first version<\/figcaption><\/figure>\n\n\n\n<p>The goal is to deploy this dashboard into the production vROps environment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2 &#8211; Capture Content<\/h3>\n\n\n\n<p>We start the capture process using the &#8220;Add Content&#8221; feature.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-01-1024x891.png\" alt=\"\" class=\"wp-image-495\" width=\"512\" height=\"446\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-01-1024x891.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-01-300x261.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-01-768x668.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-01.png 1154w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption>Figure 4: &#8220;Add Content&#8221; vRSLCM feature<\/figcaption><\/figure>\n\n\n\n<p>Obviously we select vRealize Operations as the content endpoint type.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-02-1024x564.png\" alt=\"\" class=\"wp-image-496\" width=\"512\" height=\"282\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-02-1024x564.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-02-300x165.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-02-768x423.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-02.png 1152w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption>Figure 5: Content capture &#8211; endpoint type<\/figcaption><\/figure>\n\n\n\n<p>As we want to capture the content into the internal vRSLCM repository and into the source controlled repo &#8211; GitLab in one step, we are selecting both respective options.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-03-1024x908.png\" alt=\"\" class=\"wp-image-498\" width=\"512\" height=\"454\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-03-1024x908.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-03-300x266.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-03-768x681.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-03.png 1146w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption>Figure 6: Capture and check in<\/figcaption><\/figure>\n\n\n\n<p>We select the source endpoint and the dashboard itself. I have also set the option to import all dependencies. In this case there are no dependencies like for e.g. views used as widgets, in other scenarios, vRSLCM will resolve the dependencies and import all needed content parts. I have also selected the &#8220;mark content as production ready&#8221; option to allow that content to be deployed to my production vROps.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-04-1024x543.png\" alt=\"\" class=\"wp-image-500\" width=\"768\" height=\"407\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-04-1024x543.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-04-300x159.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-04-768x407.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-04-1536x815.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-04-2048x1087.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 7: Content capture settings<\/figcaption><\/figure>\n\n\n\n<p>As we are checking in the content into GitLab, we need to specify the endpoint, repo and branch. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-05-1024x429.png\" alt=\"\" class=\"wp-image-502\" width=\"768\" height=\"322\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-05-1024x429.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-05-300x126.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-05-768x321.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-05-1536x643.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-05-2048x857.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 8: Checking in content into GitLab<\/figcaption><\/figure>\n\n\n\n<p>After few seconds the content pipelines complete.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-06-1024x516.png\" alt=\"\" class=\"wp-image-503\" width=\"768\" height=\"387\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-06-1024x516.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-06-300x151.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-06-768x387.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-06-1536x775.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-06-2048x1033.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 9: Content pipelines<\/figcaption><\/figure>\n\n\n\n<p>Now we see the merge request in GitLab and after merging the request, the dashboard is available in GitLab repo and treated as any other code.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-07-1024x579.png\" alt=\"\" class=\"wp-image-505\" width=\"768\" height=\"434\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-07-1024x579.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-07-300x170.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-07-768x434.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-07-1536x868.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-07-2048x1157.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 10: GitLab merge request<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-09-1024x311.png\" alt=\"\" class=\"wp-image-506\" width=\"768\" height=\"233\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-09-1024x311.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-09-300x91.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-09-768x233.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-09-1536x467.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/add-content-09-2048x622.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 11: Dashboard as code in GitLab<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3 &#8211; Deploy Content &#8211; First Attempt<\/h3>\n\n\n\n<p>At this point we have our dashboard as content in vRSLCM repo and in GitLab.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-01-1024x556.png\" alt=\"\" class=\"wp-image-508\" width=\"768\" height=\"417\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-01-1024x556.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-01-300x163.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-01-768x417.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-01-1536x834.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-01-2048x1113.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 12: Content in vRSLCM repo<\/figcaption><\/figure>\n\n\n\n<p>If we now open the <code>tkopton-Dashjboard-01 <\/code>we will see the details of the first version and the option to deploy the content to another vROps endpoints.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-02-1024x452.png\" alt=\"\" class=\"wp-image-509\" width=\"768\" height=\"339\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-02-1024x452.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-02-300x132.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-02-768x339.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-02-1536x677.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-02-2048x903.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 13: Content details and deployment &#8211; first attempt<\/figcaption><\/figure>\n\n\n\n<p>In the next picture we can see that our vROps-P1 is not listed as an available endpoint. This is because I have configured that endpoint to accept source controlled content only. This version is not source controlled, it has been captured from Dev\/Test vROps into vRSLCM repo, not from the GitLab.<\/p>\n\n\n\n<p>That means, we need to capture the content from GitLab first to be able to deploy it into the production vROps.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4 &#8211; Capture from GitLab and Deploy Content &#8211; Second Attempt<\/h3>\n\n\n\n<p>We start another capture and deploy (in one step) process and this time we select our GitLab as the source.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-04-1024x568.png\" alt=\"\" class=\"wp-image-512\" width=\"512\" height=\"284\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-04-1024x568.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-04-300x166.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-04-768x426.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-04.png 1150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption>Figure 14: Capture and deploy content from GitLab<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-05-1024x910.png\" alt=\"\" class=\"wp-image-513\" width=\"512\" height=\"455\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-05-1024x910.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-05-300x266.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-05-768x682.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-05.png 1146w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption>Figure 15: Capture and deploy in one step<\/figcaption><\/figure>\n\n\n\n<p>We use the same settings as during the first attempt, the capture endpoint is different.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-06-1024x538.png\" alt=\"\" class=\"wp-image-514\" width=\"768\" height=\"404\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-06-1024x538.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-06-300x158.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-06-768x404.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-06-1536x807.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-06-2048x1076.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 16: GitLab as capture endpoint<\/figcaption><\/figure>\n\n\n\n<p>As we are doing capture and deploy in one step, we need to specify the deployment target and options.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-07-1024x557.png\" alt=\"\" class=\"wp-image-515\" width=\"768\" height=\"418\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-07-1024x557.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-07-300x163.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-07-768x417.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-07-1536x835.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-07-2048x1113.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 17: Deployment target settings<\/figcaption><\/figure>\n\n\n\n<p>And now we can see in the Figure 17 that our production vROps-P1 is available in the list of destination endpoints.<\/p>\n\n\n\n<p>Now the same dashboard is available in the production vROps and in vRSLCM repo we see the second version of the dashboard wich is source controlled.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-08.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-08-1024x567.png\" alt=\"\" class=\"wp-image-517\" width=\"768\" height=\"425\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-08-1024x567.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-08-300x166.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-08-768x425.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-08-1536x850.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/deploy-content-08-2048x1133.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 18: Source controlled content<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5 &#8211; Edit Content in GitLab<\/h3>\n\n\n\n<p>Let us change the name of one of our widgets. And let us do it in GitLab instead of editing the dashboard in vROps. The dashboard is just another source code from the content repository perspective.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/edit-file-gitlab-1024x522.png\" alt=\"\" class=\"wp-image-519\" width=\"768\" height=\"392\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/edit-file-gitlab-1024x522.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/edit-file-gitlab-300x153.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/edit-file-gitlab-768x391.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/edit-file-gitlab-1536x783.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/edit-file-gitlab-2048x1044.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><figcaption>Figure 19: Editing the content source in GitLab<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6 &#8211; Re-Capture and Re-Deploy Content<\/h3>\n\n\n\n<p>After re-capturing the content from GitLab following the same procedure as in step 4 but this time without deploying the content, we see another version in the vRSLCM repo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/get-updated-from-gitlab-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/get-updated-from-gitlab-3-1024x643.png\" alt=\"\" class=\"wp-image-521\" width=\"768\" height=\"482\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/get-updated-from-gitlab-3-1024x643.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/get-updated-from-gitlab-3-300x188.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/get-updated-from-gitlab-3-768x483.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/get-updated-from-gitlab-3-1536x965.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/get-updated-from-gitlab-3-2048x1287.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 20: GitLab updated version of the dashboard in vRSLCM<\/figcaption><\/figure>\n\n\n\n<p>After deploying the updated content to our vROps endpoints, we see the dashboard having a new caption for the first widget.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-03-1024x834.png\" alt=\"\" class=\"wp-image-522\" width=\"768\" height=\"626\" srcset=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-03-1024x834.png 1024w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-03-300x244.png 300w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-03-768x625.png 768w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-03-1536x1251.png 1536w, https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/dashboard-03.png 1948w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>Figure 21: Updated dashboard in vROps<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>With vRealize Suite Lifecycle Manager and GitLab you have a perfect foundation to create your own CD pipeline for vRealize Operations content.<\/p>\n\n\n\n<p>In the next part I will describe how to extend the pipelines with custom workflows provided by e.g. vRealize Orchestrator.<\/p>\n\n\n\n<p><strong>Stay safe.<\/strong><\/p>\n\n\n\n<p>Thomas \u2013&nbsp;<a href=\"https:\/\/twitter.com\/ThomasKopton\">https:\/\/twitter.com\/ThomasKopton<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>vRealize Operations provide a wide range of content OOB. It gives the Ops teams a variety of dashboards, view, alerts etc. to run and manage their environments. Sooner or later, in most cases rather sooner than later, vROps users will create their own content. It might be completely new dashboards or maybe just adjusted alert &#8230;<\/p>\n","protected":false},"author":1,"featured_media":482,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39,34,37,2,38],"tags":[41,3,40],"class_list":["post-472","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-content","category-vrealize-operations","category-vrealize-suite-lifecycle-manager","category-vrops","category-vrslcm","tag-content","tag-vrops","tag-vrslcm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>vRealize Operations Content Management - CD Pipeline - Part 1 - TOMsOps<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thomas-kopton.de\/vblog\/?p=472\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"vRealize Operations Content Management - CD Pipeline - Part 1 - TOMsOps\" \/>\n<meta property=\"og:description\" content=\"vRealize Operations provide a wide range of content OOB. It gives the Ops teams a variety of dashboards, view, alerts etc. to run and manage their environments. Sooner or later, in most cases rather sooner than later, vROps users will create their own content. It might be completely new dashboards or maybe just adjusted alert ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thomas-kopton.de\/vblog\/?p=472\" \/>\n<meta property=\"og:site_name\" content=\"TOMsOps\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-12T18:48:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"622\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thomas Kopton\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thomas Kopton\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472#article\",\"isPartOf\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472\"},\"author\":{\"name\":\"Thomas Kopton\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/892d6b96c66b1dd4b75c6e32fdbfea82\"},\"headline\":\"vRealize Operations Content Management &#8211; CD Pipeline &#8211; Part 1\",\"datePublished\":\"2020-09-12T18:48:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472\"},\"wordCount\":1150,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage\"},\"thumbnailUrl\":\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png\",\"keywords\":[\"Content\",\"vROps\",\"vRSLCM\"],\"articleSection\":[\"Content\",\"vRealize Operations\",\"vRealize Suite Lifecycle Manager\",\"vROps\",\"vRSLCM\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/thomas-kopton.de\/vblog\/?p=472#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472\",\"url\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472\",\"name\":\"vRealize Operations Content Management - CD Pipeline - Part 1 - TOMsOps\",\"isPartOf\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage\"},\"image\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage\"},\"thumbnailUrl\":\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png\",\"datePublished\":\"2020-09-12T18:48:35+00:00\",\"author\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/892d6b96c66b1dd4b75c6e32fdbfea82\"},\"breadcrumb\":{\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/thomas-kopton.de\/vblog\/?p=472\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage\",\"url\":\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png\",\"contentUrl\":\"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png\",\"width\":640,\"height\":622},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/?p=472#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/thomas-kopton.de\/vblog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"vRealize Operations Content Management &#8211; CD Pipeline &#8211; Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/#website\",\"url\":\"https:\/\/thomas-kopton.de\/vblog\/\",\"name\":\"TOMsOps\",\"description\":\"Just another VMware Cloud Management Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/thomas-kopton.de\/vblog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/892d6b96c66b1dd4b75c6e32fdbfea82\",\"name\":\"Thomas Kopton\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e746aafbd3733172ceb4d600ba1feda61bc87cd3b70f5a9dfb581907cc7973b1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e746aafbd3733172ceb4d600ba1feda61bc87cd3b70f5a9dfb581907cc7973b1?s=96&d=mm&r=g\",\"caption\":\"Thomas Kopton\"},\"url\":\"https:\/\/thomas-kopton.de\/vblog\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"vRealize Operations Content Management - CD Pipeline - Part 1 - TOMsOps","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thomas-kopton.de\/vblog\/?p=472","og_locale":"en_US","og_type":"article","og_title":"vRealize Operations Content Management - CD Pipeline - Part 1 - TOMsOps","og_description":"vRealize Operations provide a wide range of content OOB. It gives the Ops teams a variety of dashboards, view, alerts etc. to run and manage their environments. Sooner or later, in most cases rather sooner than later, vROps users will create their own content. It might be completely new dashboards or maybe just adjusted alert ...","og_url":"https:\/\/thomas-kopton.de\/vblog\/?p=472","og_site_name":"TOMsOps","article_published_time":"2020-09-12T18:48:35+00:00","og_image":[{"width":640,"height":622,"url":"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png","type":"image\/png"}],"author":"Thomas Kopton","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Thomas Kopton","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472#article","isPartOf":{"@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472"},"author":{"name":"Thomas Kopton","@id":"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/892d6b96c66b1dd4b75c6e32fdbfea82"},"headline":"vRealize Operations Content Management &#8211; CD Pipeline &#8211; Part 1","datePublished":"2020-09-12T18:48:35+00:00","mainEntityOfPage":{"@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472"},"wordCount":1150,"commentCount":0,"image":{"@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage"},"thumbnailUrl":"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png","keywords":["Content","vROps","vRSLCM"],"articleSection":["Content","vRealize Operations","vRealize Suite Lifecycle Manager","vROps","vRSLCM"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thomas-kopton.de\/vblog\/?p=472#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472","url":"https:\/\/thomas-kopton.de\/vblog\/?p=472","name":"vRealize Operations Content Management - CD Pipeline - Part 1 - TOMsOps","isPartOf":{"@id":"https:\/\/thomas-kopton.de\/vblog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage"},"image":{"@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage"},"thumbnailUrl":"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png","datePublished":"2020-09-12T18:48:35+00:00","author":{"@id":"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/892d6b96c66b1dd4b75c6e32fdbfea82"},"breadcrumb":{"@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thomas-kopton.de\/vblog\/?p=472"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472#primaryimage","url":"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png","contentUrl":"https:\/\/thomas-kopton.de\/vblog\/wp-content\/uploads\/2020\/09\/logical-design-small.png","width":640,"height":622},{"@type":"BreadcrumbList","@id":"https:\/\/thomas-kopton.de\/vblog\/?p=472#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thomas-kopton.de\/vblog"},{"@type":"ListItem","position":2,"name":"vRealize Operations Content Management &#8211; CD Pipeline &#8211; Part 1"}]},{"@type":"WebSite","@id":"https:\/\/thomas-kopton.de\/vblog\/#website","url":"https:\/\/thomas-kopton.de\/vblog\/","name":"TOMsOps","description":"Just another VMware Cloud Management Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thomas-kopton.de\/vblog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/892d6b96c66b1dd4b75c6e32fdbfea82","name":"Thomas Kopton","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thomas-kopton.de\/vblog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e746aafbd3733172ceb4d600ba1feda61bc87cd3b70f5a9dfb581907cc7973b1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e746aafbd3733172ceb4d600ba1feda61bc87cd3b70f5a9dfb581907cc7973b1?s=96&d=mm&r=g","caption":"Thomas Kopton"},"url":"https:\/\/thomas-kopton.de\/vblog\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=\/wp\/v2\/posts\/472","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=472"}],"version-history":[{"count":30,"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=\/wp\/v2\/posts\/472\/revisions"}],"predecessor-version":[{"id":525,"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=\/wp\/v2\/posts\/472\/revisions\/525"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=\/wp\/v2\/media\/482"}],"wp:attachment":[{"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thomas-kopton.de\/vblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}