从命令行参数-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