在Ansible中如何从角色中覆盖任务参数

38次阅读
没有评论

问题描述

想要定义一个带有默认参数的任务,然后在他的Playbook中,通过覆盖参数来执行任务。具体来说,他想在任务定义中设置默认参数,然后在Playbook中覆盖这些参数,以便根据需要执行任务。他尝试过一种方法,但并没有奏效。

解决方案

在Ansible中,你可以使用Jinja2模板来定义默认变量并通过Playbook进行覆盖。下面是实现这一目标的步骤:

步骤1:定义带有默认参数的任务

在任务中使用Jinja2模板,为参数设置默认值。这样,如果Playbook没有传递相应的变量,就会使用默认值。以下是任务定义的示例:

- name: Create a new user
  user:
    name: "{{ username_variable | default('default_value') }}"
    password: "{{ password_variable | default('default_value') }}"
    state: present

步骤2:通过Playbook覆盖参数

在你的Playbook中,通过vars关键字来覆盖默认参数。这将允许你根据需要传递变量值,从而覆盖任务中的默认值。以下是Playbook的示例:

roles:
  - role: common
    vars:
      username_variable: "frank"
      password_variable: "/bin/zsh"

在上述示例中,我们在Playbook中指定了username_variablepassword_variable的值,这将覆盖任务中的默认值。这样,在执行任务时,将使用传递的值而不是默认值。

注释

  1. 如果你不想重复定义所有的模块参数作为变量,可以考虑使用上述方法。这是一种更灵活的方式,可以根据需要覆盖特定参数,而不必重复定义所有参数。
  2. 如果你想直接引用模块参数(如”password”)而不是将所有参数作为变量复制一遍,可能需要使用不同的方法。然而,这种方法需要更多的控制和复杂性。

以上是在Ansible中如何从角色中覆盖任务参数的解决方案。通过定义默认参数并在Playbook中进行覆盖,你可以根据需要执行任务并传递特定的参数值。

正文完