У меня есть следующий сценарий Ansible для создания (клонирование) виртуальных машин (ВМ) VMware из шаблона:
- name: Create VMware guest
hosts: localhost
connection: local
gather_facts: False
vars_prompt:
- name: "vcenter"
prompt: "vCenter hostname?"
default: "vcenter01.example.com"
- name: "user"
prompt: "Enter username"
private: no
- name: "pass"
prompt: "Enter password"
private: yes
- name: "template"
prompt: "Template?"
default: "linux-template.example.com_deb8"
- name: "cluster"
prompt: "Cluster?"
default: "cl03"
- name: "resource_pool"
prompt: "Resource pool?"
default: "/Resources/IT/IT Department/Linux Systems Team"
tasks:
- name: Make sure we have pip
become: true
apt: pkg=python-pip state=latest
- name: Install Python modules
become: true
pip: name={{ item }} state=latest
with_items:
- pysphere
- pyvmomi
- name: Deploy guest from template
vsphere_guest:
vcenter_hostname: "{{ vcenter }}"
username: "{{ user }}"
password: "{{ pass }}"
guest: "{{ guest }}"
from_template: yes
template_src: "{{ template }}"
cluster: "{{ cluster }}"
resource_pool: "{{ resource_pool }}"
Я вызываю его следующим образом:
ansible-playbook createvm.yml --ask-become-pass -e guest=<guest-name>
Как я могу создать несколько виртуальных машин без многократного запуска playbook, т. е. ответа на все вопросы? Единственная переменная, которая изменяется, это имя виртуальной машины ( гость
). Я бы хотел что-то вроде этого:
ansible-playbook createvm.yml --ask-become-pass -e guest=server1,server3,server3
You nwere ike ide with_items
loop maka onye ọbịa oke. Dị ka nke a:
- name: Deploy guest from template
vsphere_guest:
vcenter_hostname: "{{ vcenter }}"
username: "{{ user }}"
password: "{{ pass }}"
guest: "{{ item }}"
from_template: yes
template_src: "{{ template }}"
cluster: "{{ cluster }}"
resource_pool: "{{ resource_pool }}"
with_items: "{{ serverlist }}"
Ọ bụrụ na ịchọghị ịme koodu siri ike ndị na-agbanwe agbanwe na egwuregwu ahụ (nke na-abụghị echiche ọjọọ) ị nwere ike ịchekwa ndepụta ahụ na mgbanwe wee tinye nke a n'okpuru host_vars / hostname
like a:
---
serverlist:
- server1
- server2
Ansible nwere vault
gụnyere maka ịchekwa okwuntughe na ozi nhịahụ. Lelee akwụkwọ maka ozi ndị ọzọ.
can nwere ike ịmepụta faịlụ na-agbanwe agbanwe nke ezoro ezo na vault wee tinye nke a na egwuregwu gị na
- include_vars: vault.yml
Achọtara m ihe ngwọta nke yiri ka ọ na-arụ ọrụ nke ọma - n'iji mgbanwe gburugburu ebe obibi. Ejiri m vars_prompt
nke akwụkwọ egwu a were:
vars:
vcenter: "{{ lookup('env','ANS_VCENTER') }}"
cluster: "{{ lookup('env','ANS_CLUSTER') }}"
template: "{{ lookup('env','ANS_TEMPLATE') }}"
resource_pool: "{{ lookup('env','ANS_RESOURCE_POOL') }}"
user: "{{ lookup('env','ANS_USER') }}"
password: "{{ lookup('env','ANS_PASS') }}"
Etinyere m mgbanwe gburugburu ebe obibi tupu m tinye akwụkwọ egwu ahụ, dị ka
export ANS_VCENTER="vcenter01.example.com"
(Ọ dị m ntakịrị ka m na-echekwa paswọọdụ na gburugburu ebe obibi mana ọ dị ka ọ dị zuru ezu zuru oke ).
Mgbe ahụ enwere m ike ịmepụta ọtụtụ ndị ọbịa na-eji shea maka akaghị
for g in server1 server2 server3; do echo "--> Create $g"; ansible-playbook createvm.yml -e guest=$g; done