Skip to main content

How to Automate Snapshot on Virtual Machine

I always treat virtual machine snapshots like a big risk. It caused several outages in our infrastructure. Please check out Best practices for virtual machine snapshots in the VMware to understand how it impacts production.

虚拟机快照对我来说绝对是个大威胁,已经在我的生产环境里发生过好几次由此引发的故障了。如果你要了解快照对生产环境的影响可以看看:Best practices for virtual machine snapshots in the VMware



It's better delete snapshots as early as possible. But what if you have a large infrastructure? Application teams request to create snapshots before changing, delete after validation. You may get dozens snapshot requests every month. People talk about snapshot automation in community, there are several ways to get it done. Here are scripts I wrote to automate creating/deleting snapshots.

You can run its by scheduling a job on Windows Secheduled Tasks. The scripts have friendly logging system, you could easy figure out why script stops running. Its also write error code and detail to Windows Event Log, you may need it for ticketing system (Some monitor systems, such as SCOM, can capture specified Windows Event ID and create tickets  in ticketing system). You can also create a troubleshooting guide on your website and put the URL on variable $TroubleshootingGuide. It presents on detail of the Windows Event log.

Particular for Snapshot Creation Script. I know vCenter Server Scheduled Task can do same, but my script always keeps two snapshots and delete oldest one when 3rd snapshot is created. The script was wrote long time back, it's not very strong. It's just for special requirement.

---Chinese Version---

人们都在说尽快删除快照,但是如果你的基础架构比较大,几乎每个月你可能都会接到很多要求创建快照的请求,应用层的部门在做变更前会要求创建快照,然后在变更后要求删除快照。想想都会疯。我看到有人在社区里讨论如何将快照自动化,也提供了很多实现的方式。我也写了个创建和删除快照的脚本,下面共享给大家。

你可以在Windows计划任务中定时运行这个脚本。它的日志系统很友好,如果运行出错了,你可以通过日志快速获得出错原因。它还可以将错误代码写入Windows日志,这个对于工单系统非常有用(例如SCOM就可以通过监视自定义的日志代码触发在工单系统中开case)。你也可以在变量$TroubleshootingGuide中添加排错手册的地址,它会显示在日志详情中。

Snapshot Creation Script比较特殊。我知道vCenter Server Scheduled Task也可以实现创建快照的功能,但这个脚本可以保持始终有两个快照,当第三个快照生成时会删除最老的快照。这个脚本是我很早前写的,不是很严谨,只是为了特殊需求写的。

Snapshot Creation Script

Snapshot Deletion Script

Popular posts from this blog

Connect-NsxtServer shows "Unable to connect to the remote server"

When you run Connect-NsxtServer in the PowerCLI, it may show "Unable to connect to the remote server".  Because the error message is a little bit confusing with other login issues. It's not easy to troubleshoot. The actual reason is the NSX-T uses a self-signed certificate, and the PowerCLI cannot accept the certificate automatically. The fix is super easy. You need to set the PowerCLI to ignore the invalid certificate with the following command: Set-PowerCLIConfiguration -Scope User -InvalidCertificateAction:Ignore -Confirm:$false

Setup Terraform and Ansible for Windows provisionon CentOS

Provisioning Windows machines with Terraform is easy. Configuring Windows machines with Ansible is also not complex. However, it's a little bit challenging to combine them. The following steps are some ideas about handling a Windows machine from provisioning to post configuration without modifying the winrm configuration on the guest operating system. Install required repos for yum. yum -y install https://repo.ius.io/ius-release-el7.rpm yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm yum -y install epel-release yum -y install yum-utils yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo Install  Terraform . sudo yum -y install terraform Install  Ansible . sudo yum -y install ansible Install  Kerberos . yum -y install gcc python-devel krb5-devel krb5-libs krb5-workstation

How to List All Users in Terraform Cloud

Terraform has a rich API. However, the API documentation does not mention how to list all users. We can leverage the organization membership API and the PowerShell command  Invoke-RestMethod  to get a user list. 1. Create an organization token in Terraform Cloud. 2. Create the token variable ( $Token ) in PowerShell. $Token = "abcde" 3. Create the API parameters variable in PowerShell. $params = @{ Uri = "https://app.terraform.io/api/v2/organizations/ZHENGWU/organization-memberships?page%5Bsize%5D=100" Authentication = "Bearer" Token = $Token ContentType = "application/vnd.api+json" } Note: You need to replace ZHENGWU with your own organization name. And I used 100 at the end of the URI to retrieve the first 100 users. It can be any number.  4. Retrieve the API return and list the user's email address. $Test = Invoke-RestMethod @params $Test.data.attributes.email