ansible建立vmware虛擬機器
阿新 • • 發佈:2018-11-12
環境:vmware 虛擬化
需求:業務部門一次提幾十臺甚至幾百臺虛擬機器需求
之前不管這一塊,由於人員減少,臨時需求也要搞搞了
使用ansible vmware_guest 建立虛擬機器,避免手動一臺一臺建立的純手工 工作
廢話不多說,上程式碼
--- - hosts: localhost ## 在本機執行 gather_facts: No connection: local ## 本地連線 vars_files: - myvars.yml - vcenter.yml tasks: - name: Create a virtual machine on given ESXi hostname vmware_guest: hostname: "{{hostname}}" username: "{{username}}" password: "{{password}}" validate_certs: no folder: / datacenter: "{{datacenter}}" name: "{{item.name}}" state: poweredoff guest_id: centos64Guest esxi_hostname: "{{item.esxi_hostname}}" disk: - size_gb: "{{ item.d1_size_gb}}" type: eagerzeroedthick ##厚置備 thin 精簡置備 datastore: "{{item.datastore}}" ##儲存 - size_gb: "{{ item.d2_size_gb}}" #type: eagerzeroedthick type: thin datastore: "{{item.datastore}}" hardware: hotadd_cpu: true hotremove_cpu: true hotadd_memory: true memory_mb: "{{item.memory_mb}}" num_cpus: "{{item.num_cpus}}" scsi: lsilogic ##linux用lsilogic,win用lsilogicsas, 預設使用paravirtual 這是VMware自己的準虛擬 networks: - name: vlan10 ##網路名 device_type: vmxnet3 ## win使用e1000e with_items: - "{{myvms}}" delegate_to: localhost register: deploy_vm
vcenter.yml 存放vcenter驗證資訊
myvars.yml 是需要建立的虛擬機器資訊
myvars.yml 示例如下
--- datacenter: zm-A10 myvms: - { name: 10.20.15.99_test1, esxi_hostname: 10.20.10.26, datastore: 10-26-localradi10, d1_size_gb: 50, d2_size_gb: 30, memory_mb: 8196, num_cpus: 4 } - { name: 10.20.15.105_test2, esxi_hostname: 10.20.10.23, datastore: 10_23-localraid10, d1_size_gb: 50, d2_size_gb: 40, memory_mb: 8196, num_cpus: 4 }
myvars.yml 可以直接用Python指令碼生成
import re outfile2 = open('myvars.yml', 'w') file_head = ''' --- datacenter: zm-A10 myvms: ''' outfile2.write(file_head) with open('vm_list', 'r') as f: while 1: line = f.readline() if not line: break linetest = re.split(r'[;,\s]+', line) host2text = ''' - { name: %s_%s, esxi_hostname: %s, datastore: %s, d1_size_gb: %s, d2_size_gb: %s, memory_mb: %s, num_cpus: %s }''' % (linetest[0], linetest[1], linetest[2], linetest[3], linetest[6], linetest[7], linetest[5], linetest[4]) print >> outfile2, host2text