环境:Azure vm中的Ubuntu 16.04
ansible 2.4.3.0
python版本= 2.7.12(默认,2017年11月20日,18:23:56)[GCC 5.4.0 20160609]
azure-cli(2.0.27)
我已经使用Ansible Playbook在azure中成功创建了我的第一个vm .
现在,我的问题是:我可以在playbook中使用admin-password,vmname等变量,这样我就可以在一个具有不同名称的文件中放入我想要创建的10台机器的列表 . 他们的密码,然后循环并通过playbook命令将该信息提供给playbook.yml文件?
我对任何方式都持开放态度,而且我知道Ansible可能已经有了一种更容易/更正常的方式,我只是不知道谷歌我需要什么 .
编辑:显然我的问题太宽泛了 . 我会尝试更具体 . 我看了康斯坦丁苏沃洛夫离开的链接 . 据我了解,所描述的方法通过让你为组分配变量来实现我所追求的反转 . 在示例中,对现有机器 .
我需要的是能够以正常的YAML样式创建vms,但能够以某种方式进行过程循环,这样它将创建具有所有相同信息的机器1到10,除了机器名称和密码 . 上面的示例似乎使用变量将相同的信息分配给多台机器 .
我怎样才能做到这一点?我主要是一个bash脚本编写器,所以我要做的是将每个机器的名称:密码放在一个文件的多行上,循环通过它并在每个循环中运行一次ansible-playbook命令来创建每台机器,某种变量 . 但是,我感觉有一种更有效的方式,这样我运行命令一次,命令将创建每台机器,其中的变量/信息被编码(以某种方式)到yaml文件中 . 这个具体到底吗?
进一步编辑:感谢您让我走上正轨 . 我已经调整了我用来创建一个vm的脚本,试图让它创建两个 . 我得到各种各样的错误,其中没有一个似乎真的指向冒犯代码 . 以下是我正在尝试的内容:
- name: Create Azure VM
hosts: localhost
connection: local
with_items:
- { vmname: 'testvmfordb', userpassword: 'my password' }
- { vmname: 'testvmforfe', userpassword: 'my other password' }
tasks:
- name: Create virtual network inteface card
azure_rm_networkinterface:
resource_group: my_rg
name: "{{ item.vmname }}NIC"
virtual_network: my_rg
subnet: default
public_ip_name: "{{ item.vmname }}IP"
security_group: my_firewall_rules
- name: Create VM
azure_rm_virtualmachine:
resource_group: my_rg
name: "{{ item.vmname }}"
vm_size: Standard_DS1_v2
location: EastUS
admin_username: myusername
admin_password: "{{ item.userpassword }}"
ssh_password_enabled: true
storage_container: vhds
storage_blob: "{{ item.vmname }}osdisk.vhd"
network_interfaces: "{{ item.vmname }}NIC"
image:
offer: UbuntuServer
publisher: Canonical
sku: '16.04-LTS'
version: latest
os_type: Linux
提前致谢!
我按照@KonstantinSuvorov的建议,将创建任务分开到一个单独的文件中 . 我收到了这条消息:
TASK [include_tasks] *******************************************************************************************************************************
task path: /home/user/ansible_playbooks/azure_create_many_vms.yml:5
fatal: [localhost]: FAILED! => {
"reason": "included task files must contain a list of tasks"
}
fatal: [localhost]: FAILED! => {
"reason": "included task files must contain a list of tasks"
}
这是文件/代码:azure_create_many_vms.yml
- name: Create Azure VM
hosts: localhost
connection: local
tasks:
- include_tasks: azure_create_many_vms_tasks.yml
with_items:
- { vmname: 'testvmforelastic', userpassword: 'my user password' }
- { vmname: 'testvmforfe', userpassword: 'my user password' }
azure_create_many_vms_tasks.yml
tasks:
- name: Create virtual network inteface card
azure_rm_networkinterface:
resource_group: my_core_rg
name: "{{ item.vmname }}NIC"
virtual_network: my_core_rg
subnet: default
public_ip_name: "{{ item.vmname }}IP"
security_group: my_core_firewall_rules
- name: Create VM
azure_rm_virtualmachine:
resource_group: my_core_rg
name: "{{ item.vmname }}"
vm_size: Standard_DS1_v2
location: EastUS
admin_username: adminuser
admin_password: "{{ item.userpassword }}"
ssh_password_enabled: true
storage_container: vhds
storage_blob: "{{ item.vmname }}osdisk.vhd"
network_interfaces: "{{ item.vmname }}NIC"
image:
offer: UbuntuServer
publisher: Canonical
sku: '16.04-LTS'
version: latest
os_type: Linux
1 回答
您应该从包含的文件中删除
tasks
关键字,只留下一个简单的任务列表,如下所示: