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

从命令行参数-Ansible写入用户指定的文件,ansible,Ansible,我正在尝试使用lineinfle将一行写入文件 用户在运行时将文件名作为命令行参数传递给playbook 以下是任务的外观: # Check for timezone. - name: check timezone tags: timezoneCheck register: timezoneCheckOut shell: timedatectl | grep -i "Time Zone" | awk --field-separator=":" '{

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

用户在运行时将文件名作为命令行参数传递给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
(在外部变量文件中指定)附加到
参数

使用Ansible,您应该定义所需的状态。句号

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

无需使用shell、register、compare、print等功能跳转

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

ansible-playbook -e DesiredTimeZone=Asia/Tokyo timezone_playbook.yml
Ansible将确保所有相关主机都具有
所需时区

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

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

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

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

  • 如何为输出变量指定命令参数
  • ansible playbook yourplaybook.yml-e output=/path/to/outputfile

  • 如何从外部文件中包含所需的时区变量
  • vars\u文件:
    -外部的.yml
    

    完整的playbook.yml,用于本地测试:
    • yourplaybook.yml
    -名称:用于测试
    主机:本地主机
    vars_文件:
    -外部的.yml
    
    任务:
    -名称:检查时区
    标签:timezoneCheck
    注册号码:timezoneCheckOut
    shell:timedatectl | grep-i“时区”| awk-F:“{print$2}”|awk--field separator=”“{print$1}”

    -debug:var=timezoneCheckOut.stdout

    -lineinfle:
    路径:“{output}}”
    行:“未找到{{DesiredTimeZone}”
    创建:True
    国家:现在
    插入者:EOF
    时间:timezoneCheckOut.stdout!=理想时区
    

    • external.yml(与playbook.yml放在同一级别)
    ---
    
    理想时区:“亚洲/东京”

    同意。我正在尝试编写一种审计脚本,以确保所有服务器都正确对齐。我们创建和销毁了大量服务器,需要确保所有服务器都是相同的。请密切注意
    --选中
    选项。您还可以强制Ansible输出JSON作为其输出,以便进行简单的机器分析(参见答案)。谢谢
    
    ansible-playbook -e DesiredTimeZone=Asia/Tokyo --check timezone_playbook.yml