我正在尝试使用 serial
元素构建一个具有滚动更新用例(顺序执行)的剧本。由于我必须在剧本的多个地方使用序列值,所以我想将它用作一个变量,该变量可用于将某处定义为组变量。
库存文件
[all]
webserver1 ansible_host=10.1.1.1 ansible_user=root
webserver2 ansible_host=10.1.1.2 ansible_user=root
webserver3 ansible_host=10.1.1.3 ansible_user=root
dbserver1 ansible_host=10.1.2.1 ansible_user=root
[webserver]
webserver1
webserver2
webserver3
[dbserver]
dbserver1
[app-stack:children]
webservers
dbservers
[app-stack:vars]
app_stack_serial_value=1
剧本
- hosts: app-stack
serial: "{{ app_stack_serial_value }}"
tasks:
- name: debug
debug:
msg: "Ansible Host - {{ ansible_host }}"
错误
ERROR! The field 'serial' has an invalid value, which includes an undefined variable. The error was: 'app_stack_serial_value' is undefined
如果我在序列字段中指定值,如 serial: 1
,这将起作用。但我想将此值用作变量。有什么想法吗??
Ansible版本:ansible 2.7.10
python 版本 = 3.7.2(默认,2019 年 1 月 13 日,12:50:01)[Clang 10.0.0 (clang-1000.11.45.5)]
最佳答案
据我所知,你不能在组变量中设置它。但是您可以在运行此剧本之前尝试设置 ENV SERIAL_NUMBER=1
并设置串行参数,如:
serial: "{{lookup('env','SERIAL_NUMBER')|default(3, true)}}"
关于serialization - Ansible:无法为顺序执行设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891201/