作者 主題: Ansible vsphere_guest with openSUSE 小記  (閱讀 6158 次)

0 會員 與 1 訪客 正在閱讀本文。

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2590
  • 性別: 男
    • 檢視個人資料
    • sakananote
Ansible vsphere_guest with openSUSE 小記
« 於: 2016-06-23 12:59 »
圖文並茂版本
https://sakananote2.blogspot.tw/2016/06/ansible-vsphereguest-with-opensuse-2.html
https://sakananote2.blogspot.tw/2016/06/ansible-vsphereguest-module-with.html

OS: openSUSE Leap 42.1

Ansible: 2.1.0.0
Module: vsphere_guest

    http://docs.ansible.com/ansible/vsphere_guest_module.html


Requirements (on host that executes module)

    python >= 2.6
    pysphere


檢查需求
# python --version
Python 2.7.9

pysphere 的部份

    https://software.opensuse.org/package/python-pysphere?search_term=pysphere


參考之前的網誌
加入套件庫
代碼: [選擇]
# zypper  --gpg-auto-import-keys   addrepo   -f  http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_Leap_42.1/devel:languages:python.repo
搜尋套件
代碼: [選擇]
# zypper   search   -s   sphere
Loading repository data...
Reading installed packages...

S | Name            | Type       | Version   | Arch   | Repository                         
--+-----------------+------------+-----------+--------+------------------------------------
  | python-pysphere | package    | 0.1.8-1.1 | noarch | Python Modules (openSUSE_Leap_42.1)

安裝 pysphere
代碼: [選擇]
# zypper  install   python-pysphere
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
  python-pysphere

1 new package to install.
Overall download size: 891.9 KiB. Already cached: 0 B. After the operation, additional 13.8 MiB will be used.
Continue? [y/n/? shows all options] (y):  Y
建立測試 playbook
後來採用 local 的方式執行, 然後相關資訊使用 var_prompt 的方式

檔案 Test_vsphere_guest_get_facts.yml

代碼: [選擇]
- name: Testing vsphere_guest module in VMware
# 這邊自己習慣控管 VMware 的是用本機
# 配合 hosts 內的 ansible_connection=local
  hosts: localhost
# 設定使用 local connection
  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: "guest_name"
      prompt: "Enter guest vm name"
      private: no


  tasks:
    - name: Testing gater facts from vSphere
# 使用 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: "{{ guest_name }}"
# 是否要取回 guest 資訊
        vmware_guest_facts: yes

下指令執行還有輸出結果

代碼: [選擇]
> ansible-playbook   -v   test_vsphere_guest_get_facts.yml
Enter vcenter hostname [vcsa]:  YOURIP_FQDN
Enter vCenter username [root]:
Enter vcenter password:
Enter guest vm name: openSUSELeap_SA_Docker

PLAY [Testing vsphere_guest module in VMware] **********************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [Testing gater facts from vSphere] ****************************************
ok: [localhost] => {"ansible_facts": {"hw_eth0": {"addresstype": "manual", "ipaddresses": [“w.x.y.z", "fe80::220:5fff:fe11:1111"], "label": "Network adapter 1", "macaddress": "00:50:56:11:11:11", "macaddress_dash": "00-50-56-11-11-11", "summary": "VM Net"}, "hw_guest_full_name": "Other Linux (32-bit)", "hw_guest_id": "otherLinuxGuest", "hw_interfaces": ["eth0"], "hw_memtotal_mb": 3976, "hw_name": "openSUSELeap_SA_Docker", "hw_power_status": "POWERED ON", "hw_processor_count": 2, "hw_product_uuid": "4222b4d6-ef7b-dc72-8603-9f7cbbfc2737", "module_hw": true}, "changed": false}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   


建立 test_vsphere_guest_delete_vm.yml

代碼: [選擇]
- name: Testing vsphere_guest module in VMware
# 這邊自己習慣控管 VMware 的是用本機
# 配合 hosts 內的 ansible_connection=local
  hosts: localhost
# 設定使用 local connection
  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: "guest_name"
      prompt: "Enter guest VM name your want to delete"
      private: no
  tasks:
    - name: Delete VM
# 使用 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: "{{ guest_name }}"
#
        state: absent
# 如果有使用 force: yes, 就是虛擬機不需要先關機就刪除
# 實際上觀察, 是會先關機然後刪除
        force: yes     
這樣可以用來刪除指定的 VM

 檔案 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"
在 VMware 上面的結果



然後應用相同的方式也讓刪除 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
« 上次編輯: 2016-06-23 15:51 由 sakana »
專心投入研究才是王道!!
http://sakananote2.blogspot.com

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Re: Ansible vsphere_guest with openSUSE 小記
« 回覆 #1 於: 2016-06-23 14:52 »
太讚了!