我正在尝试使用 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
参数?
我下面的答案可能不是你的解决方案。
- 如何指定输出变量的命令参数。
ansible-playbook yourplaybook.yml -e output=/path/to/outputfile
- 如何从外部文件包含所需时区变量。
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 只会将当前状态下应更改的内容打印到日志中,以成为所需状态,而不会进行任何实际更改。