【问题标题】:How to extend ansible playbooks to achieve complex conditions?如何扩展 ansible playbook 以实现复杂条件?
【发布时间】:2019-02-18 13:49:24
【问题描述】:

我了解 ansible 仅限于作为配置工具,即我们在 yaml 文件中创建配置,python 脚本通过查看配置来执行。

但是有一个有用的属性when 将有助于根据when 中提到的条件决定要执行的配置,并且配置的顺序也是根据任务的顺序完成的,

变量和事实可用于实现动态配置。

但是,我的要求涉及复杂的循环和条件以及递归处理,这在 playbook 中完全无法实现,或者需要根据条件创建多个任务。

我在使用 ansible playbook 时发现的几个问题是:

  • 没有 if else 结构
  • 循环的功能非常有限
  • 变量范围不像在脚本语言中那样工作

递归任务的问题例如:

  • start_installation.yml 安装变量中定义的包
  • 包有依赖关系,依赖关系也有依赖关系,即递归依赖关系和安装应该首先通过调用start_installation.yml递归地在依赖关系上完成。但是,这会产生变量范围的问题,即,如果在为 A 启动 start_installation.yml 时 package_to_install 是“A”,并且如果 A 具有依赖项“B”,那么 package_to_install 将设置为“B”,在为B启动start_installation.yml的时间。现在,一旦B的安装完成,它就不能安装A,因为变量范围不是被调用函数的本地。

我的问题主要是使用 Ansible 执行这些任务是否是正确的方法,还是我需要使用脚本语言来执行所需的检查?

【问题讨论】:

    标签: ansible ansible-facts ansible-template


    【解决方案1】:

    回答你的问题:

    " ...在执行这些任务时使用 Ansible 是正确的方法,还是我需要使用脚本语言来执行所需的检查?

    正确的做法是使用package – Generic OS package manager。如果这不起作用create a Minimal, Complete, and Verifiable example

    【讨论】:

    • 感谢您提供的链接。在这种情况下,我无法使用操作系统包管理器,因为我的安装来自源代码。但是,我将再次浏览文档。看来我已经习惯了编写脚本,并且很难适应 ansible 方式:)
    • “从源代码安装”无法扩展。是时候继续前进了:)
    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多