<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CormacHogan.com</title>
	<atom:link href="https://cormachogan.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://cormachogan.com/</link>
	<description>Storage, Data, Virtualization, Container Orchestration</description>
	<lastBuildDate>Wed, 25 Feb 2026 09:13:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/cormachogan.com/wp-content/uploads/2013/01/CH-Logo-tiny.jpg?fit=32%2C30&#038;ssl=1</url>
	<title>CormacHogan.com</title>
	<link>https://cormachogan.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">39287099</site>	<item>
		<title>VMware TAM Services &#8211; Data Services Manager 9.0.2 Update (Video)</title>
		<link>https://cormachogan.com/2026/02/25/vmware-tam-service-data-services-manager-9-0-2-update-video/</link>
					<comments>https://cormachogan.com/2026/02/25/vmware-tam-service-data-services-manager-9-0-2-update-video/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Wed, 25 Feb 2026 09:30:22 +0000</pubDate>
				<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[VCF Automation]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[DSM]]></category>
		<category><![CDATA[DSM 9.0.2]]></category>
		<category><![CDATA[TAM]]></category>
		<category><![CDATA[VCFA]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32808</guid>

					<description><![CDATA[<p>A very quick message to let you know that I was recently invited to present on VMware Data Services Manager (DSM) by our VMware TAM (Technical Account Manager) Services team. In the video, I provide an update to our TAM customers on our current DSM version 9.0.2, and give some insight into our latest tech preview of the Microsoft SQL Server DBaaS service as well as a demonstration on how our full integration of DSM into VMware Cloud Foundation 9.x and VCF Automation is progressing. Hope you find it useful and informative. Feel free to reach out to me via&#8230;</p>
<p>The post <a href="https://cormachogan.com/2026/02/25/vmware-tam-service-data-services-manager-9-0-2-update-video/">VMware TAM Services &#8211; Data Services Manager 9.0.2 Update (Video)</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-vintage.jpg?ssl=1"><img data-recalc-dims="1" decoding="async" class="wp-image-30393 alignleft" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-vintage.jpg?resize=150%2C151&#038;ssl=1" alt="" width="150" height="151" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-vintage.jpg?w=787&amp;ssl=1 787w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-vintage.jpg?resize=298%2C300&amp;ssl=1 298w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-vintage.jpg?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-vintage.jpg?resize=768%2C773&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-vintage.jpg?resize=769%2C774&amp;ssl=1 769w" sizes="(max-width: 150px) 100vw, 150px" /></a>A very quick message to let you know that I was recently invited to present on VMware Data Services Manager (DSM) by our VMware TAM (Technical Account Manager) Services team. In the video, I provide an update to our TAM customers on our current DSM version 9.0.2, and give some insight into our latest tech preview of the Microsoft SQL Server DBaaS service as well as a demonstration on how our full integration of DSM into VMware Cloud Foundation 9.x and VCF Automation is progressing. Hope you find it useful and informative. Feel free to reach out to me via the blog comments if you have any questions.</p>
<p style="text-align: center;"><iframe title="YouTube video player" src="https://www.youtube.com/embed/ak9zDAZUiBo?si=RsYzdv3H93dtfc4A" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>The post <a href="https://cormachogan.com/2026/02/25/vmware-tam-service-data-services-manager-9-0-2-update-video/">VMware TAM Services &#8211; Data Services Manager 9.0.2 Update (Video)</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cormachogan.com/2026/02/25/vmware-tam-service-data-services-manager-9-0-2-update-video/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32808</post-id>	</item>
		<item>
		<title>DSM 9.0.2 &#8211; Aria Automation plugin changes to support new RBAC features</title>
		<link>https://cormachogan.com/2026/01/23/dsm-9-0-2-aria-automation-plugin-changes-to-support-new-rbac-features/</link>
					<comments>https://cormachogan.com/2026/01/23/dsm-9-0-2-aria-automation-plugin-changes-to-support-new-rbac-features/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 14:00:40 +0000</pubDate>
				<category><![CDATA[Aria Automation]]></category>
		<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[Data Services Manager. DSM]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32685</guid>

					<description><![CDATA[<p>VMware Data Service Manager 9.0.2.0 has achieved General Availability (GA) status, and is now readily accessible from the Broadcom Download Portal. You can see the full DSM 9.0.2 release notes here. In this post, I want to revisit our efforts to integrate DSM with Aria Automation. It is true to say that most of our efforts are going into integrating VMware Data Services Manager 9.x with VMware Cloud Foundation Automation 9.x. However, many customer are still on their journey to VCF 9.x, and continue to use earlier versions of our products.  One such product that our customers are still using&#8230;</p>
<p>The post <a href="https://cormachogan.com/2026/01/23/dsm-9-0-2-aria-automation-plugin-changes-to-support-new-rbac-features/">DSM 9.0.2 &#8211; Aria Automation plugin changes to support new RBAC features</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" fetchpriority="high" decoding="async" class="wp-image-30383 alignleft" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=250%2C203&#038;ssl=1" alt="" width="250" height="203" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=1024%2C831&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=300%2C244&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=768%2C623&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=769%2C624&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?w=1386&amp;ssl=1 1386w" sizes="(max-width: 250px) 100vw, 250px" /></a><b>VMware Data Service Manager 9.0.2.0 </b>has achieved General Availability (GA) status, and is now readily accessible from the Broadcom Download Portal. You can see the <a href="https://techdocs.broadcom.com/us/en/vmware-cis/dsm/data-services-manager/9-0/release-notes/vmware-data-services-manager-902-release-notes.html" target="_blank" rel="noopener">full DSM 9.0.2 release notes here</a>. In this post, I want to revisit our efforts to integrate DSM with Aria Automation. It is true to say that most of our efforts are going into integrating VMware Data Services Manager 9.x with VMware Cloud Foundation Automation 9.x. However, many customer are still on their journey to VCF 9.x, and continue to use earlier versions of our products.  One such product that our customers are still using Aria Automation. To accommodate these customers, the DSM team has developed a plugin for Aria Automation. This enables our customers and their users to provision databases, on demand, from the Aria Automation Service Broker catalog, giving all of the added benefits associated with DSM provisioned databases (automated backups, lifecycle management, certificate management, etc). I have blogged about earlier versions of this integration with Aria Automation in the past, <a href="https://cormachogan.com/2025/03/14/vmware-data-services-manager-2-2-1-and-aria-automation-enhancements/" target="_blank" rel="noopener">as you can see here</a>, but there have been some important <a href="https://cormachogan.com/2025/10/02/dsm-9-0-1-new-rbac-features/" target="_blank" rel="noopener">changes to the DSM RBAC</a> (Role Based Access Control) in recent releases which required an update to the DSM plugin for Aria Automation. In a nutshell, the new RBAC  feature introduces the concepts of namespaces and Data Service Policies into native DSM. In the past, databases were provisioned to a &#8216;default&#8217; namespace. Now they are provisioned to the namespace with which the user/database owner is associated. The namespace &amp; Data Service Policy control which users are allowed to access which data services and versions, and which vSphere resources to consume when they provision the data services. Essentially we are aligning the standalone DSM with the RBAC found in VCF Automation. Let&#8217;s see what those changes are next, and how they affect the integration of the DSM plugin in Aria Automation.</p>
<h2>Prepping DSM for Aria Automation integration</h2>
<p style="text-align: justify;">Let&#8217;s say, for example, I want my user <em>dragomir</em> to deploy certain versions of Postgres databases to the <em>engineering-ns</em> namespace, my user <em>christos</em> deploy certain versions of Postgres databases in the <em>sales-ns</em> namespace and my user <em>paudie</em> to deploy certain versions of Postgres databases to the <em>marketing-ns</em>. I want to achieve this via requests to provision a DBaaS catalog item in my Aria Automation Service Broker. The steps to implement this in DSM by a DSM administrator would be:</p>
<ol>
<li style="text-align: justify;">Assuming that these are Active Directory users, enable Directory Services in DSM &amp; import the different AD groups (engineering, marketing, sales) containing the users into DSM as Directory Service Groups under Permissions. Alternatively, you could use local users in DSM if you wish.</li>
<li style="text-align: justify;">Create different namespaces for the different groups of users (engineering, marketing, sales) and, if using Active Directory, add the appropriate Directory Service Group to the namespace.</li>
<li style="text-align: justify;">Create Data Service Policies which associates the different namespaces with the permissions to provision data services. Choose the data service, which versions of service the users/groups are allowed to provision, select the appropriate infrastructure policies, select appropriate backup locations, etc.</li>
</ol>
<p style="text-align: justify;">For the purposes of this post, I have the following AD users configured in DSM:</p>
<table style="border-collapse: collapse; width: 100%; height: 100px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 19.3405%; height: 25px;"><strong>Username</strong></td>
<td style="width: 17.9936%; height: 25px;"><strong>DSM Namespace</strong></td>
<td style="width: 29.3325%;"><strong>Directory Service / AD Group</strong></td>
</tr>
<tr style="height: 25px;">
<td style="width: 19.3405%; height: 25px;">dragomir</td>
<td style="width: 17.9936%; height: 25px;">engineering-ns</td>
<td style="width: 29.3325%;">DSMUsers-Engineering</td>
</tr>
<tr style="height: 25px;">
<td style="width: 19.3405%; height: 25px;">paudie</td>
<td style="width: 17.9936%; height: 25px;">marketing-ns</td>
<td style="width: 29.3325%;">DSMUsers-Marketing</td>
</tr>
<tr style="height: 25px;">
<td style="width: 19.3405%; height: 25px;">christos</td>
<td style="width: 17.9936%; height: 25px;">sales-ns</td>
<td style="width: 29.3325%;">DSMUsers-Sales</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Checking Active Directory &#8211; Users and Computers for <em>dragomir</em>, I can see here is in the correct AD group, <strong>DSMUsers-Engineering</strong>:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-eng.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32745 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-eng.png?resize=412%2C233&#038;ssl=1" alt="" width="412" height="233" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-eng.png?w=412&amp;ssl=1 412w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-eng.png?resize=300%2C170&amp;ssl=1 300w" sizes="auto, (max-width: 412px) 100vw, 412px" /></a></p>
<p style="text-align: justify;">By checking the DSM Portal as a DSM Admin, I can also verify that the DSMUsers-Engineering AD Group has been added to the <em>engineering-ns</em> namespace in DSM:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/engineering-ns-ad-group.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32746 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/engineering-ns-ad-group.png?resize=769%2C212&#038;ssl=1" alt="" width="769" height="212" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/engineering-ns-ad-group.png?resize=1024%2C282&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/engineering-ns-ad-group.png?resize=300%2C83&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/engineering-ns-ad-group.png?resize=768%2C211&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/engineering-ns-ad-group.png?resize=769%2C212&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/engineering-ns-ad-group.png?w=1402&amp;ssl=1 1402w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Lastly, we can check the Data Service Policy that <em>engineering-ns</em> has been added to. This makes the relationship between the users/namespace and the data services and versions that they are allowed to provision. Here is a snippet of the DSP, showing that we are granting the members of the <em>engineering-ns</em> the ability to provision versions 16 &amp; 17 of Postgres.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsp.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32754" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsp.png?resize=769%2C386&#038;ssl=1" alt="" width="769" height="386" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsp.png?resize=1024%2C514&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsp.png?resize=300%2C151&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsp.png?resize=768%2C386&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsp.png?resize=769%2C386&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsp.png?w=1402&amp;ssl=1 1402w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p>The relationship between Data Service Policy and Namespace can be shown as the following:</p>
<table style="border-collapse: collapse; width: 100%; height: 100px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 7.11701%; height: 25px;"><strong>Username</strong></td>
<td style="width: 15.1085%; height: 25px;"><strong>DSM Namespace</strong></td>
<td style="width: 15.1085%;"><strong>Data Service Policy</strong></td>
</tr>
<tr style="height: 25px;">
<td style="width: 7.11701%; height: 25px;">dragomir</td>
<td style="width: 15.1085%; height: 25px;">engineering-ns</td>
<td style="width: 15.1085%;">pg-on-engineering-ns</td>
</tr>
<tr style="height: 25px;">
<td style="width: 7.11701%; height: 25px;">paudie</td>
<td style="width: 15.1085%; height: 25px;">marketing-ns</td>
<td style="width: 15.1085%;">pg-on-marketing-ns</td>
</tr>
<tr style="height: 25px;">
<td style="width: 7.11701%; height: 25px;">christos</td>
<td style="width: 15.1085%; height: 25px;">sales-ns</td>
<td style="width: 15.1085%;">pg-on-sales-ns</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">At this point the DSM side of things has been setup. Later on, we will see how to add these users to Aria Automation,  give them Service Broker user roles, and assign them as members of a Projects. These steps will allow them to provision databases to their own DSM namespaces through Aria Automation.</p>
<h2>Aria Automation config.yaml changes</h2>
<p style="text-align: justify;">The <em>config.yaml</em>, which contains the configuration setting to integrate DSM with Aria Automation, now contains additional fields to map DSM Namespaces to Aria Automation Projects in version 9.0.2. For my particular setup, I have 3 users in different DSM namespaces that I want to be able to provision databases from Aria Automation. So I will have to create 3 different Projects in Aria Automation to achieve this:</p>
<table style="border-collapse: collapse; width: 100%; height: 100px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px;"><strong>Username</strong></td>
<td style="width: 33.3333%; height: 25px;"><strong>DSM Namespace</strong></td>
<td style="width: 33.3333%; height: 25px;"><strong>Aria Automation Project</strong></td>
</tr>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px;">dragomir</td>
<td style="width: 33.3333%; height: 25px;">engineering-ns</td>
<td style="width: 33.3333%; height: 25px;">ENG_DSM_PROJECT</td>
</tr>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px;">paudie</td>
<td style="width: 33.3333%; height: 25px;">marketing-ns</td>
<td style="width: 33.3333%; height: 25px;">MK_DSM_PROJECT</td>
</tr>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px;">christos</td>
<td style="width: 33.3333%; height: 25px;">sales-ns</td>
<td style="width: 33.3333%; height: 25px;">SALES_DSM_PROJECT</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Here is an example of the config.yaml which has the new <strong>project_to_namespace</strong> entries defined. Note that the DSM plugin for Aria Automation will only create the SVC_DSM_PROJECT referenced in the <em>config.yaml</em> manifest. It does not create the additional projects listed in the project_to_namespace in Aria Automation. These will need to be done manually by an Aria Automation admin after the plugin installer has been run.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">---</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">dsm_hostname: 192.168.0.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">dsm_user_id: 'dsmadmin@ams.local'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">dsm_password: 'VMware123!'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">aria_base_url: https://vra.rainpole.com</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">orchestrator_base_url: https://vra.rainpole.com</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">aria_username: 'cormac'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">aria_password: 'VMware123!'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">org_id: 08969e76-5e6c-4581-9cf6-19c06384a9b2</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">blue_print_name: SVC DSM DBaaS</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">abx_action_name: SVC-DSM-DB-crud</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cr_name: SVC_DSMDB</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cr_type_name: Custom.DSMDB</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">env_name: SVC_DSM_ENV</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">project_name: SVC_DSM_PROJECT</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">default_namespace: marketing-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">project_to_namespace:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  SVC_DSM_PROJECT: default</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  SALES_DSM_PROJECT: sales-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  ENG_DSM_PROJECT: engineering-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  MK_DSM_PROJECT: marketing-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">skip_certificate_check: 'False'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">dsm_root_ca: |</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">-----BEGIN CERTIFICATE-----</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">MIIDcDCCAligAwIBAgIGAZrZgFtWMA0GCSqGSIb3DQEBCwUAMFkxCzAJBgNVBAYT</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">AlVTMQwwCgYDVQQKDANEU00xFTATBgNVBAsMDERTTSBQcm92aWRlcjElMCMGCSqG</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">SIb3DQEJARYWZHNtX3N1cHBvcnRAdm13YXJlLmNvbTAgFw0yNTExMjgxMDQwNTla</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&lt;--snip--&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">GO10PoLXP5MZObWGarfkC/+IgY8=</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">-----END CERTIFICATE-----</span>
</pre>
<p style="text-align: justify;">After the deployment (running the command &#8220;<em>python3 aria.py enable-blueprint-version-2</em>&#8220;), the Aria Automation administrator will have to do the following:</p>
<ol>
<li>Add users to Aria Automation, noting which namespace they have access to in DSM.</li>
<li>Assign these users the service role of Service Broker User</li>
<li>Create projects to match the project_to_namespace</li>
<li>Assign these users as member of their appropriate projects</li>
<li>Create new content sharing policies which grants the projects access to the DSM Content Source</li>
</ol>
<h2>1. Add users to Aria Automation with Service Broker User Role</h2>
<p style="text-align: justify;">In Aria Automation Identity and Access Management, assign the users the role of Service Broker User. This way, they will be able to trigger requests from the Service Broker DBaaS catalog item to provision databases from their own Project. If they have the role of Service Broker Admin, they would be able to see all projects, and would be able to request databases on namespaces which we do not want.  A Service Broker User role means that they only have access to their own project.</p>
<p style="text-align: justify;">Note that there is no automatic correlation here between the DSM users and the Aria Automation users, other than the fact that, in this post, they are the same user in Active Directory (and both DSM and Aria automation support integration with AD). It is up to the Aria and DSM administrators to coordinate the correlation of the user in DSM and the user in Aria Automation to ensure that these users have access to the correct DSM resources.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32740 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?resize=769%2C320&#038;ssl=1" alt="" width="769" height="320" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?resize=1024%2C426&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?resize=300%2C125&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?resize=768%2C319&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?resize=1536%2C639&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?resize=769%2C320&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Service-Broker-Users.png?w=1661&amp;ssl=1 1661w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>2. Create Projects as per <strong>project_to_namespace in config.yaml</strong></h2>
<p style="text-align: justify;">With the users configured, we can now login into Aria Automation as admin user, navigate to the Assembler and build the necessary projects that map to the config.yaml entries in <strong>project_to_namespace</strong>. With each project, assign one of the Service Broker users to the appropriate project:</p>
<table style="border-collapse: collapse; width: 100%; height: 100px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px; background-color: #000000;"><span style="color: #ffffff;"><strong>Username</strong></span></td>
<td style="width: 33.3333%; height: 25px; background-color: #000000;"><span style="color: #ffffff;"><strong>Aria Automation Project</strong></span></td>
</tr>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px;">dragomir</td>
<td style="width: 33.3333%; height: 25px;">ENG_DSM_PROJECT</td>
</tr>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px;">paudie</td>
<td style="width: 33.3333%; height: 25px;">MK_DSM_PROJECT</td>
</tr>
<tr style="height: 25px;">
<td style="width: 33.3333%; height: 25px;">christos</td>
<td style="width: 33.3333%; height: 25px;">SALES_DSM_PROJECT</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">It should look something like this. Of course, this is a simple example. If you have multiple users in a DSM namespace, these additional users would be added to the same project. To keep things simple, I am using a single user for each.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32741" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?resize=769%2C301&#038;ssl=1" alt="" width="769" height="301" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?resize=1024%2C401&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?resize=300%2C117&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?resize=768%2C300&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?resize=1536%2C601&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?resize=769%2C301&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/new-projects.png?w=1669&amp;ssl=1 1669w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>3. Create Content Sharing Policy Definitions</h2>
<p style="text-align: justify;">The final step for the administrator is to create new content sharing policies. These grant the projects access to the DSM Content Source so that they can ask DSM to provision databases. Navigate to the Service Broker, and under the Content &amp; Policies tab, select Definitions (under Policies). In this example, I have created 3 policies, one per project. It should also be possible to create a single share and assign it to all projects.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32742" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?resize=769%2C243&#038;ssl=1" alt="" width="769" height="243" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?resize=1024%2C324&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?resize=300%2C95&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?resize=768%2C243&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?resize=1536%2C486&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?resize=769%2C243&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/content-sharing-policy.png?w=1657&amp;ssl=1 1657w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">And that completes the setup in Aria Automation. We can now go ahead and check if it possible to deploy a Postgres database as user <em>dragomir</em> from Aria Automation, and verify that it lands in the <em>engineering-ns</em> namespace in DSM.</p>
<h2>Deploy a database via the Service Broker catalog</h2>
<p style="text-align: justify;">Begin by logging is to Aria Automation as the user &#8216;<em>dragomir</em>&#8216;. As per the assigned role of Service Broker user, <em>dragomir</em> can only see the Service Broker service.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-sb01.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32748 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-sb01.png?resize=769%2C148&#038;ssl=1" alt="" width="769" height="148" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-sb01.png?resize=1024%2C197&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-sb01.png?resize=300%2C58&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-sb01.png?resize=768%2C148&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-sb01.png?resize=769%2C148&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-sb01.png?w=1354&amp;ssl=1 1354w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Clicking on the Service Broker, and then navigating to the Catalog, <em>dragomir</em> should only see a single item in the catalog, and that item should show that it is associated with only a single project, the ENG_DSM_PROJECT. So far, this looks like it is achieving our goal and &#8216;guard-railing&#8217; the user <em>dragomir</em> into using the correct vSphere resources for data services, as defined by the Data Service Policy that is associated with the namespace where user <em>dragomir</em> resides on DSM.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-catalog-02.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32749 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-catalog-02.png?resize=769%2C316&#038;ssl=1" alt="" width="769" height="316" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-catalog-02.png?resize=1024%2C421&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-catalog-02.png?resize=300%2C123&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-catalog-02.png?resize=768%2C316&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-catalog-02.png?resize=769%2C316&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-catalog-02.png?w=1354&amp;ssl=1 1354w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Let&#8217;s validate this by making a request to provision a database. The only project available for selection in ENG_DSM_PROJECT, which is correct. Also, the list of available database versions matches those in the Data Service Policy to which the <strong>engineering-ns</strong> has been assigned in DSM. So far, so good. Continue with the deployment of the database.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-req-03.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32750 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-req-03.png?resize=769%2C321&#038;ssl=1" alt="" width="769" height="321" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-req-03.png?resize=1024%2C427&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-req-03.png?resize=300%2C125&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-req-03.png?resize=768%2C321&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-req-03.png?resize=769%2C321&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/drag-req-03.png?w=1356&amp;ssl=1 1356w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Assuming that the deployment of the database is successful, <em>dragomir</em> can drill into the details of the database, and check which namespace was used for this deployment. And it does indeed look like that the deployment has been placed in the correct <em>engineering-ns</em> namespace as defined in the <strong>project_to_namespace </strong>directive in the config.yaml.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/db-details.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32752" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/db-details.png?resize=769%2C458&#038;ssl=1" alt="" width="769" height="458" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/db-details.png?resize=1024%2C610&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/db-details.png?resize=300%2C179&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/db-details.png?resize=768%2C458&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/db-details.png?resize=769%2C458&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/db-details.png?w=1404&amp;ssl=1 1404w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p>We can verify the same from the DSM Portal. Login as user <em>dragomir</em>, who we have seen has been added to the <em>engineering-ns</em> and check if the database is present. Since <em>dragomir</em> is a DSM user, a result of adding the DSMUsers-Engineering Directory Service Group in the Permissions section of DSM, he can access the UI.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsm-db.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32753" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsm-db.png?resize=769%2C242&#038;ssl=1" alt="" width="769" height="242" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsm-db.png?resize=1024%2C322&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsm-db.png?resize=300%2C94&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsm-db.png?resize=768%2C241&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsm-db.png?resize=769%2C242&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/dragomir-dsm-db.png?w=1403&amp;ssl=1 1403w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;"><strong>Success</strong>. We have achieved our goal of integrating Aria Automation with the new RBAC features of DSM, and the relevant Data Service Policy controlling which users can provision which data services into which namespaces on DSM.</p>
<p>The post <a href="https://cormachogan.com/2026/01/23/dsm-9-0-2-aria-automation-plugin-changes-to-support-new-rbac-features/">DSM 9.0.2 &#8211; Aria Automation plugin changes to support new RBAC features</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cormachogan.com/2026/01/23/dsm-9-0-2-aria-automation-plugin-changes-to-support-new-rbac-features/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32685</post-id>	</item>
		<item>
		<title>DSM 9.0.2 &#8211; New Microsoft SQL Server Enhancements &#8211; SQL Server Agent Support</title>
		<link>https://cormachogan.com/2026/01/21/dsm-9-0-2-new-microsoft-sql-server-enhancements-sql-server-agent-support/</link>
					<comments>https://cormachogan.com/2026/01/21/dsm-9-0-2-new-microsoft-sql-server-enhancements-sql-server-agent-support/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 14:00:48 +0000</pubDate>
				<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[vSphere]]></category>
		<category><![CDATA[Data Services Manager. DSM]]></category>
		<category><![CDATA[Microsoft SQL Server]]></category>
		<category><![CDATA[SQL Server Agent]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32654</guid>

					<description><![CDATA[<p>VMware Data Service Manager 9.0.2.0 has achieved General Availability (GA) status, and is now readily accessible from the Broadcom Download Portal. You can see the full DSM 9.0.2 release notes here. In this post, I want to revisit our efforts to deliver a Microsoft SQL Server data service. As mentioned in a number of previous posts, we continue to work towards a fully supported Microsoft SQL Server data service in DSM. And whilst we do not have a generally available, supported release of this service in DSM version 9.0.2, we have made some significant enhancements once again in this release.&#8230;</p>
<p>The post <a href="https://cormachogan.com/2026/01/21/dsm-9-0-2-new-microsoft-sql-server-enhancements-sql-server-agent-support/">DSM 9.0.2 &#8211; New Microsoft SQL Server Enhancements &#8211; SQL Server Agent Support</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="wp-image-30383 alignleft" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=151%2C122&#038;ssl=1" alt="" width="151" height="122" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=1024%2C831&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=300%2C244&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=768%2C623&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=769%2C624&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?w=1386&amp;ssl=1 1386w" sizes="auto, (max-width: 151px) 100vw, 151px" /></a><b>VMware Data Service Manager 9.0.2.0 </b>has achieved General Availability (GA) status, and is now readily accessible from the Broadcom Download Portal. You can see the <a href="https://techdocs.broadcom.com/us/en/vmware-cis/dsm/data-services-manager/9-0/release-notes/vmware-data-services-manager-902-release-notes.html" target="_blank" rel="noopener">full DSM 9.0.2 release notes here</a>. In this post, I want to revisit our efforts to deliver a Microsoft SQL Server data service. As mentioned in a number of previous posts, we continue to work towards a fully supported Microsoft SQL Server data service in DSM. And whilst we do not have a generally available, supported release of this service in DSM version 9.0.2, we have made some significant enhancements once again in this release. In this version of DSM, we introduce support for SQL Server Agent. Many of our customers who have been participating in the design of this service have shared with us the importance of having SQL Server Agent support. It is a common way to run and schedule tasks on the instance and databases. In this post, I will show you how you can pass configuration parameters to the SQL Server Agent when provisioning a SQL Server instance via Data Services Manager. Then we can look at how we can use it run run and also schedule some jobs.</p>
<h2>The story so far &#8230;</h2>
<p style="text-align: justify;">By way of a recap, here is what we have delivered so far for the beta versions of MS SQL Server DSM data service:</p>
<ul style="text-align: justify;">
<li style="text-align: justify;"><a href="https://cormachogan.com/2025/06/20/microsoft-sql-server-now-tech-preview-in-data-services-manager-9-0/" target="_blank" rel="noopener">Click here</a> for an overview of the original MS SQL Server tech preview release back in DSM 9.0.0.</li>
<li style="text-align: justify;"><a href="https://cormachogan.com/2025/10/06/dsm-9-0-1-new-microsoft-sql-server-enhancements-part-1/" target="_blank" rel="noopener">Click here</a> and <a href="https://cormachogan.com/2025/10/08/dsm-9-0-1-new-microsoft-sql-server-enhancements-part-2/" target="_blank" rel="noopener">here</a> for an overview of the MS SQL Server enhancements made in DSM 9.0.1, which include automated Active Directory integration and automatic DNS updates for MS SQL Server instances. This release also introduced an overview of the new RBAC mechanism based on Data Services Policies. These policies control user access to data services and resources.</li>
</ul>
<h2>Deploy MS SQL Server instance and user database</h2>
<p style="text-align: justify;">Let&#8217;s now take a look at the new SQL Server Agent support. I have already configured an Active Directory Domain for DSM. This allows me to create a privileged AD user account which can write SPNs (servicePrincipalNames). This in turn allows DSM to enable Windows Authentication for MS SQL Server database users. See the DSM 9.0.1 blog post mentioned previously for further details on this cool feature.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.1-mssql-ad-domain.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32656 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.1-mssql-ad-domain.png?resize=769%2C278&#038;ssl=1" alt="" width="769" height="278" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.1-mssql-ad-domain.png?resize=1024%2C370&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.1-mssql-ad-domain.png?resize=300%2C109&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.1-mssql-ad-domain.png?resize=768%2C278&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.1-mssql-ad-domain.png?resize=769%2C278&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.1-mssql-ad-domain.png?w=1114&amp;ssl=1 1114w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Next, we create an MS SQL Server instance or engine. I won&#8217;t repeat the steps here as they are very similar to how it is done in DSM version 9.0.1. However, there is a new section to enable SQL Server Agent. It also includes some configuration parameter around Job History when enabled. Later, we will create a job to see this in action.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.2-mssql-agent-config.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32657 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.2-mssql-agent-config.png?resize=769%2C388&#038;ssl=1" alt="" width="769" height="388" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.2-mssql-agent-config.png?resize=1024%2C517&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.2-mssql-agent-config.png?resize=300%2C152&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.2-mssql-agent-config.png?resize=768%2C388&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.2-mssql-agent-config.png?resize=769%2C389&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.2-mssql-agent-config.png?w=1221&amp;ssl=1 1221w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Wait for the SQL Server instance to come online, verifying that Active Directory integration and automatic DNS updates are working correctly. This creates 4 System Databases on the MS SQL Server instance; master, model, msdb and tempdb. These are only accessible with administrator privileges. The details are available to the DSM admin when they view the summary page of the MS SQL Server instance, including a full connection string.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.3-mssql-instance.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32658 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.3-mssql-instance.png?resize=769%2C267&#038;ssl=1" alt="" width="769" height="267" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.3-mssql-instance.png?resize=1024%2C356&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.3-mssql-instance.png?resize=300%2C104&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.3-mssql-instance.png?resize=768%2C267&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.3-mssql-instance.png?resize=769%2C268&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.3-mssql-instance.png?w=1164&amp;ssl=1 1164w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">With the instance successfully deployed, we can create a user database on the instance. I am going to include a Windows Principal so that the user can use Windows Authentication to access the database. the format is &#8216;domain-name\user-name&#8217;.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.4.-Windows-Auth.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32659 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.4.-Windows-Auth.png?resize=769%2C445&#038;ssl=1" alt="" width="769" height="445" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.4.-Windows-Auth.png?resize=1024%2C593&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.4.-Windows-Auth.png?resize=300%2C174&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.4.-Windows-Auth.png?resize=768%2C445&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.4.-Windows-Auth.png?resize=769%2C445&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.4.-Windows-Auth.png?w=1245&amp;ssl=1 1245w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p>After a few moment, the database will be online.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.5-mssql-database.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32660 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.5-mssql-database.png?resize=769%2C289&#038;ssl=1" alt="" width="769" height="289" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.5-mssql-database.png?resize=1024%2C385&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.5-mssql-database.png?resize=300%2C113&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.5-mssql-database.png?resize=768%2C289&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.5-mssql-database.png?resize=769%2C289&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/0.5-mssql-database.png?w=1077&amp;ssl=1 1077w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Now we can begin to look at the SQL Server Agent configuration and how we can use it to run some jobs.</p>
<h2>Verify SQL Server Agent functionality</h2>
<p style="text-align: justify;">As part of this post, I am going to use some of the very popular scripts created by <strong>Ola Hallengren</strong>. The scripts are available here: <a href="https://ola.hallengren.com/downloads.html" target="_blank" rel="noopener">https://ola.hallengren.com/downloads.html</a>. In particular, I will look at the stored procedures that does database integrity checks. This is a stored procedure which we will install on the user database. First, we must installed another required stored procedure called <strong>CommandExecute.sql</strong>. We also need to run a script called <strong>CommandLog.sql </strong>to create a required table within the user database. Now we can run the <strong>DatabaseIntegrityCheck.sql</strong> stored procedure. Once this is completed, we can run the database integrity check.</p>
<p style="text-align: justify;">After confirming that the stored procedure is working, we can then build a SQL Server Agent job to run the database integrity check, and modify the job to include a daily schedule to run it on a regular basis.</p>
<p style="text-align: justify;">I am first going to login to the SQL Server as an administrator. The Admin login and password can be retrieved from the DSM UI, in the Summary view of the database instance.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-mssql-instance-view-dsm-ui.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32663 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-mssql-instance-view-dsm-ui.png?resize=769%2C246&#038;ssl=1" alt="" width="769" height="246" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-mssql-instance-view-dsm-ui.png?resize=1024%2C327&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-mssql-instance-view-dsm-ui.png?resize=300%2C96&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-mssql-instance-view-dsm-ui.png?resize=768%2C245&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-mssql-instance-view-dsm-ui.png?resize=769%2C246&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-mssql-instance-view-dsm-ui.png?w=1478&amp;ssl=1 1478w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Use this to login to the MS SQL Server Management Studio (SSMS) using SQL Server Authentication:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/01-login-with-fqdn.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32761 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/01-login-with-fqdn.png?resize=518%2C351&#038;ssl=1" alt="" width="518" height="351" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/01-login-with-fqdn.png?w=518&amp;ssl=1 518w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/01-login-with-fqdn.png?resize=300%2C203&amp;ssl=1 300w" sizes="auto, (max-width: 518px) 100vw, 518px" /></a></p>
<p style="text-align: justify;">Let&#8217;s first check that the SQL Server Agent is running by opening a new query and running the following:</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="token keyword">SELECT</span><span class=""> status_desc </span><span class="token keyword">FROM</span><span class=""> sys</span><span class="token punctuation">.</span><span class="">dm_server_services </span><span class="token keyword">WHERE</span><span class=""> servicename </span><span class="token operator">LIKE</span> <span class="token string">'SQL Server Agent%'</span><span class="token punctuation">;</span> </span></pre>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/02-sqlagentstatus.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32762 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/02-sqlagentstatus.png?resize=769%2C243&#038;ssl=1" alt="" width="769" height="243" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/02-sqlagentstatus.png?resize=1024%2C324&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/02-sqlagentstatus.png?resize=300%2C95&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/02-sqlagentstatus.png?resize=768%2C243&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/02-sqlagentstatus.png?resize=769%2C243&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/02-sqlagentstatus.png?w=1129&amp;ssl=1 1129w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">It appears to be running as expected. We can also check that the configuration values provided via the DSM UI for the SQL Server Agent have been implemented via the following command:</p>
<div data-hasbody="true" data-macro-name="code">
<div>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">EXEC msdb.dbo.sp_get_sqlagent_properties; </span></pre>
</div>
</div>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/03-sqlagentsprops.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32763 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/03-sqlagentsprops.png?resize=769%2C209&#038;ssl=1" alt="" width="769" height="209" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/03-sqlagentsprops.png?resize=1024%2C278&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/03-sqlagentsprops.png?resize=300%2C81&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/03-sqlagentsprops.png?resize=768%2C208&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/03-sqlagentsprops.png?resize=769%2C208&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/03-sqlagentsprops.png?w=1350&amp;ssl=1 1350w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">The max and min values of 1500 and 150 match the values that I provided during the deployment. So far, so good. Let&#8217;s now add the stored procedures on the user database for the integrity check.</p>
<h2>Create Stored Procedure to do Database Integrity Checks</h2>
<p style="text-align: justify;">To add a stored procedure, select the user database (cormacdb01), and under Programmability, click on Stored Procedure &gt; New &gt; Stored Procedure, as shown below.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04-storedprocs.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32764 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04-storedprocs.png?resize=595%2C417&#038;ssl=1" alt="" width="595" height="417" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04-storedprocs.png?w=595&amp;ssl=1 595w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04-storedprocs.png?resize=300%2C210&amp;ssl=1 300w" sizes="auto, (max-width: 595px) 100vw, 595px" /></a></p>
<p>This will create a stored procedure template:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-stored-proc-template.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32668 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-stored-proc-template.png?resize=693%2C580&#038;ssl=1" alt="" width="693" height="580" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-stored-proc-template.png?w=693&amp;ssl=1 693w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-stored-proc-template.png?resize=300%2C251&amp;ssl=1 300w" sizes="auto, (max-width: 693px) 100vw, 693px" /></a></p>
<p style="text-align: justify;">Replace the content of the stored procedure template with the Ola Hallengren scripts mentioned earlier, and execute them one at a time on the user database. Start with the CommandExecute script to build the CommandExecute procedure.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32767 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?resize=769%2C280&#038;ssl=1" alt="" width="769" height="280" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?resize=1024%2C373&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?resize=300%2C109&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?resize=768%2C280&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?resize=1536%2C560&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?resize=769%2C280&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/04a-CommExec.png?w=1765&amp;ssl=1 1765w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Next, open execute the CommandLog script to create the CommandLog table.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/CommandLog-SP.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32765 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/CommandLog-SP.png?resize=769%2C367&#038;ssl=1" alt="" width="769" height="367" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/CommandLog-SP.png?resize=1024%2C489&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/CommandLog-SP.png?resize=300%2C143&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/CommandLog-SP.png?resize=768%2C367&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/CommandLog-SP.png?resize=769%2C367&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/CommandLog-SP.png?w=1340&amp;ssl=1 1340w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">And finally execute the DatabaseIntegrityCheck script to create the Database Integrity Check procedure.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/06-dbintegcheck.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32766 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/06-dbintegcheck.png?resize=769%2C386&#038;ssl=1" alt="" width="769" height="386" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/06-dbintegcheck.png?resize=1024%2C514&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/06-dbintegcheck.png?resize=300%2C151&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/06-dbintegcheck.png?resize=768%2C385&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/06-dbintegcheck.png?resize=769%2C386&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/06-dbintegcheck.png?w=1287&amp;ssl=1 1287w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">You can now run a command to verify that the database integrity check procedure is working. You can do this as the database owner, rather than the database admin. Logout from SSMS as the admin. Re-connect to the SSMS using the Windows Credentials of the owner, in this case &#8216;rainpole\cormac&#8217;. This is possible since we have given DSM the ability to automatically enable these logins through a privileged user account (<a href="https://cormachogan.com/2025/10/06/dsm-9-0-1-new-microsoft-sql-server-enhancements-part-1/" target="_blank" rel="noopener">see here</a>) that we referenced when we created the database instance.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/08-correct-windows-login.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32769 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/08-correct-windows-login.png?resize=509%2C337&#038;ssl=1" alt="" width="509" height="337" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/08-correct-windows-login.png?w=509&amp;ssl=1 509w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/08-correct-windows-login.png?resize=300%2C199&amp;ssl=1 300w" sizes="auto, (max-width: 509px) 100vw, 509px" /></a></p>
<p style="text-align: justify;">This user does not have access to any of the System database. The user only has access to its own user database. Since the SMSS connection always defaults to the &#8216;master&#8217; database, we will need to change the database for this user to the user database (cormacdb01).<a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/16.-Connect-to-user-database.png?ssl=1"><br />
<img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-full wp-image-32673" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/16.-Connect-to-user-database.png?resize=492%2C531&#038;ssl=1" alt="" width="492" height="531" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/16.-Connect-to-user-database.png?w=492&amp;ssl=1 492w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/16.-Connect-to-user-database.png?resize=278%2C300&amp;ssl=1 278w" sizes="auto, (max-width: 492px) 100vw, 492px" /></a></p>
<p style="text-align: justify;">Once connected to the database, execute the following query on the user database, which is essentially running the procedure that we added earlier:</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="token keyword">EXECUTE</span> <span class="token punctuation">[</span><span class="">dbo</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token punctuation">[</span><span class="">DatabaseIntegrityCheck</span><span class="token punctuation">]</span> <span class="token variable">@Databases</span> <span class="token operator">=</span> <span class="token string">'USER_DATABASES'</span><span class="token punctuation">,</span> <span class="token variable">@LogToTable</span> <span class="token operator">=</span> <span class="token string">'Y'</span><span class="token punctuation">;</span> </span></pre>
<p style="text-align: justify;">You should observe the results of the integrity database check appear, reporting any issues with the database integrity:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32770 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?resize=769%2C299&#038;ssl=1" alt="" width="769" height="299" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?resize=1024%2C398&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?resize=300%2C117&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?resize=768%2C298&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?resize=1536%2C597&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?resize=769%2C299&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/09-db-integrity-check.png?w=1765&amp;ssl=1 1765w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>Create a SQL Server Agent Job to do Database Integrity Checks</h2>
<div style="text-align: justify;">A SQL Server Agent can use SQL Server to perform a Job where each Job contains one or more tasks to be performed. These tasks are assigned to what is called a job step.</div>
<p style="text-align: justify;">We will now create a SQL Server Agent job to run the database integrity checks. We can then add a schedule to it so that it checks the database integrity on a daily basis. Log out of the MS SQL Server Management Studio as the current Windows user and back in as the database admin using SQL Auth. Then run the following query to create the job. In the second EXEC, change the database_name to the name of the user database.</p>
<p style="text-align: justify;">In a nutshell, we are creating a job called <strong>indexOptimize</strong>, and adding a step to the job to run the database integrity check on the user database. As this is run on the msdb, a system database, it can only be executed by the database admin.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="token keyword">USE</span><span class=""> msdb</span><span class="token punctuation">;</span> 
<span class="token keyword">    EXEC</span><span class=""> msdb</span><span class="token punctuation">.</span><span class="">dbo</span><span class="token punctuation">.</span><span class="">sp_add_job </span><span class="token variable">@job_name</span> <span class="token operator">=</span><span class=""> indexOptimize</span><span class="token punctuation">;</span> 
<span class="token keyword">    EXEC</span><span class=""> msdb</span><span class="token punctuation">.</span><span class="">dbo</span><span class="token punctuation">.</span><span class="">sp_add_jobstep </span><span class="token variable">@job_name</span> <span class="token operator">=</span><span class=""> IndexOptimize</span><span class="token punctuation">,</span> <span class="token variable">@step_name</span> <span class="token operator">=</span><span class=""> IndexOptimize</span><span class="token punctuation">,</span> <span class="token variable">@database_name</span> <span class="token operator">=</span><span class=""> &lt;YOUR_DB_NAME&gt;</span><span class="token punctuation">,</span> <span class="token variable">@subsystem</span> <span class="token operator">=</span><span class=""> N</span><span class="token string">'TSQL'</span><span class="token punctuation">,</span> <span class="token variable">@command</span> <span class="token operator">=</span> <span class="token string">'EXECUTE [dbo].[DatabaseIntegrityCheck] @Databases = ''USER_DATABASES'', @LogToTable = ''Y'';'</span><span class="token punctuation">;</span> 
<span class="token keyword">    EXEC</span><span class=""> msdb</span><span class="token punctuation">.</span><span class="">dbo</span><span class="token punctuation">.</span><span class="">sp_add_jobserver </span><span class="token variable">@job_name</span> <span class="token operator">=</span><span class=""> IndexOptimize</span><span class="token punctuation">,</span> <span class="token variable">@server_name</span> <span class="token operator">=</span><span class=""> N</span><span class="token string">'(local)'</span><span class="token punctuation">;</span></span></pre>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10-indexopt-job.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32771 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10-indexopt-job.png?resize=769%2C122&#038;ssl=1" alt="" width="769" height="122" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10-indexopt-job.png?resize=1024%2C162&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10-indexopt-job.png?resize=300%2C48&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10-indexopt-job.png?resize=768%2C122&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10-indexopt-job.png?resize=769%2C122&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10-indexopt-job.png?w=1421&amp;ssl=1 1421w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">After running the above command, we should now see the job appear in the SQL Server Agent inventory view on the left hand view of the MS SQL Server Management Studio, as shown below.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11.-Observe-job-in-SQL-Agent.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32677 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11.-Observe-job-in-SQL-Agent.png?resize=322%2C94&#038;ssl=1" alt="" width="322" height="94" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11.-Observe-job-in-SQL-Agent.png?w=322&amp;ssl=1 322w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11.-Observe-job-in-SQL-Agent.png?resize=300%2C88&amp;ssl=1 300w" sizes="auto, (max-width: 322px) 100vw, 322px" /></a></p>
<p style="text-align: justify;">Click on the job name (<strong>indexOptimize</strong> in this example) to see the job properties.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11-indexOpt-prop.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32772 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11-indexOpt-prop.png?resize=769%2C492&#038;ssl=1" alt="" width="769" height="492" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11-indexOpt-prop.png?resize=1024%2C655&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11-indexOpt-prop.png?resize=300%2C192&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11-indexOpt-prop.png?resize=768%2C491&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11-indexOpt-prop.png?resize=769%2C492&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/11-indexOpt-prop.png?w=1170&amp;ssl=1 1170w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">If you select the <strong>Steps</strong> page on the left hand side of the job properties, you can see a T-SQL type job step.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12-indexOpt-steps.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32773 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12-indexOpt-steps.png?resize=706%2C213&#038;ssl=1" alt="" width="706" height="213" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12-indexOpt-steps.png?w=706&amp;ssl=1 706w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12-indexOpt-steps.png?resize=300%2C91&amp;ssl=1 300w" sizes="auto, (max-width: 706px) 100vw, 706px" /></a></p>
<p style="text-align: justify;">Click on the Edit underneath the Start Step in the job properties to verify that it is indeed a request to run the integrity check:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13-indexOpt-dbcheck.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32774 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13-indexOpt-dbcheck.png?resize=706%2C299&#038;ssl=1" alt="" width="706" height="299" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13-indexOpt-dbcheck.png?w=706&amp;ssl=1 706w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13-indexOpt-dbcheck.png?resize=300%2C127&amp;ssl=1 300w" sizes="auto, (max-width: 706px) 100vw, 706px" /></a></p>
<p>The job appears to have been successfully created.</p>
<h2>Schedule a SQL Server Agent Job</h2>
<p style="text-align: justify;">Let&#8217;s now schedule this job to run regularly and report on the database integrity. Cancel the previous &#8216;Edit&#8217; window to return back to the Job Properties. One of the pages listed in the left hand side is &#8216;Schedules&#8217;. Click on this to create a schedule for the job using the &#8216;New&#8230;&#8217; button. In this case, I created a daily schedule for the integrity check.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/14-job-schedule.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32775 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/14-job-schedule.png?resize=675%2C588&#038;ssl=1" alt="" width="675" height="588" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/14-job-schedule.png?w=675&amp;ssl=1 675w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/14-job-schedule.png?resize=300%2C261&amp;ssl=1 300w" sizes="auto, (max-width: 675px) 100vw, 675px" /></a></p>
<p style="text-align: justify;">With a schedule in place, we can check the<span class="token comment"> job history and its runs using below command. You obviously won&#8217;t see any job runs reported until the job has run at least once.</span></p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">EXEC msdb.dbo.sp_help_jobhistory @mode = 'FULL';</span></pre>
<p style="text-align: justify;">This is a sample of the output that the above command generates, showing multiple scheduled runs of the job:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/sqlagent-jobhistory.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32780 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/sqlagent-jobhistory.png?resize=769%2C277&#038;ssl=1" alt="" width="769" height="277" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/sqlagent-jobhistory.png?resize=1024%2C369&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/sqlagent-jobhistory.png?resize=300%2C108&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/sqlagent-jobhistory.png?resize=768%2C277&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/sqlagent-jobhistory.png?resize=769%2C277&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/sqlagent-jobhistory.png?w=1188&amp;ssl=1 1188w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>Summary</h2>
<p style="text-align: justify;">And that completes the post demonstrating how SQL Server Agent support is now included in DSM 9.0.2 provisioned MS SQL Server instances. We continue to add features for MS SQL Server in each release, and we hope to make it generally available very soon indeed. If there are any questions around our Data Services Manager offering, or MS SQL Server integration, please reach out or leave a comment on the post.</p>
<p>The post <a href="https://cormachogan.com/2026/01/21/dsm-9-0-2-new-microsoft-sql-server-enhancements-sql-server-agent-support/">DSM 9.0.2 &#8211; New Microsoft SQL Server Enhancements &#8211; SQL Server Agent Support</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cormachogan.com/2026/01/21/dsm-9-0-2-new-microsoft-sql-server-enhancements-sql-server-agent-support/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32654</post-id>	</item>
		<item>
		<title>Velero Revisited &#8211; Manually backing up VKS clusters using Velero</title>
		<link>https://cormachogan.com/2026/01/16/velero-revisited-manually-backing-up-vks-clusters-using-velero/</link>
					<comments>https://cormachogan.com/2026/01/16/velero-revisited-manually-backing-up-vks-clusters-using-velero/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Fri, 16 Jan 2026 14:00:19 +0000</pubDate>
				<category><![CDATA[Cloud Native Applications]]></category>
		<category><![CDATA[Cloud Native Storage]]></category>
		<category><![CDATA[Container Storage Interface]]></category>
		<category><![CDATA[Velero]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[vSphere]]></category>
		<category><![CDATA[vSphere Kubernetes Service (VKS)]]></category>
		<category><![CDATA[data protection]]></category>
		<category><![CDATA[VCF]]></category>
		<category><![CDATA[VKS]]></category>
		<category><![CDATA[VKSM]]></category>
		<category><![CDATA[vSphere Kubernetes Service]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32731</guid>

					<description><![CDATA[<p>It&#8217;s been some time since I looked at how to use the Velero CLI to backup and restore some modern applications running in a Kubernetes cluster. However, after publishing how to use the new VKS Manager (VKSM) Data Protection (DP) earlier this week, it was mentioned that many customers who are on their VCF 9.x journey and who are using the Supervisor and vSphere Kubernetes Service to deploy VKS clusters, have not yet deployed VCF Automation into their VCF stack. This means that they do not have VKSM DP available to them just yet. So the question was whether or&#8230;</p>
<p>The post <a href="https://cormachogan.com/2026/01/16/velero-revisited-manually-backing-up-vks-clusters-using-velero/">Velero Revisited &#8211; Manually backing up VKS clusters using Velero</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2021/02/velero.jpg?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignleft wp-image-28353" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2021/02/velero.jpg?resize=150%2C150&#038;ssl=1" alt="" width="150" height="150" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2021/02/velero.jpg?w=225&amp;ssl=1 225w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2021/02/velero.jpg?resize=150%2C150&amp;ssl=1 150w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>It&#8217;s been some time since I looked at how to use the Velero CLI to backup and restore some modern applications running in a Kubernetes cluster. However, after publishing how to use <a href="https://cormachogan.com/2026/01/14/a-first-look-at-vksm-data-protection-vksm-dp/" target="_blank" rel="noopener">the new VKS Manager (VKSM) Data Protection (DP) earlier this week</a>, it was mentioned that many customers who are on their VCF 9.x journey and who are using the Supervisor and vSphere Kubernetes Service to deploy VKS clusters, have not yet deployed VCF Automation into their VCF stack. This means that they do not have VKSM DP available to them just yet. So the question was whether or not the Velero CLI could be used manually to take backups and do restores of VKS workloads. The answer is of course yes, and in this blog I will show how to deploy Velero (client and server) that will allow you to backup your modern app workloads running in VKS. We will be using the new and very powerful VCF CLI to do some of these tasks.</p>
<h2>Deploy the Velero Client/CLI</h2>
<p style="text-align: justify;">Step 1 in the process is to deploy the Velero Client. This involves downloading a zipped up Velero binary to your desktop, and then placing it somewhere in your execution path (<a href="https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vsphere-supervisor-services-and-standalone-components/latest/managing-vsphere-kuberenetes-service-clusters-and-workloads/backup-and-restore-workloads-using-the-velero-plugin-for-vsphere/velero-117/install-velero-cli-117-on-clusters.html" target="_blank" rel="noopener">full instructions here</a>). I downloaded it to an Ubuntu VM that I have in my environment. Once the Velero Client/CLI has been installed, you can check what the version is by using the command &#8216;velero version&#8217;. Ignore the server error. This is simply because we have not yet installed the server part of Velero onto the VKS cluster. However, there client version is 1.17.0. We should match this with the server version on the VKS cluster.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="">$ <strong>velero version</strong> 
</span>Client:
         Version: v1.17.0_vmware.1
         Git commit: 3172d9f99c3d501aad9ddfac8176d783f7692dce-modified
 <span class="token operator">&lt;</span><span class="">error getting server version: unable to retrieve the complete list of server APIs: velero.io/v1: no matches </span><span class="token keyword">for</span><span class=""> velero.io/v1, </span><span class="token assign-left variable">Resource</span><span class="token operator">=</span><span class="token operator">&gt;</span></span></pre>
<h2>Deploy the Velero Server onto VKS</h2>
<p style="text-align: justify;">To being with, ensure that your KUBECONFIG is set up correctly, and that you are pointing to the correct VKS cluster, i.e., the one where you wish to install the Velero server. I usually check by running a<em> kubectl get nodes</em> to verify that I have the correct cluster context.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl get nodes</strong> 
NAME                                                              STATUS   ROLES           AGE   VERSION 
kubernetes-cluster-dkpp-hkpfp-r6j66                               Ready    control-plane   41m   v1.33.3+vmware.1-fips 
<span class="">kubernetes-cluster-dkpp-kubernetes-cluster-dkpp-np-pk3w-smkvs46   Ready    </span><span class="token operator">&lt;</span><span class="">none</span><span class="token operator">&gt;</span><span class="">          36m   v1.33.3+vmware.1-fips</span></span></pre>
<h3>Create a velero-data-values.yaml file</h3>
<p style="text-align: justify;">A yaml file is required to describe the details of the backup storage location (bsl). In this example, I am once again using MinIO to provide me with an S3 compatible bucket but any S3 compatible bucket will suffice. I have create a bucket called &#8220;velero-backups&#8221;. Since I have TLS enabled, I am using an <em>https</em> URL. This means I need to provider a Certificate Authority in the manifest, as shown below. This provides trust between Velero and the object store provider. I also need to provide credentials to access the object store.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>cat velero-data-values.yaml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">backupStorageLocation:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  bucket: velero-backups</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  config:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    region: "minio"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    s3ForcePathStyle: "true"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    s3Url: "https://minio.rainpole.io:9000"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  caCert: |</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    -----BEGIN CERTIFICATE-----</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    MIIGFzCCA/+gAwIBAgICEBkwDQYJKoZIhvcNAQELBQAwgY0xEDAOBgNVBAMMB01J</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Tk9fQ0ExCzAJBgNVBAYTAklFMQ0wCwYDVQQIDARDb3JrMQ0wCwYDVQQHDARDb3Jr</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    MRUwEwYDVQQKDAxWQ0YgRGl2aXNpb24xDTALBgNVBAsMBE9DVE8xKDAmBgkqhkiG</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">---&gt; snip</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    G+aB3AHlbfw45mkMlsk9jXl1sj21UYw/ZHJN</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    -----END CERTIFICATE-----</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  credential: |</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    [default]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    aws_access_key_id=admin</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    aws_secret_access_key=password</span></pre>
<h3>Use the VCF CLI to add a package repo to the cluster</h3>
<p style="text-align: justify;">Our next step is to use the VCF CLI (my binary is called vcf-cli) to create a package repo. The VCF CLI can be downloaded from any Supervisor Namespace Summary page. The repo, once created, will contain our Velero package which we can install once downloaded. The packages are retrieved from the VKS Standard Packages Repository. I mentioned the VCF CLI a few times recently, such as using it <a href="https://cormachogan.com/2025/12/12/using-the-vcf-9-x-cli-to-troubleshoot-a-dsm-database-running-on-vks/" target="_blank" rel="noopener">to troubleshoot DSM</a> deployed on VKS clusters. It is a very useful tool for VCF administrators as it allow command line interaction with the Sueprvisor and VCF Automation. Before we create the repo, let&#8217;s first ensure that we are pulling down the latest packages. This <a href="https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vsphere-supervisor-services-and-standalone-components/latest/release-notes/vks-standard-packages-release-notes.html" target="_blank" rel="noopener">URL for the VKS Release Notes</a> will tell you which path to use for the packages. At the time of writing, VKS 3.5 was the latest release, so the RN reports that the VKS Standard Packages v3.5.0+20251218 repository is available here:</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">projects.packages.broadcom.com/vsphere/supervisor/vks-standard-packages/3.5.0-20251218/vks-standard-packages:3.5.0-20251218</span></pre>
<p style="text-align: justify;">Always check the Release Notes for the latest path information. We will use this path when we create the repo. Note that I am still in the KUBECONFIG context. Let&#8217;s add the repository. I am placing it in the namespace tkg-system.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$<span class="Apple-converted-space">  </span><strong>vcf-cli package repository add standard-package-repo \
--url projects.packages.broadcom.com/vsphere/supervisor/packages/2025.10.22/vks-standard-packages:3.5.0-20251022 \
-n tkg-system</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:26:48PM: Updating package repository resource 'standard-package-repo' <b>in</b> namespace 'tkg-system'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:26:48PM: Waiting <b>for</b> package repository reconciliation <b>for</b> 'standard-package-repo'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:26:50PM: Fetching</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| apiVersion: vendir.k14s.io/v1alpha1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| directories:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| - contents:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">  </span>- imgpkgBundle:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">      </span>image: projects.packages.broadcom.com/vsphere/supervisor/packages/2025.10.22/vks-standard-packages@sha256:36b48ba005e884586512c2fda8c4598f426c6f78efa7f84f5b24087b49a6b52d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">      </span>tag: 3.5.0-20251022</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">    </span>path: .</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">  </span>path: "0"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| kind: LockConfig</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>|</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:26:50PM: Fetch succeeded</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:26:52PM: Template succeeded</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:26:52PM: Deploy started (3s ago)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:26:56PM: Deploying</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Target cluster 'https://10.96.0.1:443'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Changes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Namespace <span class="Apple-converted-space">  </span>Name <span class="Apple-converted-space">                                                                    </span>Kind <span class="Apple-converted-space">            </span>Age<span class="Apple-converted-space">  </span>Op<span class="Apple-converted-space">      </span>Op st.<span class="Apple-converted-space">                      </span>Wait to<span class="Apple-converted-space">  </span>Rs<span class="Apple-converted-space">  </span>Ri</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| tkg-system<span class="Apple-converted-space">  </span>ako.kubernetes.vmware.com<span class="Apple-converted-space">                                                </span>PackageMetadata<span class="Apple-converted-space">  </span>-<span class="Apple-converted-space">    </span>create<span class="Apple-converted-space">  </span>fallback on update or noop<span class="Apple-converted-space">  </span>-<span class="Apple-converted-space">        </span>- <span class="Apple-converted-space">  </span>-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| ^ <span class="Apple-converted-space">          </span>ako.kubernetes.vmware.com.1.13.4+vmware.1-vks.1<span class="Apple-converted-space">                          </span>Package<span class="Apple-converted-space">          </span>-<span class="Apple-converted-space">    </span>create<span class="Apple-converted-space">  </span>fallback on update or noop<span class="Apple-converted-space">  </span>-<span class="Apple-converted-space">        </span>- <span class="Apple-converted-space">  </span>-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| ^ <span class="Apple-converted-space">          </span>autoscaler.kubernetes.vmware.com <span class="Apple-converted-space">                                        </span>PackageMetadata<span class="Apple-converted-space">  </span>9m <span class="Apple-converted-space">  </span>delete<span class="Apple-converted-space">  </span>- <span class="Apple-converted-space">                          </span>-<span class="Apple-converted-space">        </span>ok<span class="Apple-converted-space">  </span>-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| ^ <span class="Apple-converted-space">          </span>cert-manager.kubernetes.vmware.com.1.17.2+vmware.1-vks.1 <span class="Apple-converted-space">                </span>Package<span class="Apple-converted-space">          </span>9m <span class="Apple-converted-space">  </span>delete<span class="Apple-converted-space">  </span>- <span class="Apple-converted-space">                          </span>-<span class="Apple-converted-space">        </span>ok<span class="Apple-converted-space">  </span>-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| ^ <span class="Apple-converted-space">          </span>cert-manager.kubernetes.vmware.com.1.17.2+vmware.2-vks.1 <span class="Apple-converted-space">                </span>Package<span class="Apple-converted-space">          </span>-<span class="Apple-converted-space">    </span>create<span class="Apple-converted-space">  </span>fallback on update or noop<span class="Apple-converted-space">  </span>-<span class="Apple-converted-space">        </span>- <span class="Apple-converted-space">  </span>-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| ^ <span class="Apple-converted-space">          </span>cert-manager.kubernetes.vmware.com.1.18.2+vmware.1-vks.1 <span class="Apple-converted-space">                </span>Package<span class="Apple-converted-space">          </span>9m <span class="Apple-converted-space">  </span>delete<span class="Apple-converted-space">  </span>- <span class="Apple-converted-space">                          </span>-<span class="Apple-converted-space">        </span>ok<span class="Apple-converted-space">  </span>-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| ^ <span class="Apple-converted-space">          </span>cert-manager.kubernetes.vmware.com.1.18.2+vmware.2-vks.2 <span class="Apple-converted-space">                </span>Package<span class="Apple-converted-space">          </span>-<span class="Apple-converted-space">    </span>create<span class="Apple-converted-space">  </span>fallback on update or noop<span class="Apple-converted-space">  </span>-<span class="Apple-converted-space">        </span>- <span class="Apple-converted-space">  </span>-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span></pre>
<p class="p1" style="text-align: justify;">Let&#8217;s check if the Velero package is now included in the repository, and if so, what versions are available.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>vcf-cli package available list -n tkg-system | grep velero</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>velero.kubernetes.vmware.com<span class="Apple-converted-space">                    </span>velero</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>vcf-cli package available get velero.kubernetes.vmware.com</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>NAME: <span class="Apple-converted-space">                  </span>velero.kubernetes.vmware.com</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>DISPLAY-NAME: <span class="Apple-converted-space">          </span>velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>CATEGORIES: <span class="Apple-converted-space">            </span>- data protection</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>SHORT-DESCRIPTION:<span class="Apple-converted-space">      </span>Velero is an open source tool to safely backup and restore, perform disaster</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">recovery, and migrate Kubernetes cluster resources and persistent volumes.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>LONG-DESCRIPTION: <span class="Apple-converted-space">      </span>Velero is an open source tool to safely backup and restore, perform disaster</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">recovery, and migrate Kubernetes cluster resources and persistent volumes.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>PROVIDER: <span class="Apple-converted-space">              </span>VMware</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>MAINTAINERS:<span class="Apple-converted-space">            </span>- name: Wenkai Yin</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>SUPPORT-DESCRIPTION:<span class="Apple-converted-space">    </span>https://github.com/vmware-tanzu/velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>VERSION<span class="Apple-converted-space">                </span>RELEASED-AT</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>1.16.1+vmware.1-vks.1<span class="Apple-converted-space">  </span>2025-05-19 12:30:00 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>1.16.2+vmware.1-vks.1<span class="Apple-converted-space">  </span>2025-08-05 12:30:00 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>1.17.0+vmware.1-vks.1<span class="Apple-converted-space">  </span>2025-09-16 11:30:00 +0000 UTC</span></pre>
<p style="text-align: justify;">Looks good. Velero version 1.17.0 is an available package version, which will match the client version we are using.</p>
<h3>Install the Velero Server Package</h3>
<p style="text-align: justify;">Let&#8217;s proceed with the install of the Velero server package. Specify the namespace of the repo where the package is stored, the name of the package itself, the version you wish to install and the path to the velero-data-values.yaml created earlier. The actual Velero server components will be installed from the package into a namespace called velero.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>vcf-cli package install velero --namespace tkg-system \
--package velero.kubernetes.vmware.com \
--version 1.17.0+vmware.1-vks.1 \
--values-file velero-data-values.yaml</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:07PM: Pausing reconciliation <b>for</b> package installation 'velero' <b>in</b> namespace 'tkg-system'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:08PM: Updating secret 'velero-tkg-system-values'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:08PM: Resuming reconciliation <b>for</b> package installation 'velero' <b>in</b> namespace 'tkg-system'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:08PM: Waiting <b>for</b> PackageInstall reconciliation <b>for</b> 'velero'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:08PM: Waiting <b>for</b> generation 3 to be observed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:09PM: Fetch started</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:09PM: Fetching</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| apiVersion: vendir.k14s.io/v1alpha1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| directories:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| - contents:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">  </span>- imgpkgBundle:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">      </span>image: projects.packages.broadcom.com/vsphere/supervisor/packages/2025.10.22/vks-standard-packages@sha256:5dd00ce6284efa836cae4abb351ab8987cf118f79d355c84ce2ba0a5ac5fbd29</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">    </span>path: .</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| <span class="Apple-converted-space">  </span>path: "0"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| kind: LockConfig</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>|</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:09PM: Fetch succeeded</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:09PM: Template succeeded</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:10PM: Deploy started</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:10PM: Deploying</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Target cluster 'https://10.96.0.1:443' (nodes: kubernetes-cluster-dkpp-hkpfp-r6j66, 1+)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Changes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Namespace<span class="Apple-converted-space">  </span>Name<span class="Apple-converted-space">  </span>Kind<span class="Apple-converted-space">  </span>Age<span class="Apple-converted-space">  </span>Op<span class="Apple-converted-space">  </span>Op st.<span class="Apple-converted-space">  </span>Wait to<span class="Apple-converted-space">  </span>Rs<span class="Apple-converted-space">  </span>Ri</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Op:<span class="Apple-converted-space">      </span>0 create, 0 delete, 0 update, 0 noop, 0 exists</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Wait to: 0 reconcile, 0 delete, 0 noop</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>| Succeeded</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1:30:10PM: Deploy succeeded</span></pre>
<h3>Check the Velero install status</h3>
<p style="text-align: justify;">We can now check if the package installed successfully. We can use <em>kubectl</em> to check on various objects in the velero namespace, such as deployments, replicaSets and Pods. We can check that the BackupStorageLocation (bsl) is available and by using the velero version command, we can verify that the server portion is now reporting correctly.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl get deploy -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME <span class="Apple-converted-space">    </span>READY <span class="Apple-converted-space">  </span>UP-TO-DATE <span class="Apple-converted-space">  </span>AVAILABLE <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">velero <span class="Apple-converted-space">  </span>1/1 <span class="Apple-converted-space">    </span>1<span class="Apple-converted-space">            </span>1 <span class="Apple-converted-space">          </span>4m38s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get rs -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME<span class="Apple-converted-space">                </span>DESIRED <span class="Apple-converted-space">  </span>CURRENT <span class="Apple-converted-space">  </span>READY <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">velero-845bfc6654 <span class="Apple-converted-space">  </span>1 <span class="Apple-converted-space">        </span>1 <span class="Apple-converted-space">        </span>1 <span class="Apple-converted-space">      </span>4m59s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get pods -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME<span class="Apple-converted-space">                      </span>READY <span class="Apple-converted-space">  </span>STATUS<span class="Apple-converted-space">    </span>RESTARTS <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">node-agent-f8qdp<span class="Apple-converted-space">          </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">          </span>5m5s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">velero-845bfc6654-69vqs <span class="Apple-converted-space">  </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">          </span>5m5s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get bsl -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME<span class="Apple-converted-space">      </span>PHASE <span class="Apple-converted-space">      </span>LAST VALIDATED <span class="Apple-converted-space">  </span>AGE <span class="Apple-converted-space">    </span>DEFAULT</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">default <span class="Apple-converted-space">  </span>Available <span class="Apple-converted-space">  </span>49s<span class="Apple-converted-space">              </span>5m22s <span class="Apple-converted-space">  </span>true</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$<strong> velero version</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Client:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>Version: v1.17.0_vmware.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>Git commit: 3172d9f99c3d501aad9ddfac8176d783f7692dce-modified</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Server:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>Version: v1.17.0_vmware.1</span></pre>
<h2>Create a sample workload to backup and restore</h2>
<p style="text-align: justify;">To test out Velero backup and restore, I am going to use a simple Pod and PersistentVolumeClaim (pvc) combination. The PVC will have to use one of the existing StorageClasses (sc) in the VKS cluster. The Pod will also mount the volume onto the /demo folder in the busybox container.</p>
<p style="text-align: justify;">As this is VKS on vSphere, the vSphere CSI driver is a necessary component for creating persistent volumes on vSphere storage. This will also mean that during the backup, Velero will request the creation of a CSI snapshot of the volume to backup the volume.  VKS clusters on vSphere have all of the necessary vSphere CSI components to achieve this.</p>
<p style="text-align: justify;">Here are the manifests and steps to create the simple app. First we create a namespace called cormac-ns, which is where our app will live. Then we get the StorageClasses, and then build the appropriate PVC manifest using one of the storage classes. Once the PVC is created, we can reference it as a Volume in the Pod.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ k<strong>ubectl create ns cormac-ns</strong>
namespace/cormac-ns created 


$ <strong>kubectl get sc</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME                                                              PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">sfo-w01-cl01-optimal-datastore-default-policy-raid1               csi.vsphere.vmware.com   Delete          Immediate              true                   25h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">sfo-w01-cl01-optimal-datastore-default-policy-raid1-latebinding   csi.vsphere.vmware.com   Delete          WaitForFirstConsumer   true                   25h</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>cat example-pvc-cormac-ns.yaml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">apiVersion: v1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kind: PersistentVolumeClaim</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">metadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  name: example-cormac-block-pvc</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  namespace: cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">spec:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  accessModes:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - ReadWriteOnce</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  resources:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    requests:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      storage: 5Gi</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  storageClassName: sfo-w01-cl01-optimal-datastore-default-policy-raid1</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl apply -f example-pvc-cormac-ns.yaml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">persistentvolumeclaim/example-cormac-block-pvc created</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get pvc -n cormac-ns -w</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME                       STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                                          VOLUMEATTRIBUTESCLASS   AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">example-cormac-block-pvc   Pending                                                                        sfo-w01-cl01-optimal-datastore-default-policy-raid1   &lt;unset&gt;                 4s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">example-cormac-block-pvc   Pending   pvc-85cf01bc-52fb-4bc1-a74f-58990b2988bb   0                         sfo-w01-cl01-optimal-datastore-default-policy-raid1   &lt;unset&gt;                 4s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">example-cormac-block-pvc   Bound     pvc-85cf01bc-52fb-4bc1-a74f-58990b2988bb   5Gi        RWO            sfo-w01-cl01-optimal-datastore-default-policy-raid1   &lt;unset&gt;                 5s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">

$ <strong>cat cormac-pod-with-volume.yaml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">apiVersion: v1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kind: Pod</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">metadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>name: cormac-pod-1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>namespace: cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">spec:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>securityContext:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>runAsUser: 1000</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>runAsGroup: 3000</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>fsGroup: 2000</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>supplementalGroups: [4000]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>containers:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>- name: busybox</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>image: "dockerhub.packages.vcfd.broadcom.net/busybox:latest"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>command: [ "sleep", "1000000" ]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>securityContext:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>allowPrivilegeEscalation: false</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>capabilities:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>drop: ["ALL"]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>runAsNonRoot: true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>runAsUser: 1000</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>seccompProfile:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>type: "RuntimeDefault"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>volumeMounts:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- mountPath: "/demo"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>name: demo-vol</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>volumes:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>- name: demo-vol</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>persistentVolumeClaim:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>claimName: example-cormac-block-pvc

</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl apply -f cormac-pod-with-volume.yaml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pod/cormac-pod-1 created</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get pods -n cormac-ns -w</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME <span class="Apple-converted-space">          </span>READY <span class="Apple-converted-space">  </span>STATUS<span class="Apple-converted-space">              </span>RESTARTS <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-pod-1 <span class="Apple-converted-space">  </span>0/1 <span class="Apple-converted-space">    </span>ContainerCreating <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">          </span>8s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-pod-1 <span class="Apple-converted-space">  </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">            </span>0<span class="Apple-converted-space">          </span>14s

</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl get pod,pvc -n cormac-ns</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME <span class="Apple-converted-space">              </span>READY <span class="Apple-converted-space">  </span>STATUS<span class="Apple-converted-space">    </span>RESTARTS <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pod/cormac-pod-1 <span class="Apple-converted-space">  </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">          </span>33s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME <span class="Apple-converted-space">                                            </span>STATUS <span class="Apple-converted-space">  </span>VOLUME <span class="Apple-converted-space">                                    </span>CAPACITY <span class="Apple-converted-space">  </span>ACCESS MODES <span class="Apple-converted-space">  </span>STORAGECLASS<span class="Apple-converted-space">                                          </span>VOLUMEATTRIBUTESCLASS <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">persistentvolumeclaim/example-cormac-block-pvc <span class="Apple-converted-space">  </span>Bound<span class="Apple-converted-space">    </span>pvc-85cf01bc-52fb-4bc1-a74f-58990b2988bb <span class="Apple-converted-space">  </span>5Gi<span class="Apple-converted-space">        </span>RWO<span class="Apple-converted-space">            </span>sfo-w01-cl01-optimal-datastore-default-policy-raid1 <span class="Apple-converted-space">  </span>&lt;unset&gt; <span class="Apple-converted-space">                </span>2m15s</span></pre>
<p style="text-align: justify;">We now have an application. If you so wish, you can use kubectl exec to access the Pod, and create files and directories in the <strong>/demo</strong> directory. You can then check if the data is recovered after a backup and restore. Let&#8217;s now see if we can backup and restore this &#8216;critical&#8217; application.</p>
<h2>Backup using Velero CLI</h2>
<p style="text-align: justify;">I will now initiate a backup. I do not want to backup the full VKS cluster, only  the namespace cormac-ns as this is where my app is running. After the backup has completed, I can use the suggested &#8216;<span style="font-family: 'courier new', courier, monospace; font-size: 12pt;">velero backup describe</span>&#8216; command to look at it in more detail.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>velero backup create cormac-backup-1 --include-namespaces cormac-ns --wait</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup request "cormac-backup-1" submitted successfully.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Waiting <b>for</b> backup to complete. You may safely press ctrl-c to stop waiting - your backup 
will continue <b>in</b> the background.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">......................................................................</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup completed with status: Completed. You may check <b>for</b> more information using the 
commands `velero backup describe cormac-backup-1` and `velero backup logs cormac-backup-1`.</span>


<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>velero backup describe cormac-backup-1</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Name:         cormac-backup-1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespace:    velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Labels:       velero.io/storage-location=default</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Annotations:  velero.io/resource-timeout=10m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/source-cluster-k8s-gitversion=v1.33.3+vmware.1-fips</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/source-cluster-k8s-major-version=1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/source-cluster-k8s-minor-version=33</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Phase:  Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespaces:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Included:  cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Excluded:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Resources:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Included cluster-scoped:    &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Excluded cluster-scoped:    volumesnapshotcontents.snapshot.storage.k8s.io</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Included namespace-scoped:  *</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Excluded namespace-scoped:  volumesnapshots.snapshot.storage.k8s.io</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Label selector:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Or label selector:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Storage Location:  default</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Velero-Native Snapshot PVs:    auto</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">File System Backup (Default):  false</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Snapshot Move Data:            true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Data Mover:                    velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">TTL:  720h0m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">CSISnapshotTimeout:    10m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">ItemOperationTimeout:  4h0m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Hooks:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup Format Version:  1.1.0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Started:    2026-01-14 13:42:45 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Completed:  2026-01-14 13:43:55 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Expiration:  2026-02-13 13:42:44 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Total items to be backed up:  65</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Items backed up:              65</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup Item Operations:  1 of 1 completed successfully, 0 failed (specify --details <b>for</b> more information)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup Volumes:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Velero-Native Snapshots: &lt;none included&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  CSI Snapshots:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    cormac-ns/example-cormac-block-pvc:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      Data Movement: included, specify --details <b>for</b> more information</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Pod Volume Backups: &lt;none included&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">HooksAttempted:  0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">HooksFailed:     0</span></pre>
<p style="text-align: justify;">Firstly, it looks like the backup has completed successfully. Secondly, it has indeed used CSI Snapshots, and moved the snapshot data to my backup storage location (S3 bucket). Note that this section of the output recommends using a <span style="font-family: 'courier new', courier, monospace;">&#8211;details</span> options to see more information above the data movement. Let&#8217;s run that now (note that I have snipped some of the output for conciseness).</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>velero backup describe cormac-backup-1 --details</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Name:         cormac-backup-1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespace:    velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Labels:       velero.io/storage-location=default</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Annotations:  velero.io/resource-timeout=10m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/source-cluster-k8s-gitversion=v1.33.3+vmware.1-fips</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/source-cluster-k8s-major-version=1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/source-cluster-k8s-minor-version=33</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Phase:  Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespaces:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Included:  cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Excluded:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Resources:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Included cluster-scoped:    &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Excluded cluster-scoped:    volumesnapshotcontents.snapshot.storage.k8s.io</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Included namespace-scoped:  *</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Excluded namespace-scoped:  volumesnapshots.snapshot.storage.k8s.io</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Label selector:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Or label selector:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Storage Location:  default</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Velero-Native Snapshot PVs:    auto</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">File System Backup (Default):  false</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Snapshot Move Data:            true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Data Mover:                    velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">TTL:  720h0m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">CSISnapshotTimeout:    10m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">ItemOperationTimeout:  4h0m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Hooks:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup Format Version:  1.1.0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Started:    2026-01-14 13:42:45 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Completed:  2026-01-14 13:43:55 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Expiration:  2026-02-13 13:42:44 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Total items to be backed up:  65</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Items backed up:              65</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup Item Operations:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Operation <b>for</b> persistentvolumeclaims cormac-ns/example-cormac-block-pvc:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Backup Item Action Plugin:  velero.io/csi-pvc-backupper</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Operation ID:               du-f577e717-58bf-453b-8de8-c5f3b866855e.85cf01bc-52fb-4bcd93615</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Items to Update:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">                           datauploads.velero.io velero/cormac-backup-1-mswhk</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Phase:                 Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Progress description:  Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Created:               2026-01-14 13:43:01 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Started:               2026-01-14 13:43:20 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Updated:               2026-01-14 13:43:49 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Resource List:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  data.packaging.carvel.dev/v1alpha1/Package:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/ako.kubernetes.vmware.com.1.13.4+vmware.1-vks.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cert-manager.kubernetes.vmware.com.1.17.2+vmware.2-vks.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cert-manager.kubernetes.vmware.com.1.18.2+vmware.2-vks.2</span>
<span style="font-family: courier new, courier, monospace;"><span style="font-size: 13.3333px;">&lt;--snip--&gt;</span></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  data.packaging.carvel.dev/v1alpha1/PackageMetadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/ako.kubernetes.vmware.com</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cert-manager.kubernetes.vmware.com</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cluster-autoscaler.kubernetes.vmware.com</span>
<span style="font-family: courier new, courier, monospace;"><span style="font-size: 13.3333px;">&lt;--snip--&gt;</span></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  v1/ConfigMap:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/kube-root-ca.crt</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  v1/Event:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cormac-pod-1.188a9ca69877b51d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cormac-pod-1.188a9ca70666357e</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cormac-pod-1.188a9ca9254c4de3</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cormac-pod-1.188a9ca963e97572</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cormac-pod-1.188a9ca96cda3faf</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cormac-pod-1.188a9ca974af3290</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/example-cormac-block-pvc.188a9c7c780cab0a</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/example-cormac-block-pvc.188a9c8eb1bdf906</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/example-cormac-block-pvc.188a9c8eb1e499a8</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/example-cormac-block-pvc.188a9c8fc1b87d38</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  v1/Namespace:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  v1/PersistentVolume:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - pvc-85cf01bc-52fb-4bc1-a74f-58990b2988bb</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  v1/PersistentVolumeClaim:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/example-cormac-block-pvc</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  v1/Pod:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/cormac-pod-1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  v1/ServiceAccount:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - cormac-ns/default</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup Volumes:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Velero-Native Snapshots: &lt;none included&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  CSI Snapshots:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    cormac-ns/example-cormac-block-pvc:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      Data Movement:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">        Operation ID: du-f577e717-58bf-453b-8de8-c5f3b866855e.85cf01bc-52fb-4bcd93615</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">        Data Mover: velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">        Uploader Type: kopia</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">        Moved data Size (bytes): 0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">        Result: succeeded</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Pod Volume Backups: &lt;none included&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">HooksAttempted:  0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">HooksFailed:     0
</span></pre>
<p style="text-align: justify;">Now we can see even more details about the data movement. We can see that it is using the in-built velero data mover which is using <a href="https://github.com/kopia/kopia/blob/master/README.md" target="_blank" rel="noopener">Kopia</a>. And we can in fact see more details about the snapshot and data movement by querying some other custom resources, as we will see next.</p>
<h3>Backup: Under the covers</h3>
<p style="text-align: justify;">The following commands will examine some of the snapshot details, such as the snapshot location and class. You can add a &#8220;<em>-o yaml</em>&#8221; to the <em>kubectl get</em> commands, or use <em>kubectl describe</em>, to see more details. But it is the &#8220;dataupload&#8221; Custom Resource (CR) that is most useful. This is what ties the volume and resulting CSI snapshot tot he data mover and backup storage location, and if there are any issues with that operation, this is the CR to check.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl get volumesnapshotlocations -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME<span class="Apple-converted-space">      </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">default <span class="Apple-converted-space">  </span>22m</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get volumesnapshotclasses</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME <span class="Apple-converted-space">                        </span>DRIVER <span class="Apple-converted-space">                  </span>DELETIONPOLICY <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">volumesnapshotclass-delete <span class="Apple-converted-space">  </span>csi.vsphere.vmware.com <span class="Apple-converted-space">  </span>Delete <span class="Apple-converted-space">          </span>80m</span>


<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl describe datauploads cormac-backup-1-mswhk -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Name:         cormac-backup-1-mswhk</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespace:    velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Labels:       velero.io/async-operation-id=du-f577e717-58bf-453b-8de8-c5f3b866855e.85cf01bc-52fb-4bcd93615</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/backup-name=cormac-backup-1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/backup-uid=f577e717-58bf-453b-8de8-c5f3b866855e</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">              velero.io/pvc-uid=85cf01bc-52fb-4bc1-a74f-58990b2988bb</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Annotations:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">API Version:  velero.io/v2alpha1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Kind:         DataUpload</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Metadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Creation Timestamp:  2026-01-14T13:43:01Z</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Generate Name:       cormac-backup-1-</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Generation:          5</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Owner References:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    API Version:     velero.io/v1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Controller:      true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Kind:            Backup</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Name:            cormac-backup-1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    UID:             f577e717-58bf-453b-8de8-c5f3b866855e</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Resource Version:  12767</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  UID:               f4da9b85-db30-4df7-9ebe-f61148c71c7c</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Spec:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Backup Storage Location:  default</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Csi Snapshot:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Driver:           csi.vsphere.vmware.com</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Snapshot Class:   volumesnapshotclass-delete</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Storage Class:    sfo-w01-cl01-optimal-datastore-default-policy-raid1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Volume Snapshot:  velero-example-cormac-block-pvc-f968m</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Operation Timeout:  10m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Snapshot Type:      CSI</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Source Namespace:   cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Source PVC:         example-cormac-block-pvc</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Status:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Accepted By Node:      kubernetes-cluster-dkpp-kubernetes-cluster-dkpp-np-pk3w-smkvs46</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Accepted Timestamp:    2026-01-14T13:43:01Z</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Completion Timestamp:  2026-01-14T13:43:49Z</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Node:                  kubernetes-cluster-dkpp-kubernetes-cluster-dkpp-np-pk3w-smkvs46</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Node OS:               linux</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Path:                  /f4da9b85-db30-4df7-9ebe-f61148c71c7c</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Phase:                 Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Progress:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Snapshot ID:      4ff960c3f4d2f55253926f36a66d5e50</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Start Timestamp:  2026-01-14T13:43:20Z</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Events:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Type    Reason               Age                  From                   Message</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  ----    ------               ----                 ----                   -------</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Normal  Data-Path-Started    4m2s                 cormac-backup-1-mswhk  Data path <b>for</b> cormac-backup-1-mswhk started</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Normal  Data-Path-Progress   4m2s (x2 over 4m2s)  cormac-backup-1-mswhk  {}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Normal  Data-Path-Completed  4m1s                 cormac-backup-1-mswhk  {"snapshotID":"4ff960c3f4d2f55253926f36a66d5e50","emptySnapshot":false,"source":{"byPath":"/f4da9b85-db30-4df7-9ebe-f61148c71c7c","volumeMode":"Filesystem"}}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Normal  Data-Path-Stopped    4m1s                 cormac-backup-1-mswhk  Data path <b>for</b> cormac-backup-1-mswhk stopped</span></pre>
<p style="text-align: justify;">This looks to have been successful. The final step of this post is to ensure we can do a successful restore of the application that we have just backed up. Let&#8217;s now do that.</p>
<h2>Restore using Velero CLI</h2>
<p style="text-align: justify;">Start by deleting the &#8220;cormac-ns&#8221; namespace that was just backed up. It also deletes the Pod, PVC and resulting PV.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl delete ns cormac-ns</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">namespace "cormac-ns" deleted</span>


<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl get pv</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">No resources found</span></pre>
<p style="text-align: justify;">Begin the velero restore, using the <span style="font-family: 'courier new', courier, monospace; font-size: 12pt;">&#8211;backup</span> command to identify which backup to restore from. Again, we can use the <span style="font-family: 'courier new', courier, monospace; font-size: 12pt;">describe</span> command to check the status of the restore.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>velero restore create cormac-restore-260114 --from-backup cormac-backup-1</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Restore request "cormac-restore-260114" submitted successfully.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Run `velero restore describe cormac-restore-260114` or `velero restore logs cormac-restore-260114` 
<b>for</b> more details.

</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>velero restore describe cormac-restore-260114</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Name: <span class="Apple-converted-space">        </span>cormac-restore-260114</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespace:<span class="Apple-converted-space">    </span>velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Labels: <span class="Apple-converted-space">      </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Annotations:<span class="Apple-converted-space">  </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Phase: <span class="Apple-converted-space">                      </span>Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Total items to be restored:<span class="Apple-converted-space">  </span>56</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Items restored:<span class="Apple-converted-space">              </span>56</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Started:<span class="Apple-converted-space">    </span>2026-01-14 13:57:37 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Completed:<span class="Apple-converted-space">  </span>2026-01-14 13:58:06 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Warnings:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Velero: <span class="Apple-converted-space">    </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Cluster:<span class="Apple-converted-space">    </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Namespaces:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>cormac-ns:<span class="Apple-converted-space">  </span>could not restore, ConfigMap:kube-root-ca.crt already exists. Warning: the in-cluster version is different than the backed-up version</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Backup:<span class="Apple-converted-space">  </span>cormac-backup-1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespaces:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Included:<span class="Apple-converted-space">  </span>all namespaces found <b>in</b> the backup</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Excluded:<span class="Apple-converted-space">  </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Resources:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Included:<span class="Apple-converted-space">        </span>*</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Excluded:<span class="Apple-converted-space">        </span>nodes, events, events.events.k8s.io, backups.velero.io, restores.velero.io, resticrepositories.velero.io, csinodes.storage.k8s.io, volumeattachments.storage.k8s.io, backuprepositories.velero.io</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>Cluster-scoped:<span class="Apple-converted-space">  </span>auto</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Namespace mappings:<span class="Apple-converted-space">  </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Label selector:<span class="Apple-converted-space">  </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Or label selector:<span class="Apple-converted-space">  </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Restore PVs:<span class="Apple-converted-space">  </span>auto</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">CSI Snapshot Restores:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-ns/example-cormac-block-pvc:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>Data Movement: specify --details <b>for</b> more information</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Existing Resource Policy: <span class="Apple-converted-space">  </span>&lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">ItemOperationTimeout: <span class="Apple-converted-space">      </span>4h0m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Preserve Service NodePorts:<span class="Apple-converted-space">  </span>auto</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Uploader config:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Restore Item Operations:<span class="Apple-converted-space">  </span>1 of 1 completed successfully, 0 failed (specify --details <b>for</b> more information)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">HooksAttempted: <span class="Apple-converted-space">  </span>0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">HooksFailed:<span class="Apple-converted-space">      </span>0</span></pre>
<p style="text-align: justify;">And just like we saw with the backup, the Data Movement details can be observed if you use the <span style="font-family: 'courier new', courier, monospace; font-size: 12pt;">&#8211;details</span> options with this command. This will include the following additional details in the output, as well as the list of resources that were restored:</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Restore PVs:  auto</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">CSI Snapshot Restores:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  cormac-ns/example-cormac-block-pvc:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Data Movement:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      Operation ID: dd-90ca852c-7601-4c70-bd8e-8df9e07c4a31.85cf01bc-52fb-4bcba3ea6</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      Data Mover: velero</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      Uploader Type: kopia</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Existing Resource Policy:   &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">ItemOperationTimeout:       4h0m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Preserve Service NodePorts:  auto</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Uploader config:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Restore Item Operations:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  Operation <b>for</b> persistentvolumeclaims cormac-ns/example-cormac-block-pvc:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Restore Item Action Plugin:  velero.io/csi-pvc-restorer</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Operation ID:                dd-90ca852c-7601-4c70-bd8e-8df9e07c4a31.85cf01bc-52fb-4bcba3ea6</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Phase:                       Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Progress description:        Completed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Created:                     2026-01-14 13:57:38 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Started:                     2026-01-14 13:57:46 +0000 UTC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    Updated:                     2026-01-14 13:58:01 +0000 UTC</span></pre>
<p style="text-align: justify;">The restore appears to have been successful. But lets verify using some <strong>kubectl</strong> commands.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl get ns cormac-ns</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME        STATUS   AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-ns   Active   2m22s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get pod,pvc -n cormac-ns</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME               READY   STATUS    RESTARTS   AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pod/cormac-pod-1   1/1     Running   0          2m32s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME                                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                                          VOLUMEATTRIBUTESCLASS   AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">persistentvolumeclaim/example-cormac-block-pvc   Bound    pvc-cf66b8fc-adc1-43e5-8a81-1fbac9e21e9a   5Gi        RWO            sfo-w01-cl01-optimal-datastore-default-policy-raid1   &lt;unset&gt;                 2m32s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
$ <strong>kubectl get pv</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                STORAGECLASS                                          VOLUMEATTRIBUTESCLASS   REASON   AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pvc-cf66b8fc-adc1-43e5-8a81-1fbac9e21e9a   5Gi        RWO            Delete           Bound    cormac-ns/example-cormac-block-pvc   sfo-w01-cl01-optimal-datastore-default-policy-raid1   &lt;unset&gt;                          2m37s</span></pre>
<p style="text-align: justify;">Success. It would appear as if everything has restored correctly. If there are issues with a restore, there are some useful CRs available once again.</p>
<h3>Restore: Under the covers</h3>
<p style="text-align: justify;">Just like we saw with the backup, the following CRs, specifically <span style="font-family: 'courier new', courier, monospace; font-size: 12pt;">downloadrequests</span> and <span style="font-family: 'courier new', courier, monospace; font-size: 12pt;">datadownlaods</span> can be useful to query if there are some issue with a Velero restore operation on a VKS cluster using CSI snapshots.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace;">$ <strong>kubectl get downloadrequests -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace;">NAME                                                         AGE</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-01fc60e9-d8c6-4efc-81f2-06f3e545272d   4m10s</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-05bd4b4e-5ad6-4e52-a261-f4b89fb0bae3   4m10s</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-2eba4517-ca71-4152-bb2a-fda141de8ed7   5m48s</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-7bbf1ae8-5e65-4a5b-86e7-54334b3ddd0a   4m45s</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-b926fbd2-8234-45c9-af1e-cd229d937504   4m10s</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-debbab74-3e50-449e-95b1-ccbe4415f8c9   5m48s</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-e133ec6f-6c8e-4951-8611-ffce0ee8ba8f   4m45s</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-fd6ed61e-d99e-43e1-a3db-4e2c8644242f   4m11s</span>

<span style="font-family: 'courier new', courier, monospace;">
$ <strong>kubectl describe downloadrequests cormac-restore-260114-01fc60e9-d8c6-4efc-81f2-06f3e545272d  -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace;">Name:         cormac-restore-260114-01fc60e9-d8c6-4efc-81f2-06f3e545272d</span>
<span style="font-family: 'courier new', courier, monospace;">Namespace:    velero</span>
<span style="font-family: 'courier new', courier, monospace;">Labels:       &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace;">Annotations:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace;">API Version:  velero.io/v1</span>
<span style="font-family: 'courier new', courier, monospace;">Kind:         DownloadRequest</span>
<span style="font-family: 'courier new', courier, monospace;">Metadata:</span>
<span style="font-family: 'courier new', courier, monospace;">  Creation Timestamp:  2026-01-14T13:59:30Z</span>
<span style="font-family: 'courier new', courier, monospace;">  Generation:          2</span>
<span style="font-family: 'courier new', courier, monospace;">  Resource Version:    15170</span>
<span style="font-family: 'courier new', courier, monospace;">  UID:                 db0c147b-7b67-4e0d-92f7-6ff12105b992</span>
<span style="font-family: 'courier new', courier, monospace;">Spec:</span>
<span style="font-family: 'courier new', courier, monospace;">  Target:</span>
<span style="font-family: 'courier new', courier, monospace;">    Kind:  RestoreVolumeInfo</span>
<span style="font-family: 'courier new', courier, monospace;">    Name:  cormac-restore-260114</span>
<span style="font-family: 'courier new', courier, monospace;">Status:</span>
<span style="font-family: 'courier new', courier, monospace;">  Download URL:  https://minio.rainpole.io:9000/velero-backups/restores/cormac-restore-260114/cormac-restore-260114-volumeinfo.json.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=admin%2F20260114%2Fminio%2Fs3%2Faws4_request&amp;X-Amz-Date=20260114T135930Z&amp;X-Amz-Expires=600&amp;X-Amz-SignedHeaders=host&amp;x-id=GetObject&amp;X-Amz-Signature=ddba7b633a6362e9ca648c301b7c5bb22fbf774230836c9ebe146f6c63a56ff5</span>
<span style="font-family: 'courier new', courier, monospace;">  Expiration:    2026-01-14T14:09:30Z</span>
<span style="font-family: 'courier new', courier, monospace;">  Phase:         Processed</span>
<span style="font-family: 'courier new', courier, monospace;">Events:          &lt;none&gt;
</span>
<span style="font-family: 'courier new', courier, monospace;">
$ <strong>kubectl get datadownloads  -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace;">NAME                          STATUS      STARTED   BYTES DONE   TOTAL BYTES   STORAGE LOCATION   AGE     NODE</span>
<span style="font-family: 'courier new', courier, monospace;">cormac-restore-260114-v65f8   Completed   6m18s                                default            6m26s   kubernetes-cluster-dkpp-kubernetes-cluster-dkpp-np-pk3w-smkvs46</span>
<span style="font-family: 'courier new', courier, monospace;">

$ <strong>kubectl describe datadownloads cormac-restore-260114-v65f8  -n velero</strong></span>
<span style="font-family: 'courier new', courier, monospace;">Name:         cormac-restore-260114-v65f8</span>
<span style="font-family: 'courier new', courier, monospace;">Namespace:    velero</span>
<span style="font-family: 'courier new', courier, monospace;">Labels:       velero.io/async-operation-id=dd-90ca852c-7601-4c70-bd8e-8df9e07c4a31.85cf01bc-52fb-4bcba3ea6</span>
<span style="font-family: 'courier new', courier, monospace;">              velero.io/restore-name=cormac-restore-260114</span>
<span style="font-family: 'courier new', courier, monospace;">              velero.io/restore-uid=90ca852c-7601-4c70-bd8e-8df9e07c4a31</span>
<span style="font-family: 'courier new', courier, monospace;">Annotations:  &lt;none&gt;</span>
<span style="font-family: 'courier new', courier, monospace;">API Version:  velero.io/v2alpha1</span>
<span style="font-family: 'courier new', courier, monospace;">Kind:         DataDownload</span>
<span style="font-family: 'courier new', courier, monospace;">Metadata:</span>
<span style="font-family: 'courier new', courier, monospace;">  Creation Timestamp:  2026-01-14T13:57:38Z</span>
<span style="font-family: 'courier new', courier, monospace;">  Generate Name:       cormac-restore-260114-</span>
<span style="font-family: 'courier new', courier, monospace;">  Generation:          5</span>
<span style="font-family: 'courier new', courier, monospace;">  Owner References:</span>
<span style="font-family: 'courier new', courier, monospace;">    API Version:     velero.io/v1</span>
<span style="font-family: 'courier new', courier, monospace;">    Controller:      true</span>
<span style="font-family: 'courier new', courier, monospace;">    Kind:            Restore</span>
<span style="font-family: 'courier new', courier, monospace;">    Name:            cormac-restore-260114</span>
<span style="font-family: 'courier new', courier, monospace;">    UID:             90ca852c-7601-4c70-bd8e-8df9e07c4a31</span>
<span style="font-family: 'courier new', courier, monospace;">  Resource Version:  14953</span>
<span style="font-family: 'courier new', courier, monospace;">  UID:               1c8f7949-b20e-4878-96b8-46a7859423cf</span>
<span style="font-family: 'courier new', courier, monospace;">Spec:</span>
<span style="font-family: 'courier new', courier, monospace;">  Backup Storage Location:  default</span>
<span style="font-family: 'courier new', courier, monospace;">  Data Mover Config:</span>
<span style="font-family: 'courier new', courier, monospace;">    Write Sparse Files:  false</span>
<span style="font-family: 'courier new', courier, monospace;">  Node OS:               linux</span>
<span style="font-family: 'courier new', courier, monospace;">  Operation Timeout:     10m0s</span>
<span style="font-family: 'courier new', courier, monospace;">  Snapshot ID:           4ff960c3f4d2f55253926f36a66d5e50</span>
<span style="font-family: 'courier new', courier, monospace;">  Source Namespace:      cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace;">  Target Volume:</span>
<span style="font-family: 'courier new', courier, monospace;">    Namespace:  cormac-ns</span>
<span style="font-family: 'courier new', courier, monospace;">    Pv:</span>
<span style="font-family: 'courier new', courier, monospace;">    Pvc:        example-cormac-block-pvc</span>
<span style="font-family: 'courier new', courier, monospace;">Status:</span>
<span style="font-family: 'courier new', courier, monospace;">  Accepted By Node:      kubernetes-cluster-dkpp-kubernetes-cluster-dkpp-np-pk3w-smkvs46</span>
<span style="font-family: 'courier new', courier, monospace;">  Accepted Timestamp:    2026-01-14T13:57:38Z</span>
<span style="font-family: 'courier new', courier, monospace;">  Completion Timestamp:  2026-01-14T13:58:01Z</span>
<span style="font-family: 'courier new', courier, monospace;">  Node:                  kubernetes-cluster-dkpp-kubernetes-cluster-dkpp-np-pk3w-smkvs46</span>
<span style="font-family: 'courier new', courier, monospace;">  Phase:                 Completed</span>
<span style="font-family: 'courier new', courier, monospace;">  Progress:</span>
<span style="font-family: 'courier new', courier, monospace;">  Start Timestamp:  2026-01-14T13:57:46Z</span>
<span style="font-family: 'courier new', courier, monospace;">Events:</span>
<span style="font-family: 'courier new', courier, monospace;">  Type    Reason               Age              From                         Message</span>
<span style="font-family: 'courier new', courier, monospace;">  ----    ------               ----             ----                         -------</span>
<span style="font-family: 'courier new', courier, monospace;">  Normal  Data-Path-Started    7m               cormac-restore-260114-v65f8  Data path <b>for</b> cormac-restore-260114-v65f8 started</span>
<span style="font-family: 'courier new', courier, monospace;">  Normal  Data-Path-Progress   7m (x2 over 7m)  cormac-restore-260114-v65f8  {}</span>
<span style="font-family: 'courier new', courier, monospace;">  Normal  Data-Path-Completed  7m               cormac-restore-260114-v65f8  {"target":{"byPath":"/1c8f7949-b20e-4878-96b8-46a7859423cf","volumeMode":"Filesystem"}}</span>
<span style="font-family: 'courier new', courier, monospace;">  Normal  Data-Path-Stopped    7m               cormac-restore-260114-v65f8  Data path <b>for</b> cormac-restore-260114-v65f8 stopped</span></pre>
<p style="text-align: justify;">And that completes the post. Hopefully this has demonstrated that Velero continues to be a very powerful command line tool for backing up and restoring Kubernetes workloads, not just vSphere Kubernetes Service (VKS) clusters. And if you have VCF Automation, remember that you do not need to do this manual approach, but instead you can use the VKS Management Data Protection tool via the UI.</p>
<p>The post <a href="https://cormachogan.com/2026/01/16/velero-revisited-manually-backing-up-vks-clusters-using-velero/">Velero Revisited &#8211; Manually backing up VKS clusters using Velero</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cormachogan.com/2026/01/16/velero-revisited-manually-backing-up-vks-clusters-using-velero/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32731</post-id>	</item>
		<item>
		<title>A first look at VKSM Data Protection (VKSM DP)</title>
		<link>https://cormachogan.com/2026/01/14/a-first-look-at-vksm-data-protection-vksm-dp/</link>
					<comments>https://cormachogan.com/2026/01/14/a-first-look-at-vksm-data-protection-vksm-dp/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 14:00:57 +0000</pubDate>
				<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Namespaces]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[vSphere]]></category>
		<category><![CDATA[vSphere Kubernetes Service (VKS)]]></category>
		<category><![CDATA[data protection]]></category>
		<category><![CDATA[VCF]]></category>
		<category><![CDATA[VCF Automation]]></category>
		<category><![CDATA[VCFA]]></category>
		<category><![CDATA[Velero]]></category>
		<category><![CDATA[VKS]]></category>
		<category><![CDATA[VKSM]]></category>
		<category><![CDATA[vSphere Kubernetes Service]]></category>
		<category><![CDATA[vSphere Kubernetes Service Management]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32694</guid>

					<description><![CDATA[<p>One of the new features in VCF Automation version 9.0.1 is a feature called vSphere Kubernetes Service Management, or VKSM for short. This gives users access to many additional capabilities, such as Data Protection, Policy Management and Add-on Management to improve the resiliency, security, and functionality of your VKS clusters. In this post, I wanted to take a look at the Data Protection capability (VKSM DP for short), as this is something I looked at quite closely in the past. To demonstrate, we will first configure a backup location, then enable Data Protection, then test a backup and restore of&#8230;</p>
<p>The post <a href="https://cormachogan.com/2026/01/14/a-first-look-at-vksm-data-protection-vksm-dp/">A first look at VKSM Data Protection (VKSM DP)</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignleft wp-image-32627" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?resize=150%2C150&#038;ssl=1" alt="" width="150" height="150" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?w=400&amp;ssl=1 400w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?resize=150%2C150&amp;ssl=1 150w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>One of the new features in VCF Automation version 9.0.1 is a feature called vSphere Kubernetes Service Management, or VKSM for short. This gives users access to many additional capabilities, such as Data Protection, Policy Management and Add-on Management to improve the resiliency, security, and functionality of your VKS clusters. In this post, I wanted to take a look at the Data Protection capability (VKSM DP for short), as this is something I looked at quite closely in the past. To demonstrate, we will first configure a backup location, then enable Data Protection, then test a backup and restore of a namespace in a VKS cluster.</p>
<p style="text-align: justify;">First of all, to get access to the new capabilities, you need to be logged in to the VCF Automation Organization Portal. From there, navigate to the Manage &amp; Govern section. Select Kubernetes Management under VCF Services in the left hand navigation pane, then select clusters and this will reveal which VKS clusters are deployed. In this example, there is only one. The fact that it appears here suggests that VKSM has already discovered this cluster and has added the appropriate add-ons to allow it to be managed from VCF Automation. It is in a Healthy and Ready state, which is obviously good. This view alone, when you have many, many VKS clusters, can really help determine the status of your VKS estate at a glance.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32695 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?resize=769%2C230&#038;ssl=1" alt="" width="769" height="230" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?resize=1024%2C306&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?resize=300%2C90&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?resize=768%2C230&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?resize=1536%2C459&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?resize=769%2C230&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Kubernetes-Management.png?w=1608&amp;ssl=1 1608w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>Initial Setup</h2>
<p style="text-align: justify;">Initially you will find that Data Protection is not enabled on your VKS cluster. To enable Data Protection, you will need to have access to an S3 compatible object store bucket as this is where Data Protection sends the backup data. To enable Data Protection, click on the link highlighted below.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-Kubernetes-Management-Enable-Data-Protection.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32696" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-Kubernetes-Management-Enable-Data-Protection.png?resize=769%2C377&#038;ssl=1" alt="" width="769" height="377" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-Kubernetes-Management-Enable-Data-Protection.png?resize=1024%2C502&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-Kubernetes-Management-Enable-Data-Protection.png?resize=300%2C147&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-Kubernetes-Management-Enable-Data-Protection.png?resize=768%2C377&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-Kubernetes-Management-Enable-Data-Protection.png?resize=769%2C377&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-Kubernetes-Management-Enable-Data-Protection.png?w=1508&amp;ssl=1 1508w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">When you enable data protection, this popup appears. VKSM DP uses Velero to provide backup and restore functionality. Backups can use both File System Backup (FSB) and CSI snapshots. Later, we will see how we can choose between the different backup methods for volumes. Click on Enable to continue.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/2.-Volume-Backup-Support.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32697 size-full" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/2.-Volume-Backup-Support.png?resize=461%2C300&#038;ssl=1" alt="" width="461" height="300" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/2.-Volume-Backup-Support.png?w=461&amp;ssl=1 461w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/2.-Volume-Backup-Support.png?resize=300%2C195&amp;ssl=1 300w" sizes="auto, (max-width: 461px) 100vw, 461px" /></a></p>
<p style="text-align: justify;">Once Data Protection has been enabled, you will see a new Data Protection tab for the cluster. You will also see a new data-protection agent/extension in the health view. Lastly, you will notice a warning about a missing backup target. This is the S3 bucket mentioned earlier. We will need to create a set of credentials for this target, as well as configure the target.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-Message-to-create-backup-target.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32699" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-Message-to-create-backup-target.png?resize=769%2C396&#038;ssl=1" alt="" width="769" height="396" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-Message-to-create-backup-target.png?resize=1024%2C527&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-Message-to-create-backup-target.png?resize=300%2C154&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-Message-to-create-backup-target.png?resize=768%2C395&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-Message-to-create-backup-target.png?resize=769%2C396&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-Message-to-create-backup-target.png?w=1509&amp;ssl=1 1509w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">A similar, related message about missing credentials is seen if you try to configure the target location without first creating some credentials. Create the credentials by navigating to Configurations page, shown below. There are two configurations here &#8211; Credentials and Target Locations. Start with creating a new set of credentials.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-Message-to-create-an-account.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32700" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-Message-to-create-an-account.png?resize=769%2C348&#038;ssl=1" alt="" width="769" height="348" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-Message-to-create-an-account.png?resize=1024%2C464&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-Message-to-create-an-account.png?resize=300%2C136&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-Message-to-create-an-account.png?resize=768%2C348&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-Message-to-create-an-account.png?resize=769%2C348&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-Message-to-create-an-account.png?w=1504&amp;ssl=1 1504w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">The account credentials should contain an access key and secret key to allow Velero to access the S3 bucket. This is so that it can send the file backup data and potentially the CSI snapshot data, if this method is chosen for volume backups. More on this when we take a backup.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-Create-account-credential.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32701" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-Create-account-credential.png?resize=769%2C240&#038;ssl=1" alt="" width="769" height="240" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-Create-account-credential.png?resize=1024%2C320&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-Create-account-credential.png?resize=300%2C94&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-Create-account-credential.png?resize=768%2C240&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-Create-account-credential.png?resize=769%2C240&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-Create-account-credential.png?w=1510&amp;ssl=1 1510w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">With the credential created, we can now begin to create the backup target. First step is to provide the credentials for the backup target which we just created in the previous step.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-Create-target-location-credenital.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32702" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-Create-target-location-credenital.png?resize=769%2C333&#038;ssl=1" alt="" width="769" height="333" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-Create-target-location-credenital.png?resize=1024%2C443&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-Create-target-location-credenital.png?resize=300%2C130&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-Create-target-location-credenital.png?resize=768%2C332&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-Create-target-location-credenital.png?resize=769%2C333&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-Create-target-location-credenital.png?w=1505&amp;ssl=1 1505w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">We then begin providing details about the storage provider and bucket. In this case, I am using a MinIO object store, but any compatible S3 API bucket should suffice.  Because I have TLS enabled on MinIO, I am providing a Certificate Authority from the MinIO server to that trust can be established to it by VKSM DP / Velero .</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/9.-bucket-provider-details.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32703" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/9.-bucket-provider-details.png?resize=769%2C667&#038;ssl=1" alt="" width="769" height="667" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/9.-bucket-provider-details.png?resize=1024%2C888&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/9.-bucket-provider-details.png?resize=300%2C260&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/9.-bucket-provider-details.png?resize=768%2C666&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/9.-bucket-provider-details.png?resize=769%2C667&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/9.-bucket-provider-details.png?w=1059&amp;ssl=1 1059w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Next, from my list of VKS clusters, I select which ones are allowed to use this backup target. As I only have a single VKS, I only choose one in this example. Note that as you create further VKS clusters, you will also need to navigate to this point to assign your new cluster to the existing backup target location to allow it to use VKSM DP.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10.-Assign-VKS-clusters-to-backup-target.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-full wp-image-32704" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10.-Assign-VKS-clusters-to-backup-target.png?resize=769%2C562&#038;ssl=1" alt="" width="769" height="562" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10.-Assign-VKS-clusters-to-backup-target.png?w=997&amp;ssl=1 997w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10.-Assign-VKS-clusters-to-backup-target.png?resize=300%2C219&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10.-Assign-VKS-clusters-to-backup-target.png?resize=768%2C561&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/10.-Assign-VKS-clusters-to-backup-target.png?resize=769%2C562&amp;ssl=1 769w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">After giving the backup target a name, I save it. The backup target is now successfully configured.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32705" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?resize=769%2C237&#038;ssl=1" alt="" width="769" height="237" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?resize=1024%2C316&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?resize=300%2C92&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?resize=768%2C237&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?resize=1536%2C473&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?resize=769%2C237&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/12.-Target-location-configured.png?w=1603&amp;ssl=1 1603w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Data Protection is now available on my VKS cluster.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32706" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled-1024x468.png?resize=769%2C351&#038;ssl=1" alt="" width="769" height="351" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled.png?resize=1024%2C468&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled.png?resize=300%2C137&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled.png?resize=768%2C351&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled.png?resize=1536%2C702&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled.png?resize=769%2C351&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/13.-Data-Protection-enabled.png?w=1604&amp;ssl=1 1604w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">This completes the setup. Let&#8217;s now try some backup and restore operations.</p>
<h2>Create a stateful app on the VKS cluster</h2>
<p style="text-align: justify;">To provide something useful for the backup and restore, I made a very simple Pod and PVC using the below manifests, and deployed them into a new namespace in the VKS cluster called cormac-ns. Obviously this is a very simple example, as you can use VKSM DP to backup the whole of the VKS cluster. However, this simple app is just to show the backup and restore functionality in a way that is easy to follow. I won&#8217;t delve into describing the contents of each manifest. There is plenty of K8s documentation online that describe this already.</p>
<p class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">apiVersion: v1</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kind: PersistentVolumeClaim</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">metadata:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>name: cormac-block-pvc</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>namespace: cormac-ns</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">spec:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"> accessModes:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>&#8211; ReadWriteOnce</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>resources:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>requests:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>storage: 5Gi</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>storageClassName: vsan-default-storage-policy<br />
&#8212;</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">apiVersion: v1</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kind: Pod</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">metadata:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>name: cormac-pod</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>namespace: cormac-ns</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">spec:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>securityContext:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>runAsUser: 1000</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>runAsGroup: 3000</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>fsGroup: 2000</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>supplementalGroups: [4000]</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>containers:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>&#8211; name: busybox</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>image: &#8220;busybox:latest&#8221;</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>command: [ &#8220;sleep&#8221;, &#8220;1000000&#8221; ]</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>securityContext:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>allowPrivilegeEscalation: false</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>capabilities:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>drop: [&#8220;ALL&#8221;]</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>runAsNonRoot: true</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>runAsUser: 1000</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>seccompProfile:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>type: &#8220;RuntimeDefault&#8221;</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>volumeMounts:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>&#8211; mountPath: &#8220;/demo&#8221;</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>name: demo-vol</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>volumes:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>&#8211; name: demo-vol</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>persistentVolumeClaim:</span><br />
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>claimName: cormac-block-pvc</span></p>
<p style="text-align: justify;">Apply these manifests, and if you wish, use the <em>kubectl exec </em>onto the pod and create some files in the /demo folder which is where the volume has been mounted to.</p>
<h2>VKSM DP Backup</h2>
<p style="text-align: justify;">Using KSM Data Protection, I can now initiate a backup. The first question that you are prompted with is to select the object or objects that you wish to backup. This could be the whole VKS cluster, a namespace, or a set of objects identified by a selector. In this case, I went with a single namespace backup, cormac-ns.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32708" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?resize=769%2C423&#038;ssl=1" alt="" width="769" height="423" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?resize=1024%2C563&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?resize=300%2C165&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?resize=768%2C423&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?resize=1536%2C845&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?resize=769%2C423&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/1.-what-to-backup.png?w=1603&amp;ssl=1 1603w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Now comes the interesting part which is determining &#8220;how&#8221; to do the backup. There are two options for the File Share Backup (FSB), opt-in and opt-out. If you choose FSB Opt-in, then you have to add some special annotation to the volumes (i.e., Opt-in) if you WANT them to be backed up by FSB. If you choose FSB Opt-out, again, you have add special annotations (i.e., Opt-out) if you DO NOT WANT the volumes to be backed up by FSB. Thus, if you want all volumes to be backed up using the CSI snapshot method, select both &#8220;Use FSB Opt-in approach&#8221; and &#8220;Use CSI Snapshot backup&#8221; as shown below. If no FSB annotations are added to any volumes, then CSI will be used for all volumes. See <a class="external-link" href="https://velero.io/docs/v1.10/file-system-backup/#using-the-opt-out-approach">https://velero.io/docs/v1.10/file-system-backup/#using-the-opt-out-approach </a>for more information on annotations. Note that you are annotating with the name of the volume as seen by the Pod, not the actual PVC name. The &#8220;do not meet prerequisites for CSI snapshot&#8221; is a warning and can be ignored in as VKS Clusters deployed via VCF Automation should automatically have all of the necessary components in place. However, there is a link provided to the documentation where you can verify that the pre-requisites are indeed being met.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Screenshot-2026-01-13-at-11.24.59.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32711" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Screenshot-2026-01-13-at-11.24.59.png?resize=769%2C451&#038;ssl=1" alt="" width="769" height="451" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Screenshot-2026-01-13-at-11.24.59.png?resize=1024%2C601&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Screenshot-2026-01-13-at-11.24.59.png?resize=300%2C176&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Screenshot-2026-01-13-at-11.24.59.png?resize=768%2C451&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Screenshot-2026-01-13-at-11.24.59.png?resize=769%2C452&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/Screenshot-2026-01-13-at-11.24.59.png?w=1388&amp;ssl=1 1388w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Once you have decided on the volume backup method, click next. Now select the backup location that we created previously.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32712" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?resize=769%2C374&#038;ssl=1" alt="" width="769" height="374" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?resize=1024%2C498&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?resize=300%2C146&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?resize=768%2C373&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?resize=1536%2C747&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?resize=769%2C374&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/3.-backup-location.png?w=1602&amp;ssl=1 1602w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Set the backup schedule. You can create a schedule to meet your requirements, and take backup son a regular basic. Or, do what I am doing here and take a one-off backup right now.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32713" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?resize=769%2C360&#038;ssl=1" alt="" width="769" height="360" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?resize=1024%2C480&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?resize=300%2C141&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?resize=768%2C360&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?resize=1536%2C721&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?resize=769%2C361&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/4.-backup-schedule.png?w=1603&amp;ssl=1 1603w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Select a retention policy for the backup (how long to keep it). By default the retention is set to 30 days.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32714" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?resize=769%2C354&#038;ssl=1" alt="" width="769" height="354" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?resize=1024%2C471&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?resize=300%2C138&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?resize=768%2C353&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?resize=1536%2C706&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?resize=769%2C354&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/5.-retention-policy.png?w=1603&amp;ssl=1 1603w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Give the backup a name, and hit the create button.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32715" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?resize=769%2C319&#038;ssl=1" alt="" width="769" height="319" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?resize=1024%2C425&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?resize=300%2C125&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?resize=768%2C319&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?resize=1536%2C638&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?resize=769%2C319&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/6.-backup-name.png?w=1603&amp;ssl=1 1603w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Backup will enter in progress state, and all going well, should soon report completion.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32716" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?resize=769%2C422&#038;ssl=1" alt="" width="769" height="422" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?resize=1024%2C562&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?resize=300%2C165&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?resize=768%2C422&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?resize=1536%2C844&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?resize=769%2C422&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/8.-backup-completed.png?w=1604&amp;ssl=1 1604w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">After completion, click on the backup to see the backup details. It should report that the backup method was CSI snapshot and not FSB in the Persistent Volumes section. If it reports FSB, check that you made the correct backup selection, and that the Pod does not have any FSB annotations if FSB Opt-in was chosen.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/backup-details.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32717" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/backup-details.png?resize=769%2C487&#038;ssl=1" alt="" width="769" height="487" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/backup-details.png?resize=1024%2C649&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/backup-details.png?resize=300%2C190&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/backup-details.png?resize=768%2C487&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/backup-details.png?resize=769%2C488&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/backup-details.png?w=1416&amp;ssl=1 1416w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>VKSM DP Restore</h2>
<p>Let&#8217;s start a restore by first deleting the cormac-ns namespace. This will also delete the pod and pvc in the namespace.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl delete ns cormac-ns</strong></span></pre>
<p style="text-align: justify;">Now let&#8217;s use VKMS DP to restore the namespace and its contents from our previous backup. There is a restore backup button in the top right hand corner of the backup details screen which we click to begin the operation.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-button-.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32718 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-button-.png?resize=769%2C179&#038;ssl=1" alt="" width="769" height="179" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-button-.png?resize=1024%2C238&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-button-.png?resize=300%2C70&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-button-.png?resize=768%2C179&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-button-.png?resize=769%2C179&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-button-.png?w=1405&amp;ssl=1 1405w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">You are now prompted to select the scope of the restore. Is it the full backup you wish to restore, or perhaps just a single namespace or a set of objects identified by a label. I&#8217;ve selected a single namespace just to show you an example, but of course, we only backed up a single namespace anyway so we could have chosen to restore the entire backup. But hopefully you can see the flexibility available.</p>
<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-what.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32719" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-what.png?resize=769%2C401&#038;ssl=1" alt="" width="769" height="401" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-what.png?resize=1024%2C534&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-what.png?resize=300%2C157&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-what.png?resize=768%2C401&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-what.png?resize=769%2C401&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-what.png?w=1217&amp;ssl=1 1217w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Next, select the volumes to restore (optional). As we have only backed up a single volume using CSI snapshots, then this is the only volume available to restore as well. However, if you did not want to restore the volume, then you could un-click this option and just restore the pod.<a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-vols.png?ssl=1"><br />
<img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32720" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-vols.png?resize=769%2C551&#038;ssl=1" alt="" width="769" height="551" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-vols.png?resize=1024%2C734&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-vols.png?resize=300%2C215&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-vols.png?resize=768%2C550&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-vols.png?resize=769%2C551&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-vols.png?w=1221&amp;ssl=1 1221w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Finally, give the restore job a name, and click on the restore button.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-name.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32721" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-name.png?resize=769%2C257&#038;ssl=1" alt="" width="769" height="257" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-name.png?resize=1024%2C342&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-name.png?resize=300%2C100&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-name.png?resize=768%2C256&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-name.png?resize=769%2C257&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2026/01/vksm-dp-restore-name.png?w=1208&amp;ssl=1 1208w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Once the restore successfully completes, you should observe the namespace and its contents restored.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">$ <strong>kubectl get pod,pvc -n cormac-ns</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME            READY  STATUS   RESTARTS  AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pod/cormac-pod  1/1    Running  0         5m23s</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME                                     STATUS  VOLUME                                    CAPACITY  ACCESS MODES  STORAGECLASS                 VOLUMEATTRIBUTESCLASS  AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">persistentvolumeclaim/cormac-block-pvc   Bound   pvc-0f8fd0bc-c2c2-4a9e-89b9-b9e6f2b9d1f3  5Gi       RWO           vsan-default-storage-policy  &lt;unset&gt;                5m24s</span></pre>
<p style="text-align: justify;"><strong>Success</strong>. We have used VKSM Data Protection to backup and restore a namespace. That completes the post. I think this is a really nice feature which is now available as part of VKSM in VCFA 9.0.1 and later.</p>
<p>The post <a href="https://cormachogan.com/2026/01/14/a-first-look-at-vksm-data-protection-vksm-dp/">A first look at VKSM Data Protection (VKSM DP)</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cormachogan.com/2026/01/14/a-first-look-at-vksm-data-protection-vksm-dp/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32694</post-id>	</item>
		<item>
		<title>Using the VCF 9.x CLI to troubleshoot a DSM database running on VKS</title>
		<link>https://cormachogan.com/2025/12/12/using-the-vcf-9-x-cli-to-troubleshoot-a-dsm-database-running-on-vks/</link>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Fri, 12 Dec 2025 14:00:36 +0000</pubDate>
				<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[VCF Automation]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[vSphere]]></category>
		<category><![CDATA[DSM]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[VCF]]></category>
		<category><![CDATA[VCFA]]></category>
		<category><![CDATA[VKS]]></category>
		<category><![CDATA[vSphere Kubernetes Services]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32626</guid>

					<description><![CDATA[<p>As many readers are now aware, databases provisioned from DSM via VCF Automation have the option to create a vSphere Kubernetes Service cluster to host the database. The decision to use a VKS cluster or whether to use DSM&#8217;s own Kubernetes cluster is based on the Infrastructure Policy. If the Infrastructure Policy is built on traditional vSphere resources, then DSM&#8217;s own K8s is used. If the Infrastructure Policy points to a Supervisor Namespace, then VKS is used. In this post, I wanted to provide some tips and tricks on accessing and troubleshooting the DSM database and VKS cluster backing the&#8230;</p>
<p>The post <a href="https://cormachogan.com/2025/12/12/using-the-vcf-9-x-cli-to-troubleshoot-a-dsm-database-running-on-vks/">Using the VCF 9.x CLI to troubleshoot a DSM database running on VKS</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignleft wp-image-32627" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?resize=150%2C150&#038;ssl=1" alt="" width="150" height="150" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?w=400&amp;ssl=1 400w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/12/vmw-prod-icon-vSphere-kubernetes-service.png?resize=150%2C150&amp;ssl=1 150w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>As many readers are now aware, databases provisioned from DSM via VCF Automation have the option to create a vSphere Kubernetes Service cluster to host the database. The decision to use a VKS cluster or whether to use DSM&#8217;s own Kubernetes cluster is based on the Infrastructure Policy. If the Infrastructure Policy is built on traditional vSphere resources, then DSM&#8217;s own K8s is used. If the Infrastructure Policy points to a Supervisor Namespace, then VKS is used. In this post, I wanted to provide some tips and tricks on accessing and troubleshooting the DSM database and VKS cluster backing the database using the new VCF command line tool available from the Supervisor in VCF 9.x.</p>
<h2>Getting the VCF CLI</h2>
<p style="text-align: justify;">The VCF CLI tool which is available via the Supervisor API URL, accessible from the Summary tab &gt; Status window of any Namespace in the vSphere Client. In the <strong>Link to CLI Tools</strong>, click Open.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32512 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=769%2C426&#038;ssl=1" alt="" width="769" height="426" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=1024%2C567&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=300%2C166&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=768%2C425&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=769%2C426&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?w=1376&amp;ssl=1 1376w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">This will take you to the VCF Consumption CLI. Here you can download the VCF CLI tools to match your desktop Operating System. Note that you will also need access to a <em>kubectl</em> command on your desktop to do any meaningful troubleshooting.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32513 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page.png?resize=769%2C364&#038;ssl=1" alt="" width="769" height="364" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=1024%2C485&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=300%2C142&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=768%2C364&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=1536%2C727&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=2048%2C970&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=769%2C364&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>Access the K8s objects (including database) running on VKS</h2>
<p style="text-align: justify;">Now that we have access to the VCF CLI and kubectl, we can begin to login to both the Supervisor as well as the VKS cluster itself. It might be useful to access the Supervisor directly since this is where the DSM Consumption Operator exists. The DSM Consumption Operator extends the Supervisor API to include the DSM API, so from here we can query the state of the databases. Let&#8217;s look at how to create the Supervisor context using the VCF CLI, and then use kubectl to do further queries. The following command, which points to the Supervisor Control Plane Node Address, and uses basic auth with the vSphere administrator login and password, creates the context for the Supervisor as well as all of the existing namespaces on the Supervisor:</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>vcf.exe context create --endpoint=192.168.20.6  </strong><strong>--username administrator@sfo-w01.local --auth-type basic</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">? Provide a name for the context: <strong>cormac-sv</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">? Provide a name for the context: cormac-sv</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Provide Password: <strong>***********</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Logged in successfully.</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">You have access to the following contexts:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:dsm-ns-lfyn4</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:silver-tenant-ns-b8syh</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:svc-auto-attach-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:svc-consumption-operator-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:svc-tkg-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:svc-velero-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:vks-ns-2vm7n</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cormac-sv:vks-project-ns-74lj4</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">If the namespace context you wish to use is not in this list, you may need to</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">refresh the context again, or contact your cluster administrator.</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">To change context, use `vcf context use &lt;context_name&gt;`</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:svc-velero-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:svc-tkg-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:svc-auto-attach-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:vks-project-ns-74lj4</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:dsm-ns-lfyn4</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:svc-consumption-operator-domain-c10</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:silver-tenant-ns-b8syh</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cormac-sv:vks-ns-2vm7n</span></pre>
<p style="text-align: justify;">In this example, the namespace <strong>dsm-ns-lfyn4</strong> is the namespace used for landing my DSM databases infrastructure (i.e., VKS cluster). Requests for databases can be made from any tenant namespace as long as they have been given permission to do so via the Data Service Policy in VCF Automation. In this case, a tenant in the <strong>silver-tenant-ns-b8syh</strong> namespace has requested a database to be created, and the VKS cluster backing this database has bee created in the dsm-ns-lfyn4 namespace, in accordance with the infrastructure policy. Let&#8217;s use the Supervisor context and query its nodes using kubectl.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>vcf.exe context use cormac-sv</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] Token is still active. Skipped the token refresh for context "cormac-sv"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Successfully activated context 'cormac-sv' (Type: kubernetes)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Fetching recommended plugins for active context 'cormac-sv'...</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Installing the following plugins recommended by context 'cormac-sv':</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>NAME<span class="Apple-converted-space">                </span>CURRENT<span class="Apple-converted-space">  </span>INSTALLING</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cluster <span class="Apple-converted-space">            </span>v3.3.1 <span class="Apple-converted-space">  </span>v3.4.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>kubernetes-release<span class="Apple-converted-space">  </span>v3.3.1 <span class="Apple-converted-space">  </span>v3.4.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>package <span class="Apple-converted-space">            </span>v3.3.1 <span class="Apple-converted-space">  </span>v3.4.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>registry-secret <span class="Apple-converted-space">    </span>v3.3.1 <span class="Apple-converted-space">  </span>v3.4.1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Installed plugin 'cluster:v3.4.1'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Installed plugin 'kubernetes-release:v3.4.1'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Installed plugin 'package:v3.4.1'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Installed plugin 'registry-secret:v3.4.1'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] Successfully installed all recommended plugins.
</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl.exe get nodes</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME<span class="Apple-converted-space">                                  </span>STATUS <span class="Apple-converted-space">  </span>ROLES<span class="Apple-converted-space">                  </span>AGE<span class="Apple-converted-space">    </span>VERSION</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">423b4f3d337d2f1bd0ee1538ce627aa3<span class="Apple-converted-space">      </span>Ready<span class="Apple-converted-space">    </span>control-plane,master <span class="Apple-converted-space">  </span>4d2h <span class="Apple-converted-space">  </span>v1.31.6+vmware.3-fips</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">sfo01-w01-r01-esx01.sfo.rainpole.io <span class="Apple-converted-space">  </span>Ready<span class="Apple-converted-space">    </span>agent<span class="Apple-converted-space">                  </span>4d1h <span class="Apple-converted-space">  </span>v1.31.6-sph-vmware-clustered-infravisor-trunk-85-g71ed1bf</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">sfo01-w01-r01-esx02.sfo.rainpole.io <span class="Apple-converted-space">  </span>Ready<span class="Apple-converted-space">    </span>agent<span class="Apple-converted-space">                  </span>4d1h <span class="Apple-converted-space">  </span>v1.31.6-sph-vmware-clustered-infravisor-trunk-85-g71ed1bf</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">sfo01-w01-r01-esx03.sfo.rainpole.io <span class="Apple-converted-space">  </span>Ready<span class="Apple-converted-space">    </span>agent<span class="Apple-converted-space">                  </span>4d1h <span class="Apple-converted-space">  </span>v1.31.6-sph-vmware-clustered-infravisor-trunk-85-g71ed1bf</span></pre>
<p style="text-align: justify;">This matches my Supervisor environment which has a single control plane node, and is built on a cluster with 3 ESXi hosts reported as agents. Looks good. Now lets check the DSM Consumption Operator is installed correctly on the Supervisor buy running some DSM specific database commands in this context using kubectl.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl.exe get postgresclusters -A</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAMESPACE<span class="Apple-converted-space">                </span>NAME<span class="Apple-converted-space">          </span>STATUS <span class="Apple-converted-space">  </span>STORAGE <span class="Apple-converted-space">  </span>VERSION<span class="Apple-converted-space">                </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-tenant-ns-b8syh <span class="Apple-converted-space">  </span>silver-pg01 <span class="Apple-converted-space">  </span>Ready<span class="Apple-converted-space">    </span>20Gi<span class="Apple-converted-space">      </span>17.5+vmware.v9.0.1.0 <span class="Apple-converted-space">  </span>2d3h</span></pre>
<p style="text-align: justify;">It would appear that there has been a single Postgres database created so far. The name of the database is <strong>silver-pg01</strong> and the request to create the database originated from the <strong>silver-tenant-ns-b8syh</strong> namespace. However, the infrastructure for the database is in a different namespace as mentioned. It is <strong>dsm-ns-lfyn4</strong> which we can confirm by doing a describe on the database from the tenant namespace:</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl describe postgresclusters silver-pg01 -n silver-tenant-ns-b8syh</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">. &lt;--snip</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"> Nodes:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Datacenter: sfo-w01-DC</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Folder: Namespaces/cormac-sv/<strong>dsm-ns-lfyn4</strong>/silver-pg01-11706e</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Host: sfo01-w01-r01-esx03.sfo.rainpole.io</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Network:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Devices:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Network Name: silver-pg01-11706e-v69f5</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Resource Pool: sfo-w01-cl01/Resources/Namespaces/<strong>dsm-ns-lfyn4</strong>/silver-pg01-11706e</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Server: sfo-w01-vc01.sfo.rainpole.io</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Storage Policy Name: vsan-default-storage-policy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Vm Moid: vm-139</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Vm Name: silver-pg01-11706e-r88pq-2dx24</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Vm Role: ControlPlane</span></pre>
<p style="text-align: justify;">If we run a query for all of the VKS clusters across all namespaces, we can see that the name of the VKS cluster that backs our Postgres database is the same name as the database (silver-pg01). There are some other VKS clusters deployed in other databases, but these are not used for DSM. They are used for other workloads, which is quite normal to see.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl get clusters -A</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAMESPACE<span class="Apple-converted-space">              </span>NAME<span class="Apple-converted-space">                      </span>CLUSTERCLASS <span class="Apple-converted-space">                      </span>PHASE <span class="Apple-converted-space">        </span>AGE <span class="Apple-converted-space">    </span>VERSION</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">dsm-ns-lfyn4 <span class="Apple-converted-space">          </span>silver-pg01-11706e<span class="Apple-converted-space">        </span>dsmclusterclass-9-0-1-0-24917825 <span class="Apple-converted-space">  </span>Provisioned <span class="Apple-converted-space">  </span>2d23h <span class="Apple-converted-space">  </span>v1.32.0+vmware.6-fips</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vks-ns-2vm7n <span class="Apple-converted-space">          </span>kubernetes-cluster-i7qm <span class="Apple-converted-space">  </span>builtin-generic-v3.4.0 <span class="Apple-converted-space">            </span>Provisioned <span class="Apple-converted-space">  </span>2d19h <span class="Apple-converted-space">  </span>v1.33.3+vmware.1-fips</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vks-project-ns-74lj4 <span class="Apple-converted-space">  </span>kubernetes-cluster-jkj8 <span class="Apple-converted-space">  </span>builtin-generic-v3.4.0 <span class="Apple-converted-space">            </span>Provisioned <span class="Apple-converted-space">  </span>6d21h <span class="Apple-converted-space">  </span>v1.33.3+vmware.1-fips</span></pre>
<p style="text-align: justify;">With the cluster name, you can look at the events associated with the VKS cluster by using the following kubectl command. This can be useful if there are some issues with the underlying cluster, which in turn prevents the database from coming online.</p>
<pre class="p2"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl events silver-pg01-11706e -n dsm-ns-lfyn4</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">LAST SEEN <span class="Apple-converted-space">                </span>TYPE<span class="Apple-converted-space">      </span>REASON <span class="Apple-converted-space">                        </span>OBJECT<span class="Apple-converted-space">                                                                                        </span>MESSAGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2d17h (x135 over 3d1h)<span class="Apple-converted-space">    </span>Normal<span class="Apple-converted-space">    </span>UpdateSuccess<span class="Apple-converted-space">                  </span>VirtualMachine/silver-pg01-11706e-r88pq-2dx24 <span class="Apple-converted-space">                                                </span>Update success</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2d17h (x45 over 3d1h) <span class="Apple-converted-space">    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>NetworkInfo/dsm-ns-lfyn4<span class="Apple-converted-space">                                                                      </span>NetworkInfo CR has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">12m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>KeyPairVerified<span class="Apple-converted-space">                </span>Issuer/silver-pg01-11706e-extensions-ca-issuer<span class="Apple-converted-space">                                                </span>Signing CA verified</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">11m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>UpdateSucceeded<span class="Apple-converted-space">                </span>CnsVolumeMetadata/a8bc3192-7805-46ee-ba2b-f0e5d144c42e-8c018544-40ac-4156-913d-18d95a9e38a2 <span class="Apple-converted-space">  </span>ReconcileCnsVolumeMetadata: Successfully updated entry in CNS for instance with name "silver-pg01-monitor-0" and entity type "POD" in the guest cluster "a8bc3192-7805-46ee-ba2b-f0e5d144c42e".</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">11m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>UpdateSucceeded<span class="Apple-converted-space">                </span>CnsVolumeMetadata/a8bc3192-7805-46ee-ba2b-f0e5d144c42e-2fc122fe-9b9e-4ff8-ab21-3a840a4a12a0 <span class="Apple-converted-space">  </span>ReconcileCnsVolumeMetadata: Successfully updated entry in CNS for instance with name "silver-pg01-monitor-silver-pg01-monitor-0" and entity type "PERSISTENT_VOLUME_CLAIM" in the guest cluster "a8bc3192-7805-46ee-ba2b-f0e5d144c42e".</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">11m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>UpdateSucceeded<span class="Apple-converted-space">                </span>CnsVolumeMetadata/a8bc3192-7805-46ee-ba2b-f0e5d144c42e-3633c6d4-7e96-409b-8ab6-84d1fe7092e3 <span class="Apple-converted-space">  </span>ReconcileCnsVolumeMetadata: Successfully updated entry in CNS for instance with name "silver-pg01-pgdata-silver-pg01-0" and entity type "PERSISTENT_VOLUME_CLAIM" in the guest cluster "a8bc3192-7805-46ee-ba2b-f0e5d144c42e".</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">11m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>UpdateSucceeded<span class="Apple-converted-space">                </span>CnsVolumeMetadata/a8bc3192-7805-46ee-ba2b-f0e5d144c42e-b4909cde-8139-43ca-8a42-0c2838253b8f <span class="Apple-converted-space">  </span>ReconcileCnsVolumeMetadata: Successfully updated entry in CNS for instance with name "silver-pg01-0" and entity type "POD" in the guest cluster "a8bc3192-7805-46ee-ba2b-f0e5d144c42e".</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">11m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>UpdateSucceeded<span class="Apple-converted-space">                </span>CnsVolumeMetadata/a8bc3192-7805-46ee-ba2b-f0e5d144c42e-bf29d539-e02a-4ebc-8d66-3851d0e95428 <span class="Apple-converted-space">  </span>ReconcileCnsVolumeMetadata: Successfully updated entry in CNS for instance with name "pvc-3633c6d4-7e96-409b-8ab6-84d1fe7092e3" and entity type "PERSISTENT_VOLUME" in the guest cluster "a8bc3192-7805-46ee-ba2b-f0e5d144c42e".</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">11m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>UpdateSucceeded<span class="Apple-converted-space">                </span>CnsVolumeMetadata/a8bc3192-7805-46ee-ba2b-f0e5d144c42e-c87be272-73aa-4632-a012-5a005ad9ee9c <span class="Apple-converted-space">  </span>ReconcileCnsVolumeMetadata: Successfully updated entry in CNS for instance with name "pvc-2fc122fe-9b9e-4ff8-ab21-3a840a4a12a0" and entity type "PERSISTENT_VOLUME" in the guest cluster "a8bc3192-7805-46ee-ba2b-f0e5d144c42e".</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">10m <span class="Apple-converted-space">                      </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>SubnetSet/vm-default<span class="Apple-converted-space">                                                                          </span>SubnetSet CR has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m59s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>Service/silver-pg01-11706e<span class="Apple-converted-space">                                                                    </span>LoadBalancer service has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m59s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>Service/silver-pg01-11706e-88836bd1a14b724dad415<span class="Apple-converted-space">                                              </span>LoadBalancer service has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m51s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>SubnetPort/silver-pg01-11706e-r88pq-2dx24-silver-pg01-11706e-v69f5-eth0 <span class="Apple-converted-space">                      </span>SubnetPort CR has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m51s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>SubnetSet/pod-default <span class="Apple-converted-space">                                                                        </span>SubnetSet CR has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m51s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>SubnetSet/silver-pg01-11706e-v69f5<span class="Apple-converted-space">                                                            </span>SubnetSet CR has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m48s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>Pod/jumpbox <span class="Apple-converted-space">                                                                                  </span>Pod CR has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m30s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulUpdate <span class="Apple-converted-space">              </span>NetworkInfo/dsm-ns-lfyn4<span class="Apple-converted-space">                                                                      </span>NetworkInfo CR has been successfully updated</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m29s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulRealizeNSXResource <span class="Apple-converted-space">  </span>Service/silver-pg01-11706e-88836bd1a14b724dad415<span class="Apple-converted-space">                                              </span>Successful to update NSX resource for DLB Service</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">9m27s <span class="Apple-converted-space">                    </span>Normal<span class="Apple-converted-space">    </span>SuccessfulRealizeNSXResource <span class="Apple-converted-space">  </span>Service/silver-pg01-11706e<span class="Apple-converted-space">                                                                    </span>Successful to process DLB endpoint resource</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">4m52s (x20 over 12m)<span class="Apple-converted-space">      </span>Normal<span class="Apple-converted-space">    </span>UpdateSuccess<span class="Apple-converted-space">                  </span>VirtualMachine/silver-pg01-11706e-r88pq-2dx24 <span class="Apple-converted-space">                                                </span>Update success</span></pre>
<p style="text-align: justify;">With the cluster name, the VCF CLI can now be used to create a new context to access the VKS cluster backing the DSM database</p>
<h2>Create a VKS context</h2>
<p style="text-align: justify;">The following commands create a new context for a VKS cluster (the one which backs the Postgres database called silver-pg01). To create this context, two additional parameters (workload-cluster-name and workload-cluster-namespace) must be included. Again, the auth-type is set to basic, but other authentication options are available (for details on how a tenant can use API tokens to access the VKS cluster, <a href="https://fojta.wordpress.com/2025/09/22/accessing-vcf-automation-deployed-k8s-cluster-with-vcf-cli/" target="_blank" rel="noopener">see this blog post from Tomas Fjota</a>). Once the context is created, we can begin using this context and query the nodes and pods running in the cluster. Since this is a DSM provisioned single node database, it is normal to see a single control plane node provisioned. This node also allows DSM to create the Postgres pods on the control plane, something that is not allowed with vanilla VKS which always provisions a worker node for application workloads.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>vcf.exe context create --endpoint=192.168.20.6 --username administrator@sfo-w01.local 
--workload-cluster-name silver-pg01-11706e --workload-cluster-namespace dsm-ns-lfyn4 
--auth-type basic</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">? Provide a name for the context:<span class="Apple-converted-space">  </span><strong>silver-pg01</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">? Provide a name for the context:<span class="Apple-converted-space">  </span>silver-pg01</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Provide Password: <strong>*********</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Logging in to Kubernetes cluster (silver-pg01-11706e) (dsm-ns-lfyn4)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Successfully logged in to Kubernetes cluster 192.168.22.4</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">You have access to the following contexts:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">   </span>silver-pg01</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">   </span>silver-pg01:silver-pg01-11706e</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">If the namespace context you wish to use is not in this list, you may need to</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">refresh the context again, or contact your cluster administrator.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">To change context, use `vcf context use &lt;context_name&gt;`</span><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
[ok] successfully created context: silver-pg01</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: silver-pg01:silver-pg01-11706e
</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>vcf.exe context list</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>NAME <span class="Apple-converted-space">                                          </span>CURRENT<span class="Apple-converted-space">  </span>TYPE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv<span class="Apple-converted-space">                                      </span>true <span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:dsm-ns-lfyn4 <span class="Apple-converted-space">                        </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:silver-tenant-ns-b8syh <span class="Apple-converted-space">              </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-auto-attach-domain-c10 <span class="Apple-converted-space">          </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-consumption-operator-domain-c10<span class="Apple-converted-space">  </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-tkg-domain-c10 <span class="Apple-converted-space">                  </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-velero-domain-c10<span class="Apple-converted-space">                </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:vks-ns-2vm7n <span class="Apple-converted-space">                        </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:vks-project-ns-74lj4 <span class="Apple-converted-space">                </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>silver-pg01<span class="Apple-converted-space">                                    </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>silver-pg01:silver-pg01-11706e <span class="Apple-converted-space">                </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Use '--wide' to view additional columns.</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
&gt; <strong>vcf context use silver-pg01:silver-pg01-11706e</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] Token is still active. Skipped the token refresh for context "silver-pg01:silver-pg01-11706e"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Successfully activated context 'silver-pg01:silver-pg01-11706e' (Type: kubernetes)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Fetching recommended plugins for active context 'silver-pg01:silver-pg01-11706e'...</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] No recommended plugins found.</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>vcf.exe context list</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>NAME <span class="Apple-converted-space">                                          </span>CURRENT<span class="Apple-converted-space">  </span>TYPE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv<span class="Apple-converted-space">                                      </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:dsm-ns-lfyn4 <span class="Apple-converted-space">                        </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:silver-tenant-ns-b8syh <span class="Apple-converted-space">              </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-auto-attach-domain-c10 <span class="Apple-converted-space">          </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-consumption-operator-domain-c10<span class="Apple-converted-space">  </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-tkg-domain-c10 <span class="Apple-converted-space">                  </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:svc-velero-domain-c10<span class="Apple-converted-space">                </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:vks-ns-2vm7n <span class="Apple-converted-space">                        </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cormac-sv:vks-project-ns-74lj4 <span class="Apple-converted-space">                </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>silver-pg01<span class="Apple-converted-space">                                    </span>false<span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>silver-pg01:silver-pg01-11706e <span class="Apple-converted-space">                </span>true <span class="Apple-converted-space">    </span>kubernetes</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Use '--wide' to view additional columns.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">

&gt; <strong>kubectl get nodes</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME <span class="Apple-converted-space">                            </span>STATUS <span class="Apple-converted-space">  </span>ROLES <span class="Apple-converted-space">          </span>AGE <span class="Apple-converted-space">    </span>VERSION</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-r88pq-2dx24 <span class="Apple-converted-space">  </span>Ready<span class="Apple-converted-space">    </span>control-plane <span class="Apple-converted-space">  </span>2d23h <span class="Apple-converted-space">  </span>v1.32.0+vmware.6-fips</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
&gt; <strong>kubectl get pods -A</strong></span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAMESPACE <span class="Apple-converted-space">                      </span>NAME <span class="Apple-converted-space">                                                    </span>READY <span class="Apple-converted-space">  </span>STATUS<span class="Apple-converted-space">      </span>RESTARTS <span class="Apple-converted-space">      </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cert-manager<span class="Apple-converted-space">                    </span>cert-manager-5668b6499f-t29zf<span class="Apple-converted-space">                            </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>2 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cert-manager<span class="Apple-converted-space">                    </span>cert-manager-cainjector-859df965db-5zf4p <span class="Apple-converted-space">                </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>2 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cert-manager<span class="Apple-converted-space">                    </span>cert-manager-webhook-7d66fb4668-bg9s8<span class="Apple-converted-space">                    </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">d14a47-silver-tenant-ns-b8syh <span class="Apple-converted-space">  </span>default-incremental-backup-29422079-v8rmz<span class="Apple-converted-space">                </span>0/1 <span class="Apple-converted-space">    </span>Completed <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">              </span>2d11h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">d14a47-silver-tenant-ns-b8syh <span class="Apple-converted-space">  </span>default-incremental-backup-29423519-fhsmj<span class="Apple-converted-space">                </span>0/1 <span class="Apple-converted-space">    </span>Completed <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">              </span>35h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">d14a47-silver-tenant-ns-b8syh <span class="Apple-converted-space">  </span>default-incremental-backup-29424959-vl5wm<span class="Apple-converted-space">                </span>0/1 <span class="Apple-converted-space">    </span>Completed <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">              </span>31m</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">d14a47-silver-tenant-ns-b8syh <span class="Apple-converted-space">  </span><span style="color: #0000ff;">silver-pg01-0</span><span class="Apple-converted-space">                                            </span>4/4 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>4 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">d14a47-silver-tenant-ns-b8syh <span class="Apple-converted-space">  </span><span style="color: #0000ff;">silver-pg01-monitor-0</span><span class="Apple-converted-space">                                    </span>4/4 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>4 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>antrea-agent-zmk8v <span class="Apple-converted-space">                                      </span>2/2 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>5 (29m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>antrea-controller-f5d6d787f-m2bbn<span class="Apple-converted-space">                        </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>4 (29m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>coredns-57db7b44f5-csfjm <span class="Apple-converted-space">                                </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>coredns-69b565fcb5-9bswf <span class="Apple-converted-space">                                </span>0/1 <span class="Apple-converted-space">    </span>Pending <span class="Apple-converted-space">    </span>0<span class="Apple-converted-space">              </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>docker-registry-silver-pg01-11706e-r88pq-2dx24 <span class="Apple-converted-space">          </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>etcd-silver-pg01-11706e-r88pq-2dx24<span class="Apple-converted-space">                      </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>image-puller-4jltj <span class="Apple-converted-space">                                      </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>5 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>kube-apiserver-silver-pg01-11706e-r88pq-2dx24<span class="Apple-converted-space">            </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>kube-controller-manager-silver-pg01-11706e-r88pq-2dx24 <span class="Apple-converted-space">  </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>3 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>kube-proxy-cts9x <span class="Apple-converted-space">                                        </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>kube-scheduler-silver-pg01-11706e-r88pq-2dx24<span class="Apple-converted-space">            </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>3 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>metrics-server-6ccf55cf87-4jbzt<span class="Apple-converted-space">                          </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kube-system <span class="Apple-converted-space">                    </span>snapshot-controller-7ccbcfddfd-4czzc <span class="Apple-converted-space">                    </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pinniped-concierge<span class="Apple-converted-space">              </span>pinniped-concierge-77ccbc897d-75l2z<span class="Apple-converted-space">                      </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pinniped-concierge<span class="Apple-converted-space">              </span>pinniped-concierge-77ccbc897d-ww9fl<span class="Apple-converted-space">                      </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pinniped-concierge<span class="Apple-converted-space">              </span>pinniped-concierge-kube-cert-agent-7449f8dbbb-vjt5b<span class="Apple-converted-space">      </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">secretgen-controller<span class="Apple-converted-space">            </span>secretgen-controller-5cbf99f6c-t9bdn <span class="Apple-converted-space">                    </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">telegraf<span class="Apple-converted-space">                        </span>telegraf-6d994786d8-cn82f<span class="Apple-converted-space">                                </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">tkg-system<span class="Apple-converted-space">                      </span>kapp-controller-7ff74d9865-4989q <span class="Apple-converted-space">                        </span>2/2 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>5 (29m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vmware-sql-postgres <span class="Apple-converted-space">            </span>postgres-operator-56ff7f7679-dd8vl <span class="Apple-converted-space">                      </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vmware-system-antrea<span class="Apple-converted-space">            </span>antrea-pre-upgrade-job-dsknp <span class="Apple-converted-space">                            </span>0/1 <span class="Apple-converted-space">    </span>Completed <span class="Apple-converted-space">  </span>0<span class="Apple-converted-space">              </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vmware-system-auth<span class="Apple-converted-space">              </span>guest-cluster-auth-svc-lgv4x <span class="Apple-converted-space">                            </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>1 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vmware-system-cloud-provider<span class="Apple-converted-space">    </span>guest-cluster-cloud-provider-67f87c6699-qnhqd<span class="Apple-converted-space">            </span>1/1 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>6 (29m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vmware-system-csi <span class="Apple-converted-space">              </span>vsphere-csi-controller-854ffbff6-w9lbf <span class="Apple-converted-space">                  </span>7/7 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>7 (31m ago)<span class="Apple-converted-space">    </span>2d23h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">vmware-system-csi <span class="Apple-converted-space">              </span>vsphere-csi-node-jp6jn <span class="Apple-converted-space">                                  </span>3/3 <span class="Apple-converted-space">    </span>Running <span class="Apple-converted-space">    </span>13 (29m ago) <span class="Apple-converted-space">  </span>2d23h</span></pre>
<p style="text-align: justify;">In this VKS context, in the namespace <strong>d14a47-silver-tenant-ns-b8syh</strong>, I can see the pod for the primary database (silver-pg01-0) as well as the pod for the monitor (silver-pg01-monitor-0) which I&#8217;ve highlighted in blue above. Note that the primary pod has 4 containers called pg-container, instance-logging, reconfigure-instance and postgres-sidecar. Using kubectl, I can describe the pod, get events and look at the container logs, e.g., if  you want to look at the pg-container log, run the following command (-c for container):</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl logs silver-pg01-0 -c pg-container -n d14a47-silver-tenant-ns-b8syh | more</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:02.722Z INFO postgresinstance Removing post start tasks executed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:02.731Z INFO postgresinstance Removed post start tasks executed</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:02.731Z INFO postgresinstance Running pre-start tasks</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:02.731Z INFO postgresinstance executing {"task": "ConfigureDirectoryPermission"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:02.731Z INFO postgresinstance executing {"task": "ConfigurePassFileTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:02.732Z INFO postgresinstance executing {"task": "WaitForMonitorTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:02.825Z INFO postgresinstance failed to connect to `user=autoctl_node database=pg_auto_failover`: hostname resolving error: lookup silver-pg01-monitor-0.silver-pg01-agent.d14a47-silver-tenant-ns-b8syh.svc.cluster.local on 10.96.0.10:53: no such host</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:07.844Z INFO postgresinstance failed to connect to `user=autoctl_node database=pg_auto_failover`: 192.168.0.16:5432 (silver-pg01-monitor-0.silver-pg01-agent.d14a47-silver-tenant-ns-b8syh.svc.cluster.local): dial error: dial tcp 192.168.0.16:5432: connect: connection refused</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.898Z INFO postgresinstance Connected to monitor</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.898Z INFO postgresinstance executing {"task": "CleanUpDatabaseProcessTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.898Z INFO postgresinstance Start cleanup process database...</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pg_ctl: could not send stop signal (PID: 309): No such process</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.901Z INFO postgresinstance executing {"task": "RemovePostmasterPidTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.902Z INFO postgresinstance executing {"task": "ClearCustomTempDirTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.903Z INFO postgresinstance executing {"task": "WriteCustomConfigFileTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.923Z INFO postgresinstance Applying custom config {"config": {"Mode":"verify-ca","CAFilePath":"/etc/postgres_ssl/ca.crt","CertFilePath":"/etc/postgres_ssl/tls.crt","KeyFilePath":"/etc/postgres_ssl/tls.key","CustomConfigFilePath":"/pgsql/custom/postgresql-custom-override.conf","IsArchiveModeEnabled":true,"UnixSocketDirectories":["/pgsql/custom/tmp","/tmp"],"ArchiveCommand":"pgbackrest --stanza=d14a47-silver-tenant-ns-b8syh-silver-pg01-293d8da7-4489-4a93-a5c4-7a949b2960d4 archive-push %p","SharedPreloadLibraries":["pg_stat_statements","pgaudit","pg_cron"],"PostgresVersion":"17","PostgresLogDirectory":"/pgsql/logs/postgres","UserProvidedCustomPostgresConfigPath":"/etc/customconfig/postgresql.conf","BackupBasedContinuousRestoreMode":false,"SharedBuffers":"2654 MB","WorkMem":"26 MB","WalKeepSize":"96 MB","WalKeepSegments":6,"MaintenanceWorkMem":"530 MB","EffectiveCacheSize":"5309 MB","MaxSlotWalKeepSize":"1998 MB"}}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.924Z INFO postgresinstance executing {"task": "ConfigureMonitorConnectionStringTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.939Z INFO postgresinstance executing {"task": "ConfigureSSLTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.947Z INFO postgresinstance ssl.ca_file is already set to /etc/postgres_ssl/ca.crt</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.954Z INFO postgresinstance ssl.cert_file is already set to /etc/postgres_ssl/tls.crt</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.962Z INFO postgresinstance ssl.key_file is already set to /etc/postgres_ssl/tls.key</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.962Z INFO postgresinstance executing {"task": "InitializeDatabaseTask"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2025-12-12T10:33:12.962Z INFO postgresinstance Start initializing database...</span></pre>
<p style="text-align: justify;">So as you can clearly see, some low-level troubleshooting can be done using the new VCF CLI when a DSM database is provisioned via VCF Automation, using a Supervisor namespace infrastructure policy and is there fore using the vSphere Kubernetes Service to host the database.</p>
<p style="text-align: justify;"><strong>Note:</strong> If you are running VCF v9.0.1 with DSM integrated, and you run the above commands and notice that there are no running containers (0/4) in the database pod, then you may have encountered an issue with the VKS Management service consuming most of the available resources in the control plane nodes of the VKS cluster. The VKS Management component automatically adds a bunch of agents to the control plane nodes of a VKS cluster, resulting in not enough resources to run the database. If you think this might be it, this is the KB which describes the workaround of adding the database namespace to the VKSM configMap &#8211; <a href="https://knowledge.broadcom.com/external/article?articleNumber=412306" target="_blank" rel="noopener" data-saferedirecturl="https://www.google.com/url?q=https://knowledge.broadcom.com/external/article?articleNumber%3D412306&amp;source=gmail&amp;ust=1765875875724000&amp;usg=AOvVaw1PtAzAEu9KIuhvWi_iRqKL">https://knowledge.broadcom.<wbr />com/external/article?<wbr />articleNumber=412306</a></p>
<h2>SSH access to the VKS node</h2>
<p style="text-align: justify;">Now the final part of this section is to show you how to ssh onto the VKS node that hosts the database. Caution: With great power comes great responsibility. I would urge you to use extreme care if logging onto the VKS node, as you may end up doing something that impacts the database. However, there may be valid reasons where you need to do this, perhaps checking networking connectivity, etc. So, <a href="https://techdocs.broadcom.com/us/en/vmware-cis/vcf/vsphere-supervisor-services-and-standalone-components/latest/managing-vsphere-kuberenetes-service-clusters-and-workloads/configuring-identity-and-access-for-tkg-service-clusters/connect-to-the-tkg-service-cluster-control-plane-as-a-kubernetes-administrator/ssh-to-tkg-service-cluster-nodes-as-the-system-user-with-a-private-key.html" target="_blank" rel="noopener">as per the official documentation</a>, here is how to get ssh access to a VKS node using a jumpbox PodVM that has been deployed onto the same Namespace as the VKS cluster.</p>
<p style="text-align: justify;">The first step is to switch contexts once more, and go back to the Supervisor context, <strong>cormac-sv</strong>. From here, you will need to list the Kubernetes &#8220;secrets&#8221; in the namespace where the database infra has been provisioned, in this case the <strong>dsm-ns-lfyn4</strong>. This ssh secret contains a private key. With this information,  you will be able to ssh onto the VKS node as a system user (vmware-system-user). The secret we are interested in is highlighted in blue below.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>vcf.exe context use cormac-sv</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] Token is still active. Skipped the token refresh for context "sv"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Successfully activated context 'sv' (Type: kubernetes)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Fetching recommended plugins for active context 'sv'...</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] All recommended plugins are already installed and up-to-date.</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; </span><strong><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kubectl.exe get secrets -n dsm-ns-lfyn4</span></strong>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME<span class="Apple-converted-space">                                                        </span>TYPE<span class="Apple-converted-space">                                  </span>DATA <span class="Apple-converted-space">  </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cluster-autoscaler-secret <span class="Apple-converted-space">                                  </span>kubernetes.io/service-account-token <span class="Apple-converted-space">  </span>3<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-antrea-data-values <span class="Apple-converted-space">                      </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-auth-svc-cert<span class="Apple-converted-space">                            </span>kubernetes.io/tls <span class="Apple-converted-space">                    </span>3<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-ca <span class="Apple-converted-space">                                      </span>cluster.x-k8s.io/secret <span class="Apple-converted-space">              </span>2<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-control-plane-machine-agent-conf <span class="Apple-converted-space">        </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-encryption <span class="Apple-converted-space">                              </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-encryption-config<span class="Apple-converted-space">                        </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-etcd <span class="Apple-converted-space">                                    </span>cluster.x-k8s.io/secret <span class="Apple-converted-space">              </span>2<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-extensions-ca<span class="Apple-converted-space">                            </span>kubernetes.io/tls <span class="Apple-converted-space">                    </span>3<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-gateway-api-package<span class="Apple-converted-space">                      </span>clusterbootstrap-secret <span class="Apple-converted-space">              </span>0<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-guest-cluster-auth-service-data-values <span class="Apple-converted-space">  </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-kapp-controller-data-values<span class="Apple-converted-space">              </span>Opaque<span class="Apple-converted-space">                                </span>2<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-kubeconfig <span class="Apple-converted-space">                              </span>cluster.x-k8s.io/secret <span class="Apple-converted-space">              </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-ma-token <span class="Apple-converted-space">                                </span>Opaque<span class="Apple-converted-space">                                </span>2<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-metrics-server-package <span class="Apple-converted-space">                  </span>clusterbootstrap-secret <span class="Apple-converted-space">              </span>0<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-pinniped-package <span class="Apple-converted-space">                        </span>clusterbootstrap-secret <span class="Apple-converted-space">              </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-proxy<span class="Apple-converted-space">                                    </span>cluster.x-k8s.io/secret <span class="Apple-converted-space">              </span>2<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-r88pq-2dx24<span class="Apple-converted-space">                              </span>cluster.x-k8s.io/secret <span class="Apple-converted-space">              </span>2<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-sa <span class="Apple-converted-space">                                      </span>cluster.x-k8s.io/secret <span class="Apple-converted-space">              </span>2<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-secretgen-controller-package <span class="Apple-converted-space">            </span>clusterbootstrap-secret <span class="Apple-converted-space">              </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt; color: #0000ff;">silver-pg01-11706e-ssh<span class="Apple-converted-space">                                      </span>kubernetes.io/ssh-auth<span class="Apple-converted-space">                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-ssh-password <span class="Apple-converted-space">                            </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-ssh-password-hashed<span class="Apple-converted-space">                      </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-user-trusted-ca-secret <span class="Apple-converted-space">                  </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-v69f5-ccm-secret <span class="Apple-converted-space">                        </span>kubernetes.io/service-account-token <span class="Apple-converted-space">  </span>3<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-v69f5-pvbackupdriver-secret<span class="Apple-converted-space">              </span>kubernetes.io/service-account-token <span class="Apple-converted-space">  </span>3<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-v69f5-pvcsi-secret <span class="Apple-converted-space">                      </span>kubernetes.io/service-account-token <span class="Apple-converted-space">  </span>3<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-vsphere-cpi-data-values<span class="Apple-converted-space">                  </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-vsphere-pv-csi-data-values <span class="Apple-converted-space">              </span>Opaque<span class="Apple-converted-space">                                </span>1<span class="Apple-converted-space">      </span>3d</span>
</pre>
<p style="text-align: justify;">The next step is to create a YAML manifest which describes the PodVM that we wish to deploy. Remember that this PodVM is deployed in the same namespace (dsm-ns-lfyn4) as the VKS cluster running the Postgres database pods. Here is an example of such as PodVM. It uses a Photon OS image and passes a command that copies the private key from the volume created from the secret which we referenced earlier. The secretName is highlighted in blue below once more. The volume holding the private key is mounted onto /root/ssh. We use yum to install openssh. The private key is then copied to a file called /root/.ssh/id_rsa. This now allows an ssh session as the &#8216;vmware-system-user&#8217; onto the VKS node from the jumpbox PodVM. We pass the ssh command as an argument when we exec to the Pod (we will see how to do this shortly).</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">apiVersion: v1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kind: Pod</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">metadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>name: jumpbox</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>namespace: dsm-ns-lfyn4</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">spec:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>containers:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>- image: "photon:5.0"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>name: jumpbox</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>command: [ "/bin/bash", "-c", "--" ]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>args: [ "yum install -y openssh-server; mkdir /root/.ssh; cp /root/ssh/ssh-privatekey /root/.ssh/id_rsa; chmod 600 /root/.ssh/id_rsa; while true; do sleep 30; done;" ]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>volumeMounts:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- mountPath: "/root/ssh"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>name: ssh-key</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>readOnly: true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>resources:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>requests:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>memory: 2Gi</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>volumes:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>- name: ssh-key</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>secret:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>secretName: <span style="color: #0000ff;">silver-pg01-11706e-ssh</span></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>imagePullSecrets:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>- name: regcred</span></pre>
<p style="text-align: justify;">Next, apply the manifest to create the PodVM, and ensure it is running.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl.exe apply -f jumpbox-dsm.yml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">pod/jumpbox created</span>
 
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl get pods -n dsm-ns-lfyn4 </strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAMESPACE             NAME                READY   STATUS      RESTARTS        AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">dsm-ns-lfyn4          jumpbox             1/1     Running     0               3m37s</span></pre>
<p style="text-align: justify;">Now, determine the IP address of the node that we wish to ssh onto. The following command, which queries virtual machines in the namespace, will provide this information.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
&gt; <strong>kubectl.exe get vm -o wide -n dsm-ns-lfyn4</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME <span class="Apple-converted-space">                            </span>POWER-STATE <span class="Apple-converted-space">  </span>CLASS <span class="Apple-converted-space">              </span>IMAGE <span class="Apple-converted-space">                  </span>PRIMARY-IP4 <span class="Apple-converted-space">    </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">silver-pg01-11706e-r88pq-2dx24 <span class="Apple-converted-space">  </span>PoweredOn <span class="Apple-converted-space">    </span>best-effort-large <span class="Apple-converted-space">  </span>vmi-24554b66363a299c5 <span class="Apple-converted-space">  </span>192.173.237.3 <span class="Apple-converted-space">  </span>2d3h</span></pre>
<p style="text-align: justify;">The ssh session can now be initiated. Run a &#8216;kubectl exec&#8217; command as show below. As soon as you &#8216;exec&#8217; onto the jumpbox PodVM, the ssh command is run to the VKS node&#8217;s IP address is run. The PodVM will run the command and args as defined in the YAML manifest above to configure the private key for the &#8216;vmware-system-user&#8217;. This then allows the ssh command passed to the &#8216;kubectl exec&#8217; onto the VKS node to succeed.</p>
<pre><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">&gt; <strong>kubectl exec -it jumpbox -n dsm-ns-lfyn4 -- /usr/bin/ssh vmware-system-user@192.173.237.3</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">The authenticity of host '192.173.237.3 (192.173.237.3)' can't be established.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">ED25519 key fingerprint is SHA256:HEu9cZ9Uq4EFwQvR1KiWbJWlR0Jd3SXNK7lu8C6WBnY.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">This key is not known by any other names.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Are you sure you want to continue connecting (yes/no/[fingerprint])? <strong>yes</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Warning: Permanently added '192.173.237.3' (ED25519) to the list of known hosts.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">cat: /var/run/motdgen/motd: Permission denied</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">
vmware-system-user@silver-pg01-11706e-r88pq-2dx24 [ ~ ]$ <strong>ip a | more</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    inet 127.0.0.1/8 scope host lo</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">       valid_lft forever preferred_lft forever</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    inet6 ::1/128 scope host noprefixroute</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">       valid_lft forever preferred_lft forever</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc prio state UP group default qlen 1000</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    link/ether 04:50:56:00:78:00 brd ff:ff:ff:ff:ff:ff</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    altname eno1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    altname enp11s0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    altname ens192</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    inet 192.173.237.3/27 brd 192.173.237.31 scope global eth0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">       valid_lft forever preferred_lft forever</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    inet6 fe80::650:56ff:fe00:7800/64 scope link</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">       valid_lft forever preferred_lft forever</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">.</span></pre>
<p style="text-align: justify;">And that completes the step to gain ssh access onto a VKS node that is backing a DSM provisioned database. Refer to the official documentation linked earlier for other methods (such as password) to gain access. If you need to lock down ssh access the the database, you can of course create an NSX Firewall Rule and block this port. There is a simple example of <a href="https://cormachogan.com/2025/07/01/creating-firewall-rules-in-nsx-to-control-client-access-to-dsm-provisioned-databases/" target="_blank" rel="noopener">how to do this available here</a>.</p>
<h2>Summary</h2>
<p style="text-align: justify;">That concludes the post. Hopefully you have seen some of the ways in which it is possible to troubleshoot DSM database deployments on vSphere Kubernetes Services clusters. As mentioned, this is the default Kubernetes used when the infrastructure policy for the database is a Supervisor Namespace, typically provisioned via VCF Automation in VCF 9.x.</p>
<p>The post <a href="https://cormachogan.com/2025/12/12/using-the-vcf-9-x-cli-to-troubleshoot-a-dsm-database-running-on-vks/">Using the VCF 9.x CLI to troubleshoot a DSM database running on VKS</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32626</post-id>	</item>
		<item>
		<title>DSM 9.0.1 &#8211; Using IaaS Resource Policies to fine-tune database deployments in VCF Automation</title>
		<link>https://cormachogan.com/2025/10/30/dsm-9-0-1-and-vcfa-iaas-resource-policies/</link>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Thu, 30 Oct 2025 15:00:08 +0000</pubDate>
				<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[VCF Automation]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[vSphere]]></category>
		<category><![CDATA[DSM]]></category>
		<category><![CDATA[Iaas Policy]]></category>
		<category><![CDATA[Postgres]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[VCF]]></category>
		<category><![CDATA[VCFA]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32580</guid>

					<description><![CDATA[<p>In this post, we will take a look at another new feature of VCF Automation, IaaS Resource Policies. I will demonstrate how these IaaS policies can be used with Data Service Policies and DSM provisioned databases to fine-tune certain parameters related to the database. You may have already seen the concept of Data Service Policies in previous posts. These are policies set at the Provider level which can dictate which database engines, which database versions and which backup locations a tenant of an organization can consume. However additional validations or constraints in an IaaS policy can be applied at an&#8230;</p>
<p>The post <a href="https://cormachogan.com/2025/10/30/dsm-9-0-1-and-vcfa-iaas-resource-policies/">DSM 9.0.1 &#8211; Using IaaS Resource Policies to fine-tune database deployments in VCF Automation</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class=" wp-image-30383 alignleft" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=151%2C122&#038;ssl=1" alt="" width="151" height="122" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=1024%2C831&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=300%2C244&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=768%2C623&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=769%2C624&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?w=1386&amp;ssl=1 1386w" sizes="auto, (max-width: 151px) 100vw, 151px" /></a>In this post, we will take a look at another new feature of VCF Automation, IaaS Resource Policies. I will demonstrate how these IaaS policies can be used with <a href="https://cormachogan.com/2025/06/24/data-services-manager-9-0-with-vcf-9-0-and-vcf-automation/" target="_blank" rel="noopener">Data Service Policies</a> and DSM provisioned databases to fine-tune certain parameters related to the database. You may have already seen the concept of Data Service Policies in previous posts. These are policies set at the Provider level which can dictate which database engines, which database versions and which backup locations a tenant of an organization can consume. However additional validations or constraints in an IaaS policy can be applied at an organization or a project level, allowing for even more fine grained controls over what settings a tenant can place on a database.</p>
<p style="text-align: justify;">In the example that I will show you here, I am going to stipulate that certain members of an organization need to set their retention policy for backups to 91 days rather than 30 days, which is the default. Let&#8217;s begin by navigating to the VCF Automation Organization Portal, and selecting the Manage &amp; Govern view. Here you will find the Policies section in the left-hand navigation bar. We are going to create an IaaS Resource Policy. Click on that.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32582 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?resize=769%2C367&#038;ssl=1" alt="" width="769" height="367" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?resize=1024%2C489&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?resize=300%2C143&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?resize=768%2C367&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?resize=1536%2C733&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?resize=769%2C367&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/0.-policy-types.png?w=1956&amp;ssl=1 1956w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">This will open the &#8216;New Policy&#8217; wizard. Provide a name an optional description, and which Organization or Project(s) that the policy applies to. You can even get more granular in the criteria section and include Namespace names, Namespace classes or Regions to associate with the policy.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32583 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?resize=769%2C538&#038;ssl=1" alt="" width="769" height="538" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?resize=1024%2C717&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?resize=300%2C210&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?resize=768%2C537&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?resize=1536%2C1075&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?resize=769%2C538&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/1.-new-iaas-policy.png?w=1792&amp;ssl=1 1792w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">If you click on the &#8220;+ Load Policy Template&#8221; button, you will see some examples of pre-defined IaaS Resource Polices, which you can use as a template for further policies. There are a number of out-of-the-box templates such as a policy that enforces a maximum of one control plane/worker node on a Kubernetes cluster. This is just an FYI, so once you have had a chance to look at some of the examples, you can cancel the load template view and we can proceed with our database-specific IaaS policy.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32585 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?resize=769%2C454&#038;ssl=1" alt="" width="769" height="454" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?resize=1024%2C605&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?resize=300%2C177&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?resize=768%2C454&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?resize=1536%2C908&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?resize=2048%2C1210&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/2.-load-templates.png?resize=769%2C454&amp;ssl=1 769w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p>Begin by filling in the name, scope, etc:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32587 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?resize=769%2C673&#038;ssl=1" alt="" width="769" height="673" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?resize=1024%2C896&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?resize=300%2C263&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?resize=768%2C672&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?resize=1536%2C1344&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?resize=769%2C673&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/3.-create-iaas-policy-1.png?w=1616&amp;ssl=1 1616w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Next, add the code block for the validation, with a goal of requiring the retention policy for backups to be set to 91 days rather than the default value of 30 days. To do that, the code looks to match on the PostgresClusters API type object, and then match on the <strong>spec.backupConfig.backupRetentionDays</strong> field and express a constraint. Prior knowledge of the PostgresCluster specification is necessary to determine where to place to the constraints.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32588 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?resize=769%2C686&#038;ssl=1" alt="" width="769" height="686" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?resize=1024%2C913&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?resize=300%2C267&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?resize=768%2C685&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?resize=1536%2C1369&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?resize=769%2C685&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/4.-create-iaas-policy-2.png?w=1602&amp;ssl=1 1602w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">The IaaS Resource Policy type provides a policy-as-code approach using Kubernetes <a href="https://kubernetes.io/docs/reference/access-authn-authz/validating-admission-policy/">Validation Admission Policy</a>. Validating admission policies use the Common Expression Language (CEL) to declare the validation rules of a policy. In the code above, it is using the `has()` function to safely check the the fields exist before accessing them, and then validates that `backupRetentionDays == 91`. If it does not match 91, then we will generate a message to the user indicating that this field is not set correctly.</p>
<p style="text-align: justify;">Here is the actual code block. It is essentially the spec section from a Kubernetes Validating Admission Policy.</p>
<pre class="p1"><span class="s1" style="font-family: 'courier new', courier, monospace; font-size: 10pt;">failurePolicy: Fail</span>
<span class="s1" style="font-family: 'courier new', courier, monospace; font-size: 10pt;">matchConstraints:</span>
<span class="s1" style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>resourceRules:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>- apiGroups: <span class="Apple-converted-space">  </span>["databases.dataservices.vmware.com"]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>apiVersions: ["v1alpha1"]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>operations:<span class="Apple-converted-space">  </span>["CREATE", "UPDATE"]</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>resources: <span class="Apple-converted-space">  </span>["postgresclusters"]</span>
<span class="s1" style="font-family: 'courier new', courier, monospace; font-size: 10pt;">validations:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">- expression: "has(object.spec.backupConfig) &amp;&amp; has(object.spec.backupConfig.backupRetentionDays) &amp;&amp; object.spec.backupConfig.backupRetentionDays == 91"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>messageExpression: "'backupRetentionDays must be exactly 91, but got ' + string(object.spec.backupConfig.backupRetentionDays)"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>message: "backupRetentionDays must be exactly 91"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>reason: Invalid</span></pre>
<p style="text-align: justify;">Once created, the policy becomes visible in the &#8220;Definitions&#8221; view. If there are any issues with your policy definition, they will be highlighted here.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32590 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created.png?resize=769%2C272&#038;ssl=1" alt="" width="769" height="272" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?resize=1024%2C362&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?resize=300%2C106&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?resize=768%2C271&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?resize=1536%2C543&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?resize=2048%2C724&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?resize=769%2C272&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/5.-iaas-policy-created-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">You can also see the scope of a policy, for example which Project and which Namespace it applies to.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32592" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn.png?resize=769%2C185&#038;ssl=1" alt="" width="769" height="185" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?resize=1024%2C246&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?resize=300%2C72&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?resize=768%2C184&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?resize=1536%2C368&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?resize=2048%2C491&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?resize=769%2C184&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/6.-iaas-policy-assignemtn-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">And any time that this policy needs to do an enforcement on a database provisioning operation, this is visible in the Enforcements view:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32591 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view.png?resize=769%2C198&#038;ssl=1" alt="" width="769" height="198" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?resize=1024%2C264&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?resize=300%2C77&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?resize=768%2C198&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?resize=1536%2C396&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?resize=2048%2C528&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?resize=769%2C198&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/7.-iaas-policy-enforcement-view-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">With this in mind, let&#8217;s now try to provision a Postgres database with a retention policy set to the default value of 30 days from a tenant namespace in the project to which I have applied the policy. It should prevent me from doing so, and report the reason why &#8230; which it does.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32594 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1.png?resize=769%2C392&#038;ssl=1" alt="" width="769" height="392" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?resize=1024%2C522&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?resize=300%2C153&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?resize=768%2C391&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?resize=1536%2C782&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?resize=2048%2C1043&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?resize=769%2C392&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/8.-database-deployment-invalid-1-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">The admission control policy prevented the deployment of a Postgres database due to the incorrect backup retention set by the user (30 days instead of 91). This is just one example of using the new IaaS Resource Policy engine for database resources.</p>
<p style="text-align: justify;">If I try the exact same deployment, but this time specify a retention time of 91 days for backups, then the database deploys successfully as the condition in the IaaS Resource policy is met.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32595 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid.png?resize=769%2C367&#038;ssl=1" alt="" width="769" height="367" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?resize=1024%2C489&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?resize=300%2C143&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?resize=768%2C366&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?resize=1536%2C733&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?resize=2048%2C977&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?resize=769%2C367&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/9.-database-deployment-valid-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Here is another simple snippet of validation code, this time verifying that the name of the database is at least 8 characters long:</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">validations:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>- reason: Invalid</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>message: databaseName must be greater than 8 chars</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>expression: has(object.spec.databaseName) &amp;&amp; size(object.spec.databaseName) &gt; 8</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>messageExpression: "'IaaS Policy Validation issue: database name must be greater</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>than 8 characters, but got ' + string(size(object.spec.databaseName))"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">failurePolicy: Fail</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">matchConstraints:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>resourceRules:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>- apiGroups:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>- databases.dataservices.vmware.com</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>resources:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>- postgresclusters</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>operations:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>- CREATE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>- UPDATE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>apiVersions:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>- v1alpha1</span></pre>
<p style="text-align: justify;">And now any attempt to create a database with a name that is less than 8 characters will be constrained by this policy:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32606" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?resize=769%2C453&#038;ssl=1" alt="" width="769" height="453" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?resize=1024%2C603&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?resize=300%2C177&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?resize=768%2C452&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?resize=1536%2C905&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?resize=769%2C453&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-less-than-8-chars-in-name.png?w=1830&amp;ssl=1 1830w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<h2>Summary</h2>
<p style="text-align: justify;">Hopefully this post has highlighted the power of IaaS Resource Policies. Data Service Policies (DSP) used by DSM in VCF Automation do not cover all the fields of PostgresCluster API object. Also, DSPs are only available at the Provider level. IaaS Resource Policies are a great complement to DSPs. IaaS Resource Policies are available at the Organization/Tenant level and uses expressions that can put restrictions on any API object and on any field.</p>
<p style="text-align: justify;">As seen in the above examples, we are able to restrict the backup retention and the database name length in a PostgresDatabase object. DSPs do not control this today. But using an IaaS Resource Policy, it is possible to say that you want to match on the PostgresCluster API type, and then you can match on the <strong>spec.databaseName</strong> or <strong>spec.backupConfig.backupRetentionDays</strong> field and express an appropriate constraint. Indeed, you can match of any of the fields and create any validation or constraint that you wish. This is a very powerful VCF and VCF Automation feature.</p>
<p style="text-align: justify;"><a href="https://github.com/cormachogan/iaas-resource-policies/tree/main" target="_blank" rel="noopener">This GiHub repo</a> contains the code shown in the above examples.</p>
<p>The post <a href="https://cormachogan.com/2025/10/30/dsm-9-0-1-and-vcfa-iaas-resource-policies/">DSM 9.0.1 &#8211; Using IaaS Resource Policies to fine-tune database deployments in VCF Automation</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32580</post-id>	</item>
		<item>
		<title>DSM 9.0.1 &#8211; Using VCFA Blueprints to provision databases</title>
		<link>https://cormachogan.com/2025/10/23/dsm-9-0-1-using-vcfa-blueprints-to-provision-databases/</link>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Thu, 23 Oct 2025 13:00:45 +0000</pubDate>
				<category><![CDATA[Aria]]></category>
		<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[VCF Automation]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[vSphere]]></category>
		<category><![CDATA[Blueprint]]></category>
		<category><![CDATA[Data Services Manager. DSM]]></category>
		<category><![CDATA[DSM 9.0.1]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Postgres]]></category>
		<category><![CDATA[VCFA]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32525</guid>

					<description><![CDATA[<p>In my previous post, I showed how the VCF Consumption CLI could be used to provision a MySQL database when Data Services Manager is integrated with VCF Automation. We could use the same VCF Consumption CLI to provision Postgres databases also. However, I wanted to show you another way that databases could be provisioned using blueprints in VCF Automation (VCFA). Readers may find this useful as it will allow you to track MySQL database instances provisioned via VCF Automation, even though the MySQL Data Service Policy and MySQL databases are not currently plumbed up into the VCFA UI (his will&#8230;</p>
<p>The post <a href="https://cormachogan.com/2025/10/23/dsm-9-0-1-using-vcfa-blueprints-to-provision-databases/">DSM 9.0.1 &#8211; Using VCFA Blueprints to provision databases</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignleft wp-image-30383" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=151%2C122&#038;ssl=1" alt="" width="151" height="122" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=1024%2C831&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=300%2C244&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=768%2C623&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=769%2C624&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?w=1386&amp;ssl=1 1386w" sizes="auto, (max-width: 151px) 100vw, 151px" /></a>In my previous post, I showed <a href="https://cormachogan.com/2025/10/21/dsm-9-0-1-mysql-database-deployments-through-vcf-automation/" target="_blank" rel="noopener">how the VCF Consumption CLI could be used to provision a MySQL database</a> when Data Services Manager is integrated with VCF Automation. We could use the same VCF Consumption CLI to provision Postgres databases also. However, I wanted to show you another way that databases could be provisioned using <em>blueprints</em> in VCF Automation (VCFA). Readers may find this useful as it will allow you to track MySQL database <span style="text-decoration: underline;">instances</span> provisioned via VCF Automation, even though the MySQL Data Service Policy and MySQL databases are not currently plumbed up into the VCFA UI (his will be added in a future release). The main feature of blueprints is that it allows for a more sophisticated definition of an application with multiple VMs, load balancers, etc and can be deployed with single click. The &#8220;application&#8221;, in this case it is just a database, and it will show up as a deployment in the tenant namespace. However, the database could just be one part of a blueprint, with many other components added to the blueprint for a complete &#8220;one-click&#8221; application deployment.</p>
<p style="text-align: justify;">Let&#8217;s start with the prerequisites. To begin with, a Data Service Policy will be required to allocate permissions and resources to tenants to create data services. If you wish to know more about Data Service Policies, there is a detailed description in <a href="https://cormachogan.com/2025/06/24/data-services-manager-9-0-with-vcf-9-0-and-vcf-automation/" target="_blank" rel="noopener">this introductory blog post on DSM &amp; VCFA integration</a>. If you wish to provision a Postgres database, then the steps to create a Data Service Policy for Postgres are available in the VCFA UI. You can see how to do this, along with the other setup steps, in <a href="https://cormachogan.com/2025/06/24/data-services-manager-9-0-with-vcf-9-0-and-vcf-automation/" target="_blank" rel="noopener">the blog I just referenced previously</a>. However, if you wish to create a Data Service Policy for MySQL databases, then you will have to do this step via the API because, as mentioned, it is not yet plumbed up in the UI. The steps to do this are in <a href="https://cormachogan.com/2025/10/21/dsm-9-0-1-mysql-database-deployments-through-vcf-automation/" target="_blank" rel="noopener">my previous blog post</a>, so you can follow the steps on how to create a MySQL DSP and database there.</p>
<p style="text-align: justify;">We can now proceed with creating a database blueprint in VCFA. In the Tenant Organization, under Build and Deploy, select the Blueprint Design from the left-hand navigation menu. You can upload the blueprint code from a file, or create it directly. In the Organization select <strong>Blueprint Design</strong> &gt; <strong>Blueprints</strong> &gt; <strong>New From</strong> and then decide if you want to use a &#8216;Blank canvas&#8217; to create the template or to &#8216;Upload&#8217; it from a file.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-design.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32546 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-design.png?resize=769%2C381&#038;ssl=1" alt="" width="769" height="381" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-design.png?resize=1024%2C508&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-design.png?resize=300%2C149&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-design.png?resize=768%2C381&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-design.png?resize=769%2C381&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-design.png?w=1508&amp;ssl=1 1508w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Next, provide details about the blueprint template, such as a name, a description, and an optional custom icon. You can also select which Project within the Organization has access, and decide if, at some point, you want to grant other Projects in the same Organization access as well. That is what I have done here.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/new-template.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32548" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/new-template.png?resize=512%2C374&#038;ssl=1" alt="" width="512" height="374" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/new-template.png?resize=1024%2C748&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/new-template.png?resize=300%2C219&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/new-template.png?resize=768%2C561&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/new-template.png?resize=769%2C562&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/new-template.png?w=1364&amp;ssl=1 1364w" sizes="auto, (max-width: 512px) 100vw, 512px" /></a></p>
<p>Let&#8217;s being with what a blueprint looks like from a blank canvas:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/bluepint-blank-canvas-code.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32537 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/bluepint-blank-canvas-code.png?resize=769%2C172&#038;ssl=1" alt="" width="769" height="172" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/bluepint-blank-canvas-code.png?resize=1024%2C229&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/bluepint-blank-canvas-code.png?resize=300%2C67&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/bluepint-blank-canvas-code.png?resize=768%2C171&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/bluepint-blank-canvas-code.png?resize=769%2C172&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/bluepint-blank-canvas-code.png?w=1156&amp;ssl=1 1156w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">So we will populate both the inputs and the resources section. I will define my inputs which will be later used to form variables for my database, and also use a <strong>cciNamespace</strong> and <strong>dsmDb</strong> Supervisor resource. The latter is only achievable when the Consumption Operator is installed on the Supervisor, which provides the Supervisor with CRDs for DSM databases. Once those resource are in place, I can use a standard DSM YAML manifest for provisioning. Note that because I plan to use variables in my blueprint code, the <strong>formatVersion</strong> field will need to be bumped to <strong>2</strong>.</p>
<p style="text-align: justify;">I am making a few assumption about my VCFA and DSM environments. I am assuming that the namespaces in the code below have already been selected as valid DSM infrastructure policies. I am also assuming that there is a valid Data Service Policy created which grants access to the Postgres data service to the Organisation where my tenant namespace resides. With those assumption in mind, here is a blueprint for creating Postgres databases via VCFA using DSM. You can use this code sample to create your own blueprint. Lines which begin with a # are comments, and do not need to be included in the actual code.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># Blueprint to provision DSM Postgres Database</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># Assumption is that Data Service Policy already exists and that the ORG where the tenant resides has been granted access to provision databases</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># Another assumption is that the namespace where the database is provisioned to is part of an infrastructure policy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># Kudos to Eric Gray for initial template</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">#</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">formatVersion: 2</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">inputs:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dbName:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: string</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: Database Name</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>description: Name of Postgres DB - leave blank to use deployment name; 4 character minimum</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>#minLength: 4</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: '' # indicates optional</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>namespace:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: string</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: Namespace</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>description: Tenant namespace for this deployment</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: same-ns-5hklb</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dbInfraPolicy:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: string</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: Infrastructure Policy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>description: Target DSM infrastructure policy or namespace</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>enum:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- same-ns-5hklb</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- diff-ns-same-org-6mbgt</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- dsm-ns-01-5rvdd</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: same-ns-5hklb</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>storagePolicy:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: string</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: Storage Policy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>description: vSphere Storage Policy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: vSAN Default Storage Policy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>diskSize:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: integer</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: DB Disk Size</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>maximum: 80</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>minimum: 20</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: 20</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>backupLocation:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: string</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: Backup Location</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>description: S3 storage bucket configured for DSM backups</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>enum:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- none</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- dsm-backups</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: dsm-backups</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dbAvailability:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: string</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: Availability Model</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>description: Single VM or Primary/Replica HA Cluster</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: single</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>oneOf:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- title: Single VM</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>const: single</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- title: HA Cluster</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>const: cluster</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dbVersion:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: integer</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>title: Postgres Major Version</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>description: Major version of the database being provisioned</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>maximum: 17</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>minimum: 12</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>default: 17
# Some of the inputs may need some pre-handling before getting back to the manifest below</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">variables:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dbName: ${to_lower(input.dbName || env.deploymentName)}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dbClass: ${input.dbAvailability == "single" ? "best-effort-large" :"best-effort-xlarge"}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>backup: ${input.backupLocation != "none" ? input.backupLocation :null}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dbVersion: ${to_string(input.dbVersion)}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>backupConf:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>backupRetentionDays: 30</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>schedules:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- name: default-full-backup</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>type: full</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>schedule: 59 23 * * 6</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>- name: default-incremental-backup</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>type: incremental</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>schedule: 59 23 1/1 * *</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">resources:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>cciNamespace:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: CCI.Supervisor.Namespace</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>properties:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>name: ${input.namespace}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>existing: true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># Supervisor resource, in this case a DSM database, which is created in</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># the Namespace context and will either succeed or fail</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">  </span>dsmDb:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>type: CCI.Supervisor.Resource</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">    </span>properties:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>context: ${resource.cciNamespace.id}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>wait:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>conditions:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>- status: 'True'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>type: Ready</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>- status: 'True'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>type: TerminalFailure</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>indicatesFailure: true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># This manifest is now identical to the YAML code used to create a database using the DSM API</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># The only difference is that we are populating field based on the inputted variables above</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># Essentially, the DSM APIs are made available to vSphere through the DSM Consumption Operator</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"># which is installed as a Supervisor Service, allowing VCF Automation to consume them</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">      </span>manifest:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>apiVersion: databases.dataservices.vmware.com/v1alpha1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>kind: PostgresCluster</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>spec:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>adminUsername: pgadmin</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>databaseName: ${variable.dbName}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>version: ${variable.dbVersion}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>storageSpace: ${input.diskSize + 'Gi'}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>storagePolicyName: ${input.storagePolicy}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>infrastructurePolicy:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>name: ${input.dbInfraPolicy}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>replicas: ${input.dbAvailability == "single" ? 0 :1}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>vmClass:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>name: ${variable.dbClass}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>maintenanceWindow:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>duration: 6h</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>startDay: SATURDAY</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">            </span>startTime: '23:59'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>backupLocation: ${variable.backup != null ? {'name':input.backupLocation} :null}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>backupConfig: ${variable.backup != null ? variable.backupConf :null}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">        </span>metadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>name: ${variable.dbName}</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;"><span class="Apple-converted-space">          </span>namespace: ${resource.cciNamespace.name}</span></pre>
<p style="text-align: justify;">The main sections of the code related to resources are input, variables and resources. My two resources are:</p>
<ul>
<li style="text-align: justify;"><strong>Supervisor Namespace </strong>&#8211; CCI.Supervisor.Namespace &#8211; is used to create ( or select ) a Supervisor Namespace, which provides a Kubernetes-based workspace with resource limits, user access, and available Supervisor services so we can provision our VM and TKG resources based on our application needs.</li>
<li style="text-align: justify;"><strong>Supervisor Resource</strong> &#8211; CCI.Supervisor.Resource &#8211; is used to create any supported Supervisor K8s resource within a Supervisor Namespace, such as (using their K8s object kind), virtualmachines, virtualmachineservices, tanzukubernetesclusters, persistentvolumeclaims, secrets, and so on, depending on the K8s manifest we pass to the Supervisor resource we are configuring. Since we have extended the API with the Consumption Operator to add a DBaaS Supervisor Service, we can request a PostgresCluster as shown above. We would not be able to request this objectwithout the Consumption Operator in place.</li>
</ul>
<p style="text-align: justify;">Next, add the code to the blueprint. You can see here that the canvas has recognised the Supervisor Namespace element and the dsmDb element, and placed both of these on the canvas. These are CCI template elements included in the Cloud Consumption Interface. These can also be dragged, dropped and configured via the canvas, if you wish.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32547 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas.png?resize=769%2C356&#038;ssl=1" alt="" width="769" height="356" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?resize=1024%2C474&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?resize=300%2C139&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?resize=768%2C356&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?resize=1536%2C712&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?resize=2048%2C949&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?resize=769%2C356&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-canavas-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Once the code is added, we can do a check to verify that the syntax is correct. In the lower left hand side of the canvas there is a &#8216;TEST&#8217; button. It will launch the inputs wizard for the database. Here you can test populating any necessary fields and check that any enum fields and any maximum/minimum fields are working correctly. If the syntax is working, the test result should show successful. Note that this does not validate the selections exist on the back-end. It is simply a syntax checker.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/test-result.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32549" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/test-result.png?resize=512%2C270&#038;ssl=1" alt="" width="512" height="270" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/test-result.png?resize=1024%2C540&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/test-result.png?resize=300%2C158&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/test-result.png?resize=768%2C405&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/test-result.png?resize=769%2C406&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/test-result.png?w=1126&amp;ssl=1 1126w" sizes="auto, (max-width: 512px) 100vw, 512px" /></a></p>
<p style="text-align: justify;">Next, click on the &#8216;VERSION&#8217; button. This will allow us to push a version of the blueprint template to the catalog. You can add a description and a &#8220;Change log&#8221; entry, and select if you want this version pushed to the catalog.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-and-publish.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32550" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-and-publish.png?resize=384%2C331&#038;ssl=1" alt="" width="384" height="331" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-and-publish.png?w=906&amp;ssl=1 906w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-and-publish.png?resize=300%2C259&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-and-publish.png?resize=768%2C663&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-and-publish.png?resize=769%2C664&amp;ssl=1 769w" sizes="auto, (max-width: 384px) 100vw, 384px" /></a></p>
<p style="text-align: justify;">Next, navigate to the catalog in the left-hand navigation menu. From here, the tile to provision a Postgres database should now be visible if it has been successfully published from the previous step. I already have a PhotonOS tile in my catalog which is why you are seeing two entries. If you have not added any other blueprints, then the Postgres database will be the only one visible.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32563 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?resize=769%2C496&#038;ssl=1" alt="" width="769" height="496" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?resize=1024%2C660&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?resize=300%2C193&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?resize=768%2C495&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?resize=1536%2C991&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?resize=769%2C496&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/blueprint-tiles.png?w=1538&amp;ssl=1 1538w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Click on the <strong>Request</strong> link in the tile to start a database deployment. Populate the necessary details. Take a note of the version number and ensure it matches the version number you provided when publishing to the catalog (I&#8217;ve gone through a few versions, so your number may be different). In this example, I need to provide a deployment name. The database name will be set to the same name as the deployment if not provided separately. This is done in the code. We can also check if the infrastructure policy list that we defined in the code is working as a dropdown list, as shown here.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/infra-policy-list.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32556" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/infra-policy-list.png?resize=512%2C485&#038;ssl=1" alt="" width="512" height="485" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/infra-policy-list.png?resize=1024%2C970&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/infra-policy-list.png?resize=300%2C284&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/infra-policy-list.png?resize=768%2C728&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/infra-policy-list.png?resize=769%2C729&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/infra-policy-list.png?w=1338&amp;ssl=1 1338w" sizes="auto, (max-width: 512px) 100vw, 512px" /></a></p>
<p style="text-align: justify;">You can also check that the Postgres Major numbers are working, by selecting a number outside the range. It should error as shown below. Similar behaviour should be visible in the major number inputted is less than the supported minimum:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32557" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?resize=512%2C515&#038;ssl=1" alt="" width="512" height="515" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?resize=1018%2C1024&amp;ssl=1 1018w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?resize=298%2C300&amp;ssl=1 298w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?resize=768%2C773&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?resize=769%2C774&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/version-too-big.png?w=1262&amp;ssl=1 1262w" sizes="auto, (max-width: 512px) 100vw, 512px" /></a></p>
<p style="text-align: justify;">With the details populated, click on the &#8216;SUBMIT&#8217; button. From the <strong>Instances</strong> view (still under Build &amp; Deploy), you should now see the database begin to deploy.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32558 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance.png?resize=769%2C236&#038;ssl=1" alt="" width="769" height="236" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?resize=1024%2C314&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?resize=300%2C92&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?resize=768%2C236&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?resize=1536%2C472&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?resize=2048%2C629&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?resize=769%2C236&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-rolling-out-as-instance-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">All going well, the database should also appear in the DSM UI:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32559 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?resize=769%2C215&#038;ssl=1" alt="" width="769" height="215" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?resize=1024%2C286&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?resize=300%2C84&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?resize=768%2C214&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?resize=1536%2C429&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?resize=769%2C215&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-dsm-ui.png?w=1928&amp;ssl=1 1928w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">And of course, it should also appear in the Databases view of the Namespace that was chosen for the provisioning. This is only true for Postgres database. As mentioned a few times now, MySQL is still not plumbed up into VCFA, but we do plan to have it included in a future release. From this screen, I can click on the database to see the full YAML manifest as well as retrieve the connection string for the database.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter size-large wp-image-32560" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org.png?resize=769%2C368&#038;ssl=1" alt="" width="769" height="368" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?resize=1024%2C490&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?resize=300%2C144&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?resize=768%2C368&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?resize=1536%2C735&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?resize=2048%2C980&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?resize=769%2C368&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/db-view-in-database-service-vcfa-org-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p>And that completes the deployment of a DSM Postgres database in VCFA using a blueprint template. And of course, you can repeat the same thing for MySQL and create a blueprint template for those database types as well. Then from the catalog, you may also request a MySQL database to be provisioned.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32569 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?resize=769%2C406&#038;ssl=1" alt="" width="769" height="406" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?resize=1024%2C541&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?resize=300%2C158&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?resize=768%2C405&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?resize=1536%2C811&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?resize=769%2C406&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-catalog.png?w=1864&amp;ssl=1 1864w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">When the database is provisioned, you will see it in the &#8220;Instances&#8221; view, but you will not see it in the Databases view for the reasons mentioned previously. However, this might be a sufficient way to track MySQL deployments presently, without having to context switch into the DSM UI.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32571 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?resize=769%2C323&#038;ssl=1" alt="" width="769" height="323" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?resize=1024%2C430&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?resize=300%2C126&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?resize=768%2C323&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?resize=1536%2C645&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?resize=2048%2C860&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?resize=769%2C323&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/mysql-in-instances.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p>If you&#8217;d like to use the blueprints as a starting point, feel free to <a href="https://github.com/cormachogan/vcfa-blueprints" target="_blank" rel="noopener">download them from this public Github repo</a>.</p>
<p>The post <a href="https://cormachogan.com/2025/10/23/dsm-9-0-1-using-vcfa-blueprints-to-provision-databases/">DSM 9.0.1 &#8211; Using VCFA Blueprints to provision databases</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32525</post-id>	</item>
		<item>
		<title>DSM 9.0.1 &#8211; MySQL Database deployments through VCF Automation</title>
		<link>https://cormachogan.com/2025/10/21/dsm-9-0-1-mysql-database-deployments-through-vcf-automation/</link>
					<comments>https://cormachogan.com/2025/10/21/dsm-9-0-1-mysql-database-deployments-through-vcf-automation/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Tue, 21 Oct 2025 13:00:23 +0000</pubDate>
				<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[VCF Automation]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[vSphere]]></category>
		<category><![CDATA[Data Services Manager. DSM]]></category>
		<category><![CDATA[DSM 9.0.1]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[VCFA]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32511</guid>

					<description><![CDATA[<p>In Data Services Manager 9.0.1, we decided to remove the ability to create MySQL Data Service Policies (DSP) from VCF Automation (VCFA) UI until we can also provision MySQL databases end-to-end. Even though you could create a Data Service Policy via the UI in VCFA 9.0/DSM 9.0, you still had to use the API to create the database. We decided this might be a little confusing, so we disabled the MySQL DSP step in the UI for now and will re-enable it when we can provide the ability to create both MySQL DSP and MySQL database. However, for those of&#8230;</p>
<p>The post <a href="https://cormachogan.com/2025/10/21/dsm-9-0-1-mysql-database-deployments-through-vcf-automation/">DSM 9.0.1 &#8211; MySQL Database deployments through VCF Automation</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class=" wp-image-30383 alignleft" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=152%2C123&#038;ssl=1" alt="" width="152" height="123" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=1024%2C831&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=300%2C244&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=768%2C623&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=769%2C624&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?w=1386&amp;ssl=1 1386w" sizes="auto, (max-width: 152px) 100vw, 152px" /></a>In Data Services Manager 9.0.1, we decided to remove the ability to create MySQL Data Service Policies (DSP) from VCF Automation (VCFA) UI until we can also provision MySQL databases end-to-end. Even though you could create a Data Service Policy via the UI in VCFA 9.0/DSM 9.0, you still had to use the API to create the database. We decided this might be a little confusing, so we disabled the MySQL DSP step in the UI for now and will re-enable it when we can provide the ability to create both MySQL DSP and MySQL database. However, for those of you who still wish to provision MySQL databases in VCF Automation, this can be still be achieved through the API. In this post, I will show you how to do this.</p>
<h2>Create a MySQL Data Service Policy</h2>
<p style="text-align: justify;">To begin, login onto the DSM appliance as root. From here we can query some existing Data Service Policy, primarily one that is used in VCF Automation when provisioning Postgres databases. Use the command <em><span style="font-family: 'courier new', courier, monospace;">kg get DataServicePolicies -n dsm-system</span></em>. Here is a Postgres Data Service Policy which allows all tenants in all VCFA organizations (matchCriteria is &#8216;*&#8217;) to provision all versions (again, matchCriteria is &#8216;*&#8217;) of Postgres databases. The infrastructure policy uses a Supervisor namespace as the destination for provisioned databases. This YAML output can now be used as the basis for creating a new MySQL Data Service Policy.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">root@dsm [ ~ ]<i># <strong>kg get DataServicePolicies pg-for-everybody -n dsm-system -o yaml</strong></i></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">apiVersion: infrastructure.dataservices.vmware.com/v1alpha1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kind: DataServicePolicy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">metadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  creationTimestamp: "2025-09-26T11:01:07Z"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  generation: 6</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  labels:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    dsm.vmware.com/created-in: vcfa</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  name: pg-for-everybody</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  namespace: dsm-system</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  resourceVersion: "4349"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  uid: 0dbb1fa7-ecf2-4810-a7eb-1038500c71ab</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">spec:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  description: ""</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  matchCriteria:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  - key: vcfa.vmware.com/org</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    operator: in</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    values:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - '*'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  postgresPolicy:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    allowedReplicas:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - -1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    allowedVersions:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - '*'</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    common:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      allowedBackupLocations:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      - dsm-backups</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      allowedInfrastructurePolicies:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      - dsm-ns-synn6</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  serviceType: vmware-sql-postgres</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">status: {}</span></pre>
<p style="text-align: justify;">Using the above output, we can now proceed with crafting a VCFA Data Services Policy for MySQL. Here is such an example which is essentially a copy of the Postgres one above, but now giving all tenants in all projects in all organizations the ability to provision any version of MySQL.This can be fine-tuned to meet your own specific requirements, such as granting only tenants in certain ORGs with the ability to provision a MySQL database or allowing multiple backup location or allowing multiple infrastructure policies to be selected.</p>
<pre class="p1"><span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">apiVersion: infrastructure.dataservices.vmware.com/v1alpha1</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">kind: DataServicePolicy</span>
<span class="s1" style="font-size: 10pt; font-family: 'courier new', courier, monospace;">metadata:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  labels:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    dsm.vmware.com/created-in: vcfa</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  name: mysql-for-everybody</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  namespace: dsm-system</span>
<span class="s1" style="font-size: 10pt; font-family: 'courier new', courier, monospace;">spec:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  description: ""</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  matchCriteria:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  - key: vcfa.vmware.com/org</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    operator: in</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    values:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    - '*'</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  mysqlPolicy:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    allowedMembers:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    - -1</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    allowedVersions:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    - '*'</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">    common:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">      allowedBackupLocations:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">      - dsm-backups</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">      allowedInfrastructurePolicies:</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">      - dsm-ns-synn6</span>
<span style="font-size: 10pt; font-family: 'courier new', courier, monospace;">  serviceType: vmware-sql-mysql</span></pre>
<p style="text-align: justify;">Use <em>kubectl</em> (or the <em>kg</em> shortcut) in the root shell on the DSM appliance to apply this manifest and create the MySQL Data Service Policy.</p>
<h2>Create a MySQL Database</h2>
<p style="text-align: justify;">With the Data Service Policy now in place, we can turn our attention to creating a new MySQL database in VCF Automation. This step requires access to the VCF CLI tool which is available via the Supervisor API URL, accessible from the Summary tab &gt; Status window of any Namespace in the vSphere Client. In the <strong>Link to CLI Tools</strong>, click Open.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32512" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=512%2C284&#038;ssl=1" alt="" width="512" height="284" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=1024%2C567&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=300%2C166&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=768%2C425&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?resize=769%2C426&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/namespace-summary-cli-tools.png?w=1376&amp;ssl=1 1376w" sizes="auto, (max-width: 512px) 100vw, 512px" /></a></p>
<p style="text-align: justify;">This will take you to the VCF Consumption CLI. Here you can download the VCF CLI tools to match your desktop Operating System. Once downloaded, we can proceed to the next step of building a MySQL database in VCFA using our previously created MySQL Data Service Policy. Note that you will also need access to a <em>kubectl</em> command on your desktop to complete the process.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32513 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page.png?resize=769%2C364&#038;ssl=1" alt="" width="769" height="364" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=1024%2C485&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=300%2C142&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=768%2C364&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=1536%2C727&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=2048%2C970&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?resize=769%2C364&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCF-CLI-landing-page-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">My desktop is running a Windows OS. For a Windows desktop, download the .exe file. I renamed the downloaded exe to <strong>vcf.exe</strong> for simplicity. You will now need your tenant admin to generate a token for access to VCFA. The token can be generated by logging into the ORG portal as the tenant admin, and from the tenant admin User / Account Settings view in the VCFA UI, select the tab for tokens and create a new one if necessary.</p>
<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32522 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?resize=769%2C382&#038;ssl=1" alt="" width="769" height="382" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?resize=1024%2C509&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?resize=300%2C149&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?resize=768%2C381&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?resize=1536%2C763&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?resize=769%2C382&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/VCFA-API-Tokens.png?w=1772&amp;ssl=1 1772w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Finally, you will need to have the Certificate Authority (CA) from VCF Automation, typically called the VCF Operations Fleet Management Locker CA. This can be retrieved by opening a browser to VCFA and retrieving it that way, or from the Certificates section of your VCF Operations UI. Once the CA has been successfully retrieved and stored locally on your desktop, run the following command to create a context for your Org using the VCF CLI. Once the context is created for the Org, contexts for the different projects and namespaces in the Org also become available. The -e is the endpoint which points at the VCF Automation URL. Also include type &#8216;cci&#8217; for Cloud Consumption Interface.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">PS C:\Users\Administrator\Downloads&gt; <strong>.\vcf.exe context create -e https://flt-auto01.rainpole.io 
--api-token &lt;token-value&gt; --tenant-name cjh-org-01 
--ca-certificate '.\VCF Operations Fleet Management Locker CA.crt' 
--type cci</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">? Provide a name for the context:  <strong>cjh-org-01</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">Successfully logged into flt-auto01.rainpole.io
</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">You have access to the following contexts:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">   cjh-org-01</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">   cjh-org-01:dsm-ns-synn6:default-project</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">   cjh-org-01:tenant-ns-4qvxq:default-project
</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">If the namespace context you wish to use is not in this list, you may need to</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">refresh the context again, or contact your cluster administrator.
</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">To change context, use `vcf context use &lt;context_name&gt;`</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cjh-org-01</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cjh-org-01:dsm-ns-synn6:default-project</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] successfully created context: cjh-org-01:tenant-ns-4qvxq:default-project</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">PS C:\Users\Administrator\Downloads&gt;</span></pre>
<p style="text-align: justify;">Next, run the following commands to create the MySQL database in VCFA. In this example, the database creation request is emanating from a tenant namespace called <em>tenant-ns-4qvxq</em> in the Org <em>cjh-org-01</em>. However,  the objects that back the databases are provisioned to a different namespace called <em>dsm-ns-synn6</em> namespace as this is how the Infrastructure Policy has been created (if you are new to VCFA and DSM integration, <a href="https://cormachogan.com/2025/06/24/data-services-manager-9-0-with-vcf-9-0-and-vcf-automation/" target="_blank" rel="noopener">this earlier blog post</a> might be worth reviewing to get an understanding on infra policies). Now with access to the VCF Consumption CLI, you can set the context to &#8220;organization:namespace:project&#8221;, check the MySQL Data Service Policy (DSP) which we created earlier is in place (binding) which means that this namespace is associated with the MySQL DSP, and finally request the creation of a MySQL database using <em>kubectl</em>.</p>
<pre class="p1"><span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">PS C:\Users\Administrator\Downloads&gt; <strong>.\vcf.exe context use cjh-org-01:dsm-ns-synn6:default-project</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] Token is still active. Skipped the token refresh for context "cjh-org-01:dsm-ns-synn6:default-project"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Successfully activated context 'cjh-org-01:dsm-ns-synn6:default-project' (Type: cloud-consumption-interface)</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] Fetching recommended plugins for active context 'cjh-org-01:dsm-ns-synn6:default-project'...</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[i] No image repository override information was found</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">[ok] All recommended plugins are already installed and up-to-date.</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">PS C:\Users\Administrator\Downloads&gt; <strong>.\kubectl.exe get dataservicepolicybindings</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">NAME<span class="Apple-converted-space">      </span>AGE</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">binding <span class="Apple-converted-space">  </span>5d1h</span>

<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">PS C:\Users\Administrator\Downloads&gt; <strong>cat .\mysql.yml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">apiVersion: databases.dataservices.vmware.com/v1alpha1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">kind: MySQLCluster</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">metadata:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  name: mysql-backup-tester</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  namespace: tenant-ns-4qvxq</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">spec:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  backupConfig:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    backupRetentionDays: 30</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    schedules:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    - name: default-full-backup</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      schedule: 59 23 * * 6</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">      type: full</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  backupLocation:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    name: dsm-backups</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  infrastructurePolicy:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    name: dsm-ns-synn6</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  maintenanceWindow:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    duration: 6h0m0s</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    startDay: SATURDAY</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    startTime: "22:59"</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  members: 1</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  storagePolicyName: vSAN Default Storage Policy</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  storageSpace: 20Gi</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  supportAsynchReplicas: true</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  version: 8.0.41+vmware.v9.0.1.0</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">  vmClass:</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">    name:  best-effort-large
</span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">PS C:\Users\Administrator\Downloads&gt; <strong>.\kubectl.exe apply -f .\mysql.yml</strong></span>
<span style="font-family: 'courier new', courier, monospace; font-size: 10pt;">mysqlcluster.databases.dataservices.vmware.com/mysql-backup-tester created</span></pre>
<p style="text-align: justify;">As stated, this database is created from the tenant namespace called called <em>tenant-ns-4qxvq</em> in the organization called <em>cjh-org-01</em> in VCFA. This is possible since this namespace has been granted permission to provision MySQL databases via the MySQL DSP. However, the databases are provisioned to a different namespace called <em>dsm-ns-synn6</em> as this is defined in the infrastructure policy. Since MySQL is not yet plumbed up in VCF Automation Data Services, it will not appear in the databases view in VCFA. However it will appear in the DSM UI:</p>
<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32516 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57.png?resize=769%2C170&#038;ssl=1" alt="" width="769" height="170" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?resize=1024%2C227&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?resize=300%2C66&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?resize=768%2C170&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?resize=1536%2C340&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?resize=2048%2C453&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?resize=769%2C170&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.45.57-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a><br />
<span style="text-align: justify;">And it will also be visible in the vSphere Client as a VKS cluster resource pool and VM in the </span><em style="text-align: justify;">dsm-ns</em><span style="text-align: justify;"> namespace:</span></p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32517 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59.png?resize=769%2C237&#038;ssl=1" alt="" width="769" height="237" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?resize=1024%2C315&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?resize=300%2C92&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?resize=768%2C237&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?resize=1536%2C473&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?resize=2048%2C631&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?resize=769%2C237&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/Screenshot-2025-10-02-at-16.47.59-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">And that is how to create MySQL databases via the VCF Consumption CLI integrated with VCF Automation.</p>
<p>The post <a href="https://cormachogan.com/2025/10/21/dsm-9-0-1-mysql-database-deployments-through-vcf-automation/">DSM 9.0.1 &#8211; MySQL Database deployments through VCF Automation</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cormachogan.com/2025/10/21/dsm-9-0-1-mysql-database-deployments-through-vcf-automation/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32511</post-id>	</item>
		<item>
		<title>DSM 9.0.1 &#8211; VCF Operations 9.0.1 Integration Improvements</title>
		<link>https://cormachogan.com/2025/10/17/dsm-9-0-1-vcf-operations-9-0-1-integration-improvements/</link>
		
		<dc:creator><![CDATA[Cormac]]></dc:creator>
		<pubDate>Fri, 17 Oct 2025 13:00:33 +0000</pubDate>
				<category><![CDATA[Data Services Manager]]></category>
		<category><![CDATA[VCF Operations]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Cloud Foundation (VCF)]]></category>
		<category><![CDATA[Data Services Manager. DSM]]></category>
		<category><![CDATA[DSM 9.0.1]]></category>
		<guid isPermaLink="false">https://cormachogan.com/?p=32480</guid>

					<description><![CDATA[<p>We have made significant improvements to the integration between Data Services Manager (DSM) 9.0.1 and VCF Operations 9.0.1. In version 9.0, the setup to send metrics from DSM to VCF Ops was a little complex, as per this earlier blog post on the subject. In DSM v9.0.1, we&#8217;ve added the majority of the steps into the DSM UI to make it much easier and much more straight to configure. Let&#8217;s see how in this post. First, login to the DSM UI as a DSM Administrator. Navigate to the Settings menu on the left hand side. Here you will find the&#8230;</p>
<p>The post <a href="https://cormachogan.com/2025/10/17/dsm-9-0-1-vcf-operations-9-0-1-integration-improvements/">DSM 9.0.1 &#8211; VCF Operations 9.0.1 Integration Improvements</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class=" wp-image-30383 alignleft" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=151%2C122&#038;ssl=1" alt="" width="151" height="122" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=1024%2C831&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=300%2C244&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=768%2C623&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?resize=769%2C624&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2023/01/dsm-logo-icon.png?w=1386&amp;ssl=1 1386w" sizes="auto, (max-width: 151px) 100vw, 151px" /></a>We have made significant improvements to the integration between Data Services Manager (DSM) 9.0.1 and VCF Operations 9.0.1. In version 9.0, the setup to send metrics from DSM to VCF Ops was a little complex, as per <a href="https://cormachogan.com/2025/07/08/sending-dsm-9-0-metrics-to-vcf-operations/" target="_blank" rel="noopener">this earlier blog post on the subject</a>. In DSM v9.0.1, we&#8217;ve added the majority of the steps into the DSM UI to make it much easier and much more straight to configure. Let&#8217;s see how in this post.</p>
<p style="text-align: justify;">First, login to the DSM UI as a DSM Administrator. Navigate to the Settings menu on the left hand side. Here you will find the <strong>Metrics Forwarding</strong> tab. Select that tab to begin the setup.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-forwarding.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32481 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-forwarding.png?resize=769%2C252&#038;ssl=1" alt="" width="769" height="252" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-forwarding.png?resize=1024%2C336&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-forwarding.png?resize=300%2C98&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-forwarding.png?resize=768%2C252&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-forwarding.png?resize=769%2C252&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-forwarding.png?w=1372&amp;ssl=1 1372w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Click on the &#8220;Configure Metrics Forwarding&#8221; button, and begin to populate details regarding the VCF Operations environment, in particular the Cloud Proxy component. A cloud proxy collects data from the end-point environment and uploads it to VCF Operations. Set the type to <strong>VCF Operations</strong>, then set the URL to be &#8220;<span style="font-family: 'courier new', courier, monospace;">https://&lt;fqdn-of-cloud-proxy&gt;:8443/opensource/default/metric</span>&#8220;. Client Certificate Authentication must be used to connect to VCF Operations. To use this method, you will need to retrieve the certificate and private key from the cloud proxy. This is currently only possible via the API. See <a href="https://cormachogan.com/2025/07/08/sending-dsm-9-0-metrics-to-vcf-operations/" target="_blank" rel="noopener">my previous 9.0 VCF Ops integration post</a> for details on how to retrieve this information. It is not necessary to provide a &#8220;Basic Auth&#8221; username and password when using Client Certificate Authentication.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-1a.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32493" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-1a.png?resize=512%2C321&#038;ssl=1" alt="" width="512" height="321" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-1a.png?resize=1024%2C642&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-1a.png?resize=300%2C188&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-1a.png?resize=768%2C482&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-1a.png?resize=769%2C482&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-1a.png?w=1368&amp;ssl=1 1368w" sizes="auto, (max-width: 512px) 100vw, 512px" /></a></p>
<p style="text-align: justify;">Unless you have already added the Cloud Proxy Certificate Authority to the DSM Trusted Root Certificates, you cannot enable <strong>Skip CA Certificate Verification</strong>. If you do not skip the CA Certificate Verification, you will be prompted to accept the Certificate Authority (CA) when it is presented to you during the configuration. The <strong>Custom Headers</strong> sections is for customers who want to add them to help routing, authentication, traceability, etc. Otherwise this field, which is optional, can be left blank. Similarly, Timeout in seconds should be fine at the default value of 5, but this is tuneable.</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-2a.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32494" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-2a.png?resize=512%2C433&#038;ssl=1" alt="" width="512" height="433" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-2a.png?resize=1024%2C865&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-2a.png?resize=300%2C254&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-2a.png?resize=768%2C649&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-2a.png?resize=769%2C650&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configure-metrics-2a.png?w=1368&amp;ssl=1 1368w" sizes="auto, (max-width: 512px) 100vw, 512px" /></a></p>
<p>&nbsp;</p>
<p style="text-align: justify;">Review the settings. Click Configure. If everything is configured correctly, then the following <strong>Ready</strong> status should be observed in the Metrics Forwarding view:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32495 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?resize=769%2C404&#038;ssl=1" alt="" width="769" height="404" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?resize=1024%2C538&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?resize=300%2C158&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?resize=768%2C403&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?resize=1536%2C807&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?resize=2048%2C1076&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/configuration-complete-new.png?resize=769%2C404&amp;ssl=1 769w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">We can now turn our attention to viewing those metrics in VCF Operations. After approximately 15 minutes, metrics from DSM should be flowing into VCF Operations (the existing DSM databases will need to restart to redirect their metrics to the VCF Operations endpoint). In VCF Operations UI, do a search on the keyword &#8220;dsm&#8221; to find the metrics. Look for the <strong>dsmpostgres_GENERIC </strong>for Postgres database or <strong>dsmmysql_Generic</strong> for MySQL databases. These are the objects with the actual actual metrics:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32486 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?resize=769%2C255&#038;ssl=1" alt="" width="769" height="255" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?resize=1024%2C339&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?resize=300%2C99&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?resize=768%2C254&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?resize=1536%2C508&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?resize=2048%2C678&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/search-on-dsm.png?resize=769%2C254&amp;ssl=1 769w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">Drilling into these objects by clicking on them, you can locate the metrics that are being sent via the DSM Postgres database:</p>
<p><a href="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?ssl=1" target="_blank" rel="noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" class="aligncenter wp-image-32487 size-large" src="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics.png?resize=769%2C308&#038;ssl=1" alt="" width="769" height="308" srcset="https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?resize=1024%2C410&amp;ssl=1 1024w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?resize=300%2C120&amp;ssl=1 300w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?resize=768%2C308&amp;ssl=1 768w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?resize=1536%2C615&amp;ssl=1 1536w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?resize=2048%2C820&amp;ssl=1 2048w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?resize=769%2C308&amp;ssl=1 769w, https://i0.wp.com/cormachogan.com/wp-content/uploads/2025/10/select-dsm-metrics-scaled.png?w=2307&amp;ssl=1 2307w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></p>
<p style="text-align: justify;">You can now proceed with building dashboards to highlight the metrics from your database that you are most interested in. This is a much improved user experience than what we had in version 9.0. Thanks for reading this far. Hope you find this information useful. You can find all <a href="https://cormachogan.com/dsm-data-services-manager/" target="_blank" rel="noopener">my DSM related posts at this link</a>.</p>
<p>The post <a href="https://cormachogan.com/2025/10/17/dsm-9-0-1-vcf-operations-9-0-1-integration-improvements/">DSM 9.0.1 &#8211; VCF Operations 9.0.1 Integration Improvements</a> appeared first on <a href="https://cormachogan.com">CormacHogan.com</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">32480</post-id>	</item>
	</channel>
</rss>
