用ansible自動供應vmware虛擬機

用ansible自動供應vmware虛擬機

@(技術筆記本)[ansible, vmware, toWordPress]html

1.1 簡述

一直以來,打開郵箱被ticket糊一臉的事情時有發生。我一直在想,能不能以一種簡單的方案(不花老闆的錢)來供應(provisioning)虛擬機呢? 我不喜歡openstack,由於過重,太複雜,除了自服務其它那些編排功能暫時也用不上。我也不喜歡vmware的雲套件,由於不想和vmware有太深的羈絆,以致於未來可能會失業什麼的。 因此我一直在尋找一種簡單粗暴的辦法。python

我嘗試過用虛機模版,把各類東西都裝好打一個大包,之後每次手動改一下配置。用了一陣時間就會發現,模版版本多到本身都暈了。 並且還要祈禱這些模版不用變(可能嗎?),由於若是有一個配置要修改,雖然模版改好了, 可是你以前建立的那一堆虛機實例就只能加班慢慢手工操做了。vim

後來, 我據說了IAC的思路, 我很喜歡這個想法。用管理代碼的方式來管理基礎架構,一切代碼化。利用IAC工具的特性(好比很是重要的冪等性)將虛機模版和配置解耦合。 全部配置都從模版中拿出來,放在代碼中。若是有修改只須要修改相應的代碼而後從新刷一遍已經生成的實例就好了。windows

puppet、 ansible 都是不錯的工具, 可是我喜歡簡單,所以在用了一年多puppet後仍是倒向了ansible 如今咱們全部的供應,配置,發佈都在用ansiblecentos

此筆記說的是如何經過ansible 簡單的經過虛擬機模版建立虛機實例。api

1.2 版本和環境

版本需求網絡

  • python 2.6以上
  • pyvmomi
  • ansible 2.3 以上
  • vsphere 6.0 (聽說5.5以上都行)

pyvmomi 是vmware公司維護的, 將vmware api 直接作了python 綁定。架構

安裝pyvmomi模塊
pip install pyvmomi

ansible的版本要求較高,主要是咱們須要讓啓動後的虛機實例自動配置上ip,主機名等。這些功能只在2.3以上版本提供。app

1.3 VM 模版

模版名: rhel7.1-mini-vs6-ansible-normal_v2.1dom

我用的模版就是rhel7.1(centos 7.1) 的mini安裝,最小安裝什麼都沒有,而後安裝開源vmware tools open-vm-tools 包信息以下

rpm -qi open-vm-tools
Name        : open-vm-tools
Version     : 10.0.5
Release     : 4.el7_3
Architecture: x86_64
Install Date: Fri 02 Jun 2017 05:33:32 PM CST
Group       : Applications/System
Size        : 1623590
License     : GPLv2
Signature   : RSA/SHA256, Thu 09 Feb 2017 02:49:53 PM CST, Key ID 199e2f91fd431d51
Source RPM  : open-vm-tools-10.0.5-4.el7_3.src.rpm
Build Date  : Sat 04 Feb 2017 12:26:30 AM CST
Build Host  : x86-030.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://open-vm-tools.sourceforge.net/
Summary     : Open Virtual Machine Tools for virtual machines hosted on VMware
Description :
The open-vm-tools project is an open source implementation of VMware Tools. It
is a suite of open source virtualization utilities and drivers to improve the
functionality, user experience and administration of VMware virtual machines.
This package contains only the core user-space programs and libraries of
open-vm-tools.

無需配置ip主機名等,這些配置都是隨後自動改的, 注意要刪掉sshd的全部key,按照金模版的標準作虛擬機模版(推薦,不是必須) 具體步驟隨後轉一片文章說明。

安裝好後,就能夠在vmware裏面製做成模版了。

1.4 playbook

ansible模塊說明: vmware_guest - Manages virtual machines in vcenter http://docs.ansible.com/ansible/vmware_guest_module.html

代碼例子: vm_provisioning.yml

---
- hosts: localhost   ## 在本機執行,由於實際上是在調用vcenter的api,所以不是之前登錄再配置的模式
  gather_facts: No
  connection: local  ## 本地鏈接

  tasks:
  - name: create the VM
    vmware_guest:
      hostname: vcenter的ip地址
      username: vcenter的用戶名  #若是是用的windows域 那就寫 xxx@xxxdomain.com
      password: vcenter的用戶的密碼
      validate_certs: no  #這裏注意,跳過證書檢驗,可是這裏我遇到坑,後面說。
      datacenter: DataCenter1 
      esxi_hostname: 某個esxi主機      #  esxi_hostname和cluster只能選一個
      #cluster: DataCenter-HA-V6.0    #  指定esxi機器或者不指定寫集羣名
      name: ansiblemade_3             #  虛擬機名,在Vcenter中看到的名字
      annotation: ansible auto created  # 註釋
      state: poweredon                #  開機狀態 有:
									  #		present  
									  #		absent   刪除,當心使用
									  #		poweredon
									  #		poweredoff
									  #		restarted
									  #		suspended
									  #		shutdownguest
									  #		rebootguest

      guest_id: rhel7_64Guest         # 從如下地址選一個對應的,必須一致。
             # https://www.vmware.com/support/developer/converter-sdk/conv55_apireference/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html
      disk:                           # 磁盤列表,這裏是一個列表,模版裏面作了幾塊盤都要把配置寫上
      - size_gb: 16
        type: thin
        datastore: store1
      - size_gb: 8
        type: thin
        datastore: store1
      #hardware:                    # 虛擬機配置,由於是基於模版建立,這裏都pass了
      #  memory_mb: 512
      #   num_cpus: 1
      # scsi: paravirtual
      networks:                     # 對應的網絡信息
      - name: VM Network 1
        ip: vm——guest的ip
        netmask: 255.255.255.0
        gateway: x.x.x.x
      customization:
        hostname: ansiblemade
        domain: xxx.com
        dns_servers:
        - 8.8.8.8
        - 8.8.4.4
      template: rhel7.1-mini-vs6-ansible-normal_v2.1  # 這個是上一步建立的虛機模版  
      wait_for_ip_address: yes   # 等待建立的機器ip出來後再繼續
    delegate_to: localhost
    register: deploy

執行playbook:

ansible-playbook vm_provisioning.yml

若是順利就會建立出一個虛擬機,而後就能夠用ansible繼續作配置。

可是。。。

1.5 坑

仍是遇到一個坑。vcenter鏈接都是https的,使用的是自簽發的證書。 然而這裏validate_certs: no的配置並未生效

網上找了不少說法,有的說是python的,有的說是ansible的。

從一個叫Jonathan Frappier 的哥那裏找到了最直接辦法。 :P 直接修改pyvmomi的connect.py 無論要不要驗證ssl證書, 都改爲不驗證。

簡單,粗暴, 有效!

以下:

/usr/lib/python2.7/site-packages/pyVim/connect.py

try:
if sslContext is not None and sslContext.verify_mode == ssl.CERT_NONE:
sock = requests.get(url, verify=False)
else:
sock = requests.get(url, verify=False)  ## 修改這裏,而後刪掉connect.pyc就好了

記得備份哦。 修改之後,以上過程就都能跑通了。

記錄到此。

相關文章
相關標籤/搜索