serialization - Ansible:无法为顺序执行设置变量

标签 serialization ansible ansible-inventory ansible-role

我正在尝试使用 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/

相关文章:

ansible - 列出任务 list 文件中的所有 ansible 主机

c# - 在 Unity 中重命名序列化自动属性

java - 加密和序列化时出现 NullPointerException 异常

ansible - Puppet Bolt 是否具有与 Red Hat Ansible 相同的功能集?

ansible:任务命名风格

list 中的 Ansible 嵌套变量

ansible - 为什么剧本对组变量采用错误的值?

java - Java中如何保存对象?构造函数中的反序列化

Java序列化: 'ClassNotFoundException' when deserializing an Object

ansible - 是否可以在任务中为角色定义变量?