我正在尝试弹出VM实例,将它们放入不同的主机组(例如Web服务器和devops /管理机),并在一个单一的手册中安装它们所需的内容。
例如,我不知道GCP会给这些实例提供什么IP地址,因此我试图将它们捕获到变量中,以便稍后在剧本中使用。我可以使用“注册”来捕获它们,但事实证明,使用它们很棘手。例如,如果我这样做。
- name: création des adresses statiques
gcp_compute_address:
name: "{{ item }}"
state: present
region: "{{ region }}"
project: "{{ gcp_project }}"
auth_kind: "{{ gcp_cred_kind }}"
service_account_file: "{{ gcp_cred_file }}"
scopes:
- https://www.googleapis.com/auth/compute
loop:
- adresse-1
- adresse-2
- adresse-3
- adresse-4
- adresse-5
register: address
我后来想出使用这些变量的最佳方法是:
network_interfaces:
- network: "{{ network.name }}"
access_configs:
- name: 'External NAT'
type: 'ONE_TO_ONE_NAT'
nat_ip:
- "{{ address.results[0].address }}"
- "{{ address.results[1].address }}"
- "{{ address.results[2].address }}"
哪一个失败了。
请帮助?如何使用我创建的地址范围? 我为此感到发疯
答案 0 :(得分:2)
可以add_host加入组 webservers 并进行下一个播放
- add_host:
name: "{{ item }}"
groups: webservers
loop: "{{ address.results|json_query('[*].address') }}"
- debug:
msg: "{{ groups['webservers'] }}"
- hosts: webservers
tasks:
- name: Configure cluster
...
以下任务将主机分为两组
- set_fact:
my_hosts: "{{ address.results|json_query('[*].address') }}"
- add_host:
name: "{{ item }}"
groups: webservers1
loop: "{{ my_hosts[0:(my_hosts|length / 2)|int] }}"
- add_host:
name: "{{ item }}"
groups: webservers2
loop: "{{ my_hosts[(my_hosts|length / 2)|int:my_hosts|length] }}"
- debug:
msg: "{{ groups['webservers1'] }}"
- debug:
msg: "{{ groups['webservers2'] }}"
还有GCE Dynamic Inventory和另外100多个gcp modules。您可能要从Google Cloud Platform Guide开始。