使用ansible playbook在VmWare上部署大规模VM来宾
我为ansible编写了一个剧本,在我的vmware基础架构上创建了一个虚拟机。它工作得很好,但我不知道如何浏览要创建的机器列表,有人知道这是否可行吗 这是我的剧本:使用ansible playbook在VmWare上部署大规模VM来宾,ansible,vmware,rhel7,Ansible,Vmware,Rhel7,我为ansible编写了一个剧本,在我的vmware基础架构上创建了一个虚拟机。它工作得很好,但我不知道如何浏览要创建的机器列表,有人知道这是否可行吗 这是我的剧本: hosts: all gather_facts: false vars_files: - variables.yml connection: local tasks: - name: configura install cfg template: src: template_
hosts: all
gather_facts: false
vars_files:
- variables.yml
connection: local
tasks:
- name: configura install cfg
template:
src: template_install.j2
dest: /root/cfg/{{ vm_name }}.cfg
- name: configura isolinux.cfg
template:
src: isolinux.j2
dest: /root/rhel/isolinux/isolinux.cfg
- name: copia file su satellite
shell: scp /root/cfg/{{ vm_name }}.cfg root@10.100.64.50:/var/ftp/pub/kickstart/.
- name: make cd iso for install red hat
shell: /root/makecdrom.sh {{ vm_name }}
- name: upload cdrom to library datastore
vsphere_copy:
host: <Myvcentername>
login: <myvcenterusername>
password: <Mycenterpassword>
validate_certs: no
src: /root/{{ vm_name}}.iso
datacenter: {{ vm_datacenter }}
datastore: VMW_LIBRARY01
path: ISO/{{ vm_name }}.iso
- name: Crea VM
vmware_guest:
hostname: <Myvcentername>
login: <myvcenterusername>
password: <Mycenterpassword>
datacenter: "{{ vm_datacenter }}"
resource_pool: "{{ vm_resource_pool }}"
validate_certs: no
annotation: 'creata con script ansible ip address " {{ vm_ip_addr }} "'
folder: "{{ vm_folder }}"
name: "{{ vm_name }}"
state: "{{ vm_state }}"
guest_id: "{{ vm_guest_id }}"
cluster: "{{ vm_cluster }}"
cdrom:
type: iso
iso_path: "[VMW_LIBRARY01] ISO/'{{vm_name}}.iso'"
disk:
- size_gb: "{{ disk_size_gb }}"
type: "{{ disk_type }} "
datastore: "{{ disk_datastore }}"
hardware:
memory_mb: "{{ hardware_memory_mb }}"
num_cpus: "{{ hardware_num_cpus }}"
scsi: paravirtual
networks:
- name: "{{ networks_name }}"
device_type: vmxnet3
delegate_to: 127.0.0.1
register: deploy_vm
谢谢你的回答。。。
西蒙妮这确实是可能的。我会通过将变量拆分为全局变量来实现这一点,对于整个资源清册(比如网关,对于所有服务器或服务器组都是一样的)和每个服务器。您可以通过创建一个包含库存列表和变量列表的文件来实现这一点:
inventory/
my_vms/
hosts
group_vars/
all.yml
south-dc.yml
north-dc.yml
host_vars/
my_vm_1.yml
my_vm_2.yml
hosts
文件包含服务器列表(在您的情况下是VM)。它可以包含如下内容:
[all]
my_vm_1
my_vm_2
[south-dc]
my_vm_1
[north-dc]
my_vm_2
host\u vars
目录包含YAML文件,其中的变量以hosts
文件中的主机命名,即,如果您将服务器命名为my\u vm\u 1
,则该文件将命名为my\u vm\u 1.yml
group\u vars
与host\u vars
类似,但您提供了主机组共享的变量。名为all
的特殊组为所有主机提供全局变量
所有全局变量都可以放在All.yml
中。例如,您可以将这些内容放在该文件中:
disk_size_gb: 50
disk_type: thin
hardware_memory_mb: 8192
hardware_num_cpus: 4
然后,所有每主机变量都将转到清单主机\u vars文件:
vm_fqdn_name: mcdlnxevtp01.menarini.net
vm_name: MCDLNXEVTP01
通过这种方式,您可以提供一致的库存分类方法,从而有机会清理代码
然后,您只需调用
ansible-playbook -i inventory/my_vms -l my_vm_1 playbook.yml
如果您希望针对服务器组运行playbook,只需对资源清册中的所有服务器使用-l
或-l all
启动它即可
备注:您不必将服务器放入
[all]
组。它是一个特殊的组,包含资源清册中的所有服务器。我更喜欢将资源清册仅用于配置管理。您可以这样做,但如何跟踪更改或如何向堆栈中添加新项
在我看来,最好的方法是使用如下yaml配置文件:
vmstodeploy:
- name: myvm
vm_ip_addr: 192.168.0.15
vm_netmask: 255.255.255.0
vm_gateway: 192.168.0.1
etc...
- name: Deploy VMs
include_tasks: vmware_deploy.yml
with_items: "{{ mydeploy|default([]) }}"
loop_control:
loop_var: _myvms
并将其保存在git存储库中以进行更改控制。如果要向堆栈中添加更多虚拟机,只需添加另一个虚拟机:
vmstodeploy:
- name: myvm
vm_ip_addr: 192.168.0.15
vm_netmask: 255.255.255.0
vm_gateway: 192.168.0.1
- name: myvm2
vm_ip_addr: 192.168.0.16
vm_netmask: 255.255.255.0
vm_gateway: 192.168.0.1
并用以下文字阅读:
- name: Read My VMs
include_vars:
file: "MyConfigFile"
name: mydeploy
从这里,您将在mydeploy
var中看到一个vm部署信息列表
只需在角色内部创建一个循环,如下所示:
vmstodeploy:
- name: myvm
vm_ip_addr: 192.168.0.15
vm_netmask: 255.255.255.0
vm_gateway: 192.168.0.1
etc...
- name: Deploy VMs
include_tasks: vmware_deploy.yml
with_items: "{{ mydeploy|default([]) }}"
loop_control:
loop_var: _myvms
然后,在vmware_deploy.yml文件中创建虚拟机:
- name: Create my VMs
vmware_guest:
使用
with_sequence
如果虚拟机具有相同的数据,请使用batch()
序列化部署,尝试不同的选项,但始终从yaml中的配置文件开始。我不懂这一行,您能解释一下吗?对于_项:{{mydeploy}默认([])}当然mydeploy
是一个变量,default
所做的是将其定义为一个空列表以避免错误。如果您的配置文件为空,playbook将退出,而不会抛出未定义变量
错误。{}是一个字典[]是一个列表('')空字符串。()没有