ansible - 在 Ansible 中注册和使用多个变量
问题描述
我正在尝试弹出 VM 实例,将它们放入不同的主机组(例如 webservers 和 devops/admin 机器),并在一个剧本中安装它们所需的内容。
我不知道什么 IP 地址,例如,GCP 会给这些实例,所以我试图将它们捕获在一个变量中,以便稍后在剧本中使用。我可以使用“注册”很好地捕捉它们,但事实证明使用它们很棘手。例如,如果我这样做。
- 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 }}"
失败得很惨。
请帮忙 ?如何使用我创建的地址范围?我要疯了
解决方案
可以将_host添加到组网络服务器并继续下一场比赛
- 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 动态清单和其他 100 多个gcp 模块。您可能想从Google Cloud Platform Guide开始。
FWIW, Ansible 2 Cloud Automation Cookbook涵盖了领先的供应商,包括。GCP。
推荐阅读
- javascript - 使用 Context API 在非嵌套组件之间传递变量
- python - 使用 selenium 和 python 从 iframe 中获取文本
- python - 用 Python 覆盖 Excel 中的工作表
- r - 从 R 中的两个表中查找不重叠的值
- excel - 如何复制和粘贴范围而不是行?
- python - 在应用之前从 kv 文件中获取子级
- powershell - 在 PowerShell 中的子属性上使用 Where-Object 过滤(xml-)数据
- awk - sed / awk - 删除有条件的换行符
- r - 有条件地合并来自两个数据帧的数据
- swift - 如何在json数据中拆分包含两个UTC格式日期的字符串