Ansible vsphere_guest with openSUSE 小記-2
OS: openSUSE Leap 42.1
Ansible: 2.1.0.0
Module: vsphere_guest
昨天嘗試的是用 vsphere_guest 來新增刪除某一個 VM
今天則是用 Loops 的方式
- 改為增加多個 guest VM
- 詢問 template 名稱
檔案 test_vsphere_guest_deploy_from_template.yml
- name: Testing vsphere_guest module in VMware
# 這邊自己習慣控管 VMware 的是用本機
# 配合 hosts 內的 ansible_connection=local
hosts: localhost
connection: local
# 這種方式還不錯, 透過提示來輸入相關變數
vars_prompt:
# 這邊的 name 就會是變數的名稱
- name: "vcenter_hostname"
# 設定提示文字
prompt: "Enter vcenter hostname"
# private 設定為 no 會顯示輸入的內容
private: no
# 這邊可以設定預設值
default: "vcsa"
- name: "vcenter_user"
prompt: "Enter vCenter username"
private: no
default: root
- name: "vcenter_pass"
prompt: "Enter vcenter password"
# private 設定為 yes 會顯示輸入的內容
private: yes
- name: "esxi_hostname"
prompt: "Enter esxi hostname"
private: no
- name: "template_name"
prompt: "Enter Template name"
private: no
default: openSUSELeap42.1_Training_Template
tasks:
- name: Create VM from template
# 可以用 with_sequence 方式, %0x 為序號, x 為16進制, 所以我用 10進制 u
# 如果是 %02x 就是 2位數, 例如 server00
# 如果只設定 server%0x , 但是超出1位數, 例如 1 to 10, 最後一個會變成 servera
# stride=2 代表間隔是 2
with_sequence: start=1 end=10 stride=1 format=server%02u
# 用 with_item 正面表列
# with_items:
# - server01
# - server02
# 使用 vsphere_guest 來設定相關工作
vsphere_guest:
# vCenter 的 IP 或是 FQDN, 這邊用上面的變數讓使用者輸入
vcenter_hostname: "{{ vcenter_hostname }}"
# Ansible 2.1 以後的版本可以設定 validate_certs, 預設會檢查 SSL certs, 如果是自己架設的vC, 可以設定no
validate_certs: no
# vCenter 上面的使用者名稱, 對應上面的變數
username: "{{ vcenter_user }}"
# vCenter 使用者的密碼, 對應上面的變數
password: "{{ vcenter_pass }}"
# 要針對的 VMware guest 名稱
guest: "{{ item }}"
# 從範本複製
# 如果有 from_template 就不能設定 state
from_template: yes
# 範本名稱
template_src: "{{ template_name }}"
# 複製範本完是否要開機, 預設是 yes
power_on_after_clone: no
# 要佈署的 esxi 主機
esxi:
datacenter: Lab
hostname: "{{ esxi_hostname }}"
# 目前測試 resource_pool 沒有成功
# resource_pool: "/Resources"
然後應用相同的方式也讓刪除 VM 可以刪除多個
測試 reconfig 功能
- 目前只支援 cdroom, mem 還有 cpu 數量的更改
檔案 test_vsphere_guest_reconfig_vm.yml
- name: Testing vsphere_guest module in VMware
# 這邊自己習慣控管 VMware 的是用本機
# 配合 hosts 內的 ansible_connection=local
hosts: localhost
connection: local
# 這種方式還不錯, 透過提示來輸入相關變數
vars_prompt:
# 這邊的 name 就會是變數的名稱
- name: "vcenter_hostname"
# 設定提示文字
prompt: "Enter vcenter hostname"
# private 設定為 no 會顯示輸入的內容
private: no
# 這邊可以設定預設值
default: "vcsa"
- name: "vcenter_user"
prompt: "Enter vCenter username"
private: no
default: root
- name: "vcenter_pass"
prompt: "Enter vcenter password"
# private 設定為 yes 會顯示輸入的內容
private: yes
- name: "esxi_hostname"
prompt: "Enter esxi hostname"
private: no
tasks:
- name: Reconfig VM
# 'reconfigured' only applies changes to 'vm_cdrom', 'memory_mb', and 'num_cpus' in vm_hardware parameter.
#
# 可以用 with_sequence 方式, %0x 為序號, 10進制是用 u, 所以用 %02u
# 如果是 %02x 就是 2位數, 例如 server00
# 如果只設定 server%0x , 但是超出1位數, 例如 1 to 10, 最後一個會變成 servera
with_sequence: start=1 end=5 stride=1 format=server%02u
# 用 with_item 正面表列
# with_items:
# - server01
# - server02
# 使用 vsphere_guest 來設定相關工作
vsphere_guest:
# vCenter 的 IP 或是 FQDN, 這邊用上面的變數讓使用者輸入
vcenter_hostname: "{{ vcenter_hostname }}"
# Ansible 2.1 以後的版本可以設定 validate_certs, 預設會檢查 SSL certs, 如果是自己架設的vC, 可以設定no
validate_certs: no
# vCenter 上面的使用者名稱, 對應上面的變數
username: "{{ vcenter_user }}"
# vCenter 使用者的密碼, 對應上面的變數
password: "{{ vcenter_pass }}"
# 要針對的 VMware guest 名稱
guest: "{{ item }}"
# 如果有 from_template 就不能設定 state
state: reconfigured
vm_hardware:
memory_mb: 2048
# num_cpus: 4
# 如果設定 force: yes, 就會先關機然後設定再開機
# 有些設定必須在 VM 關機的狀況才能實施
force: yes
# 要佈署的 esxi 主機
esxi:
datacenter: Lab
hostname: "{{ esxi_hostname }}"
另外就是建立 VM 設定檔
- 只有建立新 VM 設定檔, 沒有包含安裝
- folder的話要是範本與機器有的folder
檔案 test_vsphere_guest_create_newvm.yml
- name: Testing vsphere_guest module in VMware
# 這邊自己習慣控管 VMware 的是用本機
# 配合 hosts 內的 ansible_connection=local
hosts: localhost
connection: local
# 這種方式還不錯, 透過提示來輸入相關變數
vars_prompt:
# 這邊的 name 就會是變數的名稱
- name: "vcenter_hostname"
# 設定提示文字
prompt: "Enter vcenter hostname"
# private 設定為 no 會顯示輸入的內容
private: no
# 這邊可以設定預設值
default: "vcsa"
- name: "vcenter_user"
prompt: "Enter vCenter username"
private: no
default: root
- name: "vcenter_pass"
prompt: "Enter vcenter password"
# private 設定為 yes 會顯示輸入的內容
private: yes
- name: "esxi_hostname"
prompt: "Enter esxi hostname"
private: no
tasks:
- name: Create New VM
# 可以用 with_sequence 方式, %0x 為序號
# 如果是 %02x 就是 2位數, 例如 server00
# 如果只設定 server%0x , 但是超出1位數, 例如 1 to 10, 最後一個會變成 servera
# stride=2 代表間隔是 2
with_sequence: start=0 end=1 stride=1 format=server%02x
# 用 with_item 正面表列
# with_items:
# - server01
# - server02
# 使用 vsphere_guest 來設定相關工作
vsphere_guest:
# vCenter 的 IP 或是 FQDN, 這邊用上面的變數讓使用者輸入
vcenter_hostname: "{{ vcenter_hostname }}"
# Ansible 2.1 以後的版本可以設定 validate_certs, 預設會檢查 SSL certs, 如果是自己架設的vC, 可以設定no
validate_certs: no
# vCenter 上面的使用者名稱, 對應上面的變數
username: "{{ vcenter_user }}"
# vCenter 使用者的密碼, 對應上面的變數
password: "{{ vcenter_pass }}"
# 要針對的 VMware guest 名稱
guest: "{{ item }}"
#
# 如果有 from_template 就不能設定 state
state: powered_off
#
vm_extra_config:
vcpu.hotadd: yes
mem.hotadd: yes
notes: Create by Ansible
# 這邊的 Folder 必須是在虛擬機器與範本下的 folder, 不是主機與叢集下的 folder
folder: Ansible
resource_pool: "Resources"
vm_disk:
disk1:
size_gb: 10
type: thin
datastore: Local_30.3
#
vm_nic:
nic1:
type: vmxnet3
network: Lab-192-168-100
network_type: standard
#
vm_hardware:
memory_mb: 2048
num_cpus: 2
# osid 可以參考 https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
osid: sles11_64Guest
scsi: paravirtual
vm_cdrom:
type: "iso"
iso_path: "Local_30.3/ISO/SLE-12-SP1-Server-DVD-x86_64-GM-DVD1.iso"
# VMware 硬體版本
vm_hw_version: vmx-08
# 要佈署的 esxi 主機
esxi:
datacenter: Lab
hostname: "{{ esxi_hostname }}"
先記下來
~ enjoy it
沒有留言:
張貼留言