{"id":1299,"date":"2021-05-25T18:10:34","date_gmt":"2021-05-25T18:10:34","guid":{"rendered":"https:\/\/www.nicktailor.com\/?p=1299"},"modified":"2021-05-26T12:38:48","modified_gmt":"2021-05-26T12:38:48","slug":"create-snapshots-with-ansible-vmware","status":"publish","type":"post","link":"https:\/\/nicktailor.com\/tech-blog\/create-snapshots-with-ansible-vmware\/","title":{"rendered":"How to create snapshots with Ansible (VMware)"},"content":{"rendered":"<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><strong>Okay, so lots of folks ask me about this, and there are a number of ways you can do this.<\/strong><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><strong>But if you\u2019re using vmware and redhat satellite for central patch management for your redhat environment. <\/strong><\/p>\n<p><strong>Then depending on how you patch your systems. If you snapshot every group prior to patching. Then this post will be perfect for you.<\/strong><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><strong>Patching Processes:<\/strong><\/p>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">1.<\/span>Snapshot every vm in your group using ansible<\/strong><\/div>\n<div>\u00a0 \u00a0<strong>\u00a0 \u00a02.\u00a0 \u00a0Update your host content-views in satellite and clear yum caches &#8211;<br \/>\n<span style=\"color: #ff0000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8211; (these are not in this <\/span><span style=\"color: #ff0000;\">post)\u00a0<\/span>part 2<br \/>\n<\/strong><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">3.<\/span>Patch all your servers using ansible &#8211; <span style=\"color: #ff0000;\">(these are not in this <\/span><span style=\"color: #ff0000;\">post)<\/span> part 3<\/strong><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">4..<\/span>Reboot all your servers <span style=\"color: #ff0000;\">(these are not in this post)<\/span> <span style=\"color: #ff0000;\">\u2013 <\/span><span style=\"color: #000000;\">part 4<\/span><\/strong><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">5..<\/span>Test to ensure they all came back up <span style=\"color: #ff0000;\">(<\/span><span style=\"color: #ff0000;\">these <\/span><span style=\"color: #ff0000;\">not in this post for now)<\/span> <span style=\"color: #000000;\">part 5<\/span><\/strong><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><em><strong><span style=\"color: #7030a0;\"><em>Note: There is a step to change the content view of all your hosts and cleaning your yum repos on all the hosts. I have not written a post on this step yet, but you should obviously automate that. I will eventually get around to including it, when I have some time.<\/em><\/span><\/strong><\/em><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><strong>Pre-requisites: Assumed.<\/strong><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #c00000;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #c00000;\">Ansible 2.9 <\/span><span style=\"color: #c00000;\">installed and configured with python3<\/span><\/strong><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #c00000;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #c00000;\">VMware<\/span><span style=\"color: #c00000;\"> Community modules configured<\/span><\/strong><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #c00000;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #c00000;\">VMware<\/span><span style=\"color: #c00000;\"> group variables previously defined for VM<\/span><span style=\"color: #c00000;\">ware<\/span> <span style=\"color: #c00000;\">deployments(<\/span><span style=\"color: #c00000;\">Is helpful)<\/span><\/strong><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #c00000;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><span style=\"color: #c00000;\">VMware<\/span><span style=\"color: #c00000;\"> user\/password configure with being able to create <\/span><span style=\"color: #c00000;\">snaphots<\/span><span style=\"color: #c00000;\"> in either <\/span><span style=\"color: #c00000;\">datacenters<\/span><span style=\"color: #c00000;\"> you have<\/span><\/strong><\/div>\n<p style=\"text-align: left; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><strong>Step by Step:<\/strong><\/p>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt;\">1.<\/span>Create a roles directory inside \/etc\/ansible\/roles<\/strong><\/div>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">a.<\/span><em>mkdir -p \/etc\/ansible\/roles\/create-snapshot\/tasks<\/em><\/strong><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\">\n<p><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">b.<\/span>mkdir -p \/etc\/ansible\/roles\/create-snapshot\/defaults<\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\">\n<p><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt;\">2.<\/span>Now you want to create a task for the snapshots.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><em><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">c.<\/span>Inside \/etc\/ansible\/roles\/create-snapshot\/tasks\/<\/strong><\/em><\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\">\n<p><em><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">d.<\/span>Create a file called main.yml<\/strong><\/em><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\">\n<p><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt;\">3.<\/span>Add the following code and save the file<\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">&#8211; name: Login into vCenter and get cookies<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0delegate_to: localhost<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0uri:<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">url: https:\/\/{{ vcenter_host }}\/rest\/com\/vmware\/cis\/session<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0force_basic_auth: yes<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0validate_certs: no<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">method: POST<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">user: &#8216;{{ vcenter_username }}&#8217;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">password: &#8216;{{ vcenter_password }}&#8217;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">register: login<\/h2>\n<p>&nbsp;<\/p>\n<p><strong><span style=\"color: #7030a0;\"><em>Note: Okay so what we want to do is find the virtual machine in <\/em><\/span><span style=\"color: #7030a0;\"><em>vsphere<\/em><\/span><span style=\"color: #7030a0;\"><em> by name and then grab its folder value and pass it as a variable so you don\u2019t need to define it statically in your <\/em><\/span><span style=\"color: #7030a0;\"><em>host_var<\/em><\/span><span style=\"color: #7030a0;\"><em>. The main reason is, say you deployed a <\/em><\/span><span style=\"color: #7030a0;\"><em>vm<\/em><\/span><span style=\"color: #7030a0;\"><em> and months later moved it to another folder, your code will likely have the origin folder which would be <\/em><\/span><span style=\"color: #7030a0;\"><em>annoying, and the ansible documentation doesn\u2019t really cover this approach, you basically figure it out as you do it. So <\/em><\/span><span style=\"color: #7030a0;\"><em>im<\/em><\/span><span style=\"color: #7030a0;\"><em> going to save you all time. Here is how you do it. The below will gather <\/em><\/span><span style=\"color: #7030a0;\"><em>vm_facts<\/em><\/span><span style=\"color: #7030a0;\"><em> based on the <\/em><\/span><\/strong><span style=\"color: #7030a0;\"><em><strong>inventory_hostname<\/strong><br \/>\n<\/em><\/span><\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">&#8211; name: Find Guest&#8217;s Folder using name<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0vmware_guest_find:<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">hostname: &#8220;{{ vcenter_host }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">username: &#8220;{{ vcenter_username }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">password: &#8220;{{ vcenter_password }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0validate_certs: no<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">name: &#8220;{{ inventory_hostname }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0delegate_to: localhost<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0ignore_errors: true<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">register: vm_facts<\/h2>\n<p>&nbsp;<\/p>\n<p><strong><em><span style=\"color: #7030a0;\">Note: It will than gather those facts and find the folder value<\/span><span style=\"color: #7030a0;\">. You then register the facts to a variable \u201c<\/span><span style=\"color: #7030a0;\">vm_facts<\/span><span style=\"color: #7030a0;\">\u201d Now it will spit out what it finds when you do &#8211;<\/span><span style=\"color: #7030a0;\">vvvv<\/span><span style=\"color: #7030a0;\"> when you do your play. From there you can see the folder setting. You now want to set that that folder setting as its own variable that you can pass to another task as indicated below.<\/span><\/em><\/strong><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\">ok: [<\/span><span style=\"color: #0070c0;\">ansible-server<\/span><span style=\"color: #0070c0;\">] =&gt; {<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;changed&#8221;: false,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\">\u00a0\u00a0\u00a0\u00a0<\/span><strong><span style=\"color: #0070c0;\">&#8220;folders&#8221;: [<\/span><\/strong><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><strong><span style=\"color: #0070c0;\"> &#8220;\/<\/span><span style=\"color: #0070c0;\">SysUnix<\/span><span style=\"color: #0070c0;\">\/<\/span><span style=\"color: #0070c0;\">Test<\/span><span style=\"color: #0070c0;\">stuff<\/span><span style=\"color: #0070c0;\">&#8220;<\/span><\/strong><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><strong><span style=\"color: #0070c0;\"> ],<\/span><\/strong><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;invocation&#8221;: {<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;<\/span><span style=\"color: #0070c0;\">module_args<\/span><span style=\"color: #0070c0;\">&#8220;: {<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;<\/span><span style=\"color: #0070c0;\">datacenter<\/span><span style=\"color: #0070c0;\">&#8220;: null,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;hostname&#8221;: &#8220;<\/span><span style=\"color: #0070c0;\">vmware.nicktailor.com<\/span><span style=\"color: #0070c0;\">&#8220;,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;name&#8221;: &#8220;<\/span> <span style=\"color: #0070c0;\">ansible-server<\/span><span style=\"color: #0070c0;\">&#8220;,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;password&#8221;: &#8220;VALUE_SPECIFIED_IN_NO_LOG_PARAMETER&#8221;,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;port&#8221;: 443,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;<\/span><span style=\"color: #0070c0;\">proxy_host<\/span><span style=\"color: #0070c0;\">&#8220;: null,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;<\/span><span style=\"color: #0070c0;\">proxy_port<\/span><span style=\"color: #0070c0;\">&#8220;: null,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;<\/span><span style=\"color: #0070c0;\">use_instance_uuid<\/span><span style=\"color: #0070c0;\">&#8220;: false,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;username&#8221;: &#8220;admin<\/span><span style=\"color: #0070c0;\">&#8220;,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;<\/span><span style=\"color: #0070c0;\">uuid<\/span><span style=\"color: #0070c0;\">&#8220;: null,<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> &#8220;<\/span><span style=\"color: #0070c0;\">validate_certs<\/span><span style=\"color: #0070c0;\">&#8220;: false<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> }<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\"> }<\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><span style=\"color: #0070c0;\">}<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">&#8211; name: &#8220;vm_folder &#8211; setting folder value&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0set_fact:<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0folder : &#8220;{{ vm_facts.folders }}&#8221;<\/h2>\n<p>&nbsp;<\/p>\n<p><strong><em><span style=\"color: #7030a0;\">Note:<\/span> <span style=\"color: #7030a0;\">So you can see that the facts has a sub fact called \u201cfolders\u201d. We want to pass that by setting that value as its own variable by making it a fact. Ansible way to set variables is setting facts. So we make that value above into a variable \u201c<\/span><span style=\"color: #7030a0;\">vm_<\/span><span style=\"color: #7030a0;\">facts.folders<\/span><span style=\"color: #7030a0;\">\u201d and then pass that into the next task where it asks for folders.<\/span><span style=\"color: #7030a0;\"> This will get around the having to provide the exact folder the <\/span><span style=\"color: #7030a0;\">vm_resides<\/span><\/em><\/strong><span style=\"color: #7030a0;\"><strong><em> to create snapshotting for an array of hosts.<\/em><\/strong><br \/>\n<\/span><\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">&#8211; name: Create Snapshot<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0vmware_guest_snapshot:<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">hostname: &#8220;{{ vcenter_host }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">username: &#8220;{{ vcenter_username }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">password: &#8220;{{ vcenter_password }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0datacenter: &#8220;{{ vcenter_dc }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0validate_certs: no<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">name: &#8220;{{ inventory_hostname }}&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">state: present<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0snapshot_name: &#8220;Ansible Managed Snapshot&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0<strong>folder: &#8220;&#8216;{{ vm_facts.folders }}'&#8221;<\/strong><\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">description: &#8220;This snapshot is created by Ansible Playbook&#8221;<\/h2>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.3; color: #2f5496; font-size: 13pt;\">\u00a0\u00a0delegate_to: localhost<\/h2>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt;\">4.<\/span>Save the file<\/strong><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt;\">5.<\/span>You can either have <span style=\"color: #0070c0;\">group_vars<\/span> set up for individual datacenters, but for now just define the variables under \/etc\/ansible\/roles\/create-snapshot\/defaults<\/strong><\/div>\n<p style=\"text-align: left; margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><strong><span style=\"color: #7030a0;\"><em>Note: You will likely have a <\/em><\/span><span style=\"color: #7030a0;\"><em>group_var<\/em><\/span><span style=\"color: #7030a0;\"><em> from you <\/em><\/span><span style=\"color: #7030a0;\"><em>vmdeploy<\/em><\/span><span style=\"color: #7030a0;\"><em> role that you can use for here.<\/em><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-bottom: 0; padding-bottom: 0; line-height: 1.3; margin-left: 36pt;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 8pt; padding-bottom: 0; line-height: 1.3; margin-left: 72pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">e.<\/span>Create a file called main.yml and the following variables<\/strong><\/div>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 108pt;\"><strong><span style=\"color: #0070c0;\">vcenter_username<\/span><span style=\"color: #0070c0;\">: <\/span><span style=\"color: #0070c0;\">admin<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 108pt;\"><strong><span style=\"color: #0070c0;\">vcenter_password<\/span><span style=\"color: #0070c0;\">: <\/span><span style=\"color: #0070c0;\">should be vault encrypted variable<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 108pt;\"><strong><span style=\"color: #0070c0;\">vcenter_host<\/span><span style=\"color: #0070c0;\">: <\/span><span style=\"color: #0070c0;\">vmware.nicktailor.com<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 108pt;\"><strong><span style=\"color: #0070c0;\">vcenter_dc<\/span><span style=\"color: #0070c0;\">: <\/span><span style=\"color: #0070c0;\">London<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 108pt;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 108pt;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 72pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">f.<\/span><span style=\"color: #000000;\">Save the file<\/span><\/strong><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<div class=\"ul\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 54pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #0070c0;\"><span style=\"position: absolute; top: -0.34em; left: 0; font-size: 2em;\">\u2022<\/span>\u00a0<\/span><em><span style=\"color: #7030a0;\">Note: Ensure your host<\/span><span style=\"color: #7030a0;\"> \u201cnicktest1\u201d<\/span><span style=\"color: #7030a0;\"> is listed in your inventory host file. <\/span><\/em><\/strong><br \/>\n<strong><span style=\"color: #0070c0;\"><em>\/etc\/ansible\/inventory\/TEST\/hosts<\/em><\/span><\/strong><\/div>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 18pt;\"><strong><span style=\"color: #000000;\">Run your playbook: from <\/span><span style=\"color: #7030a0;\">\/etc\/ansible<\/span><\/strong><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 18pt;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">1.<\/span><span style=\"color: #7030a0;\">ansible-playbook &#8211;<\/span><span style=\"color: #7030a0;\">i<\/span><span style=\"color: #7030a0;\"> inventory\/TEST\/hosts <\/span><span style=\"color: #7030a0;\">justcreatevmsnap.yml<\/span><span style=\"color: #7030a0;\"> &#8211;ask-vault-pass &#8211;limit=&#8217;<\/span><span style=\"color: #7030a0;\">nicktest1<\/span><span style=\"color: #7030a0;\">&#8216; <\/span><\/strong><\/div>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #000000;\">Playbook log:<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #0070c0;\">[<\/span><span style=\"color: #0070c0;\">root@ansible<\/span><span style=\"color: #0070c0;\">&#8211;<\/span><span style=\"color: #0070c0;\">server<\/span><span style=\"color: #0070c0;\">]#<\/span><span style=\"color: #0070c0;\"> ansible-playbook &#8211;<\/span><span style=\"color: #0070c0;\">i<\/span><span style=\"color: #0070c0;\"> inventory\/TEST\/hosts <\/span><span style=\"color: #0070c0;\">justcreatevmsnap.yml<\/span><span style=\"color: #0070c0;\"> &#8211;ask-vault-pass &#8211;limit=&#8217;<\/span><span style=\"color: #0070c0;\">nicktest1<\/span><span style=\"color: #0070c0;\">&#8216;<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #0070c0;\">Vault password:<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">PLAY [all] **********************************************************************************************************************************<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">TASK [<\/span><span style=\"color: #00b050;\">create_<\/span><span style=\"color: #00b050;\">snapshot<\/span><span style=\"color: #00b050;\"> :<\/span><span style=\"color: #00b050;\"> Login into vCenter and get cookies] *********************************************************************************<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">ok: [<\/span><span style=\"color: #00b050;\">nicktest1<\/span><span style=\"color: #00b050;\">]<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">TASK [<\/span><span style=\"color: #00b050;\">create_<\/span><span style=\"color: #00b050;\">snapshot<\/span><span style=\"color: #00b050;\"> :<\/span><span style=\"color: #00b050;\"> Find Guest&#8217;s Folder using name] *************************************************************************************<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">ok: [<\/span><span style=\"color: #00b050;\">nicktest1<\/span><span style=\"color: #00b050;\">]<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">TASK [<\/span><span style=\"color: #00b050;\">create_<\/span><span style=\"color: #00b050;\">snapshot<\/span><span style=\"color: #00b050;\"> :<\/span> <span style=\"color: #00b050;\">vm_folder<\/span><span style=\"color: #00b050;\"> &#8211; setting folder value] ***********************************************************************************<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">ok: [<\/span><span style=\"color: #00b050;\">nicktest1<\/span><span style=\"color: #00b050;\">]<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">TASK [<\/span><span style=\"color: #00b050;\">create_<\/span><span style=\"color: #00b050;\">snapshot<\/span><span style=\"color: #00b050;\"> :<\/span><span style=\"color: #00b050;\"> Create Snapshot] ****************************************************************************************************<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">ok: [<\/span><span style=\"color: #00b050;\">nicktest1<\/span><span style=\"color: #00b050;\">]<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">PLAY RECAP **********************************************************************************************************************************<\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #00b050;\">nicktest1<\/span><span style=\"color: #00b050;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #00b050;\"> :<\/span><span style=\"color: #00b050;\"> ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0<br \/>\n<\/span><\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2; margin-left: 36pt;\"><strong><span style=\"display: inline-block; position: relative; text-indent: -18pt; color: #000000;\">2.<\/span><span style=\"color: #000000;\">Go log into <\/span><span style=\"color: #000000;\">vsphere<\/span><span style=\"color: #000000;\"> and check to see the <\/span><span style=\"color: #000000;\">vm<\/span><span style=\"color: #000000;\"> has a snapshot name \u201cansible created snapshot\u201d if it does it worked.<\/span><\/strong><\/div>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/strong><\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1.2;\"><strong><span style=\"color: #7030a0;\"><em>Note: This uses the snapshot name to create. If another snapshot exists with a different name it will ignore it entirely. If you pass snapshot variable with another name and run the book again, it will create another snapshot. The same <\/em><\/span><span style=\"color: #7030a0;\"><em>applies to removing snapshots, it will remove based on the name. We will cover that in my post to remove snapshots.<\/em><\/span><\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Okay, so lots of folks ask me about this, and there are a number of ways you can do this. But if you\u2019re using vmware and redhat satellite for central patch management for your redhat environment. Then depending on how you patch your systems. If you snapshot every group prior to patching. Then this post will be perfect for you.<a href=\"https:\/\/nicktailor.com\/tech-blog\/create-snapshots-with-ansible-vmware\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51,133,129],"tags":[],"class_list":["post-1299","post","type-post","status-publish","format-standard","hentry","category-ansible","category-snapshots","category-vmware"],"_links":{"self":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=1299"}],"version-history":[{"count":35,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1299\/revisions"}],"predecessor-version":[{"id":1352,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1299\/revisions\/1352"}],"wp:attachment":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=1299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=1299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=1299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}