我正在尝试使用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
参数?
答案 0 :(得分:2)
使用Ansible,你应该定义所需的状态。周期。
这样做的正确方法是使用timezone模块:
- name: set timezone
timezone:
name: "{{ DesiredTimeZone }}"
无需通过shell跳过箍,注册,比较,打印......
如果您想将系统置于所需状态,只需运行playbook:
ansible-playbook -e DesiredTimeZone=Asia/Tokyo timezone_playbook.yml
Ansible将确保所有相关主机都拥有DesiredTimeZone
。
如果您只想检查系统是否符合所需状态,请使用--check
开关:
ansible-playbook -e DesiredTimeZone=Asia/Tokyo --check timezone_playbook.yml
在这种情况下,Ansible只会在日志中打印当前状态应该更改的内容,以便成为所需状态,并且不做任何实际更改。
答案 1 :(得分:2)
我的以下答案可能不是您的解决方案。
ansible-playbook yourplaybook.yml -e output=/path/to/outputfile
vars_files:
- external.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
---
DesiredTimeZone: "Asia/Tokyo"