从命令行参数写入用户指定的文件 - Ansible



我正在尝试使用 lineinfile 将一行写入文件。

文件的名称将由用户在运行时作为命令行参数传递给 playbook。

任务如下所示:

  # Check for timezone.
    - name: check timezone
      tags: timezoneCheck
      register: timezoneCheckOut
      shell: timedatectl | grep -i "Time Zone" | awk --field-separator=":" '{print $2}' | awk --field-separator=" " '{print $1}'
    - lineinfile:
        path: {{ output }}
        line: "Did not find { DesiredTimeZone }"
        create: True
        state: present
        insertafter: EOF
      when: timezoneCheckOut.stdout != DesiredTimezone
    - debug: var=timezoneCheckOut.stdout

我的问题是:
1. 如何指定命令行参数作为要写入的目标文件(path)?
2. 如何将参数DesiredTimeZone(在外部变量文件中指定)附加到line参数?

我下面的答案可能不是你的解决方案。

  1. 如何指定输出变量的命令参数。

ansible-playbook yourplaybook.yml -e output=/path/to/outputfile

  1. 如何从外部文件包含所需时区变量。

vars_files: - external.yml

完整的 playbook.yml 用于在本地进行测试:

  • 你的剧本.yml

- name: For testing hosts: localhost vars_files: - external.yml tasks: - name: check timezone tags: timezoneCheck register: timezoneCheckOut shell: timedatectl | grep -i "Time Zone" | awk -F":" '{print $2}' | awk --field-separator=" " '{print $1}'

- debug: var=timezoneCheckOut.stdout

- lineinfile: path: "{{ output }}" line: "Did not find {{ DesiredTimeZone }}" create: True state: present insertafter: EOF when: timezoneCheckOut.stdout != DesiredTimeZone

  • external.yml(与yourplaybook.yml放置相同的级别)

--- DesiredTimeZone: "Asia/Tokyo"

使用 Ansible,您应该定义所需的状态。时期。

正确的方法是只使用时区模块:

- name: set timezone
  timezone:
    name: "{{ DesiredTimeZone }}"

无需用外壳跳过箍,注册,比较,打印...

如果要将系统置于所需状态,只需运行剧本:

ansible-playbook -e DesiredTimeZone=Asia/Tokyo timezone_playbook.yml

Ansible 将确保所有有问题的主机都具有DesiredTimeZone .

如果只想检查系统是否符合所需状态,请使用--check开关:

ansible-playbook -e DesiredTimeZone=Asia/Tokyo --check timezone_playbook.yml

在这种情况下,Ansible 只会将当前状态下应更改的内容打印到日志中,以成为所需状态,而不会进行任何实际更改。

最新更新