如何将今天的日期和时间作为参数传递给ansible
How to pass today's date and time as argument in ansible
我正在使用 ansible 运行宁 python 脚本。
这是我的剧本 -
- name: Run python script
command: python Test.py -StartDate 2020-10-01T00:00:00 -EndDate 2020-11-05T00:00:00
register: result
- debug: msg="{{result.stdout}}"
我希望此剧本在我 运行 脚本时使用 EndDate 作为今天的日期。我怎样才能使用我每次编写 运行 脚本时所写的相同格式的最新日期和时间,而不必每天手动更改?
假设 T00:00:00
始终是固定的,您可以使用查找插件声明一个变量,请参阅 exec_date
变量和修改后的 command
任务下方的示例:
---
- hosts: localhost
gather_facts: false
vars:
exec_date: "{{ lookup('pipe', 'date +%Y-%m-%d') }}T00:00:00"
tasks:
- name: print
debug: var=exec_date
- name: Run python script
command: "python Test.py -StartDate 2020-10-01T00:00:00 -EndDate {{ exec_date }}"
register: result
- debug: msg="{{result.stdout}}"
如果您也想传递当前时间而不是固定时间 T00:00:00
,您可以使用以下内容:
vars:
exec_date: "{{ lookup('pipe', 'date +%Y-%m-%dT%H:%M:%S') }}"
干杯
问:"如何使用最新的日期和时间...?"
A:使用 Ansible 事实变量 ansible_date_time。例如,给出下面的脚本
shell> cat test.sh
#!/bin/sh
echo
剧本
shell> cat playbook.yml
- hosts: localhost
tasks:
- name: Run script
command: "{{ playbook_dir }}/test.sh
2020-10-01T00:00:00
{{ ansible_date_time.date }}T00:00:00"
register: result
- debug:
var: result.stdout
给出(删节)
shell> ansible-playbook playbook.yml
result.stdout: 2020-10-01T00:00:00 2020-11-07T00:00:00
备注
"gather_facts:需要 true"(默认值)来收集 Ansible 事实。
当 playbook 启动时,将在远程主机上收集日期和时间的值。
如果需要,字典中还有其他属性
ansible_date_time:
date: '2020-11-07'
day: '07'
epoch: '1604779525'
hour: '21'
iso8601: '2020-11-07T20:05:25Z'
iso8601_basic: 20201107T210525040700
iso8601_basic_short: 20201107T210525
iso8601_micro: '2020-11-07T20:05:25.040817Z'
minute: '05'
month: '11'
second: '25'
time: '21:05:25'
tz: CET
tz_offset: '+0100'
weekday: Saturday
weekday_number: '6'
weeknumber: '44'
year: '2020'
- 变量ansible_date_time不会在剧本运行时自动更新。例如
- debug:
var: ansible_date_time.iso8601_micro
- debug:
var: ansible_date_time.iso8601_micro
- debug:
var: ansible_date_time.iso8601_micro
给出(删节)
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
- 运行 模块 setup 更新 Ansible 事实,包括变量 ansible_date_time。例如
- debug:
var: ansible_date_time.iso8601_micro
- setup:
- debug:
var: ansible_date_time.iso8601_micro
- setup:
- debug:
var: ansible_date_time.iso8601_micro
给出(删节)
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:10.759533Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:11.475873Z'
- 经常 运行 setup 只更新日期和时间是多余的。在这种情况下,请考虑 运行 command 并改为注册结果。
我正在使用 ansible 运行宁 python 脚本。
这是我的剧本 -
- name: Run python script
command: python Test.py -StartDate 2020-10-01T00:00:00 -EndDate 2020-11-05T00:00:00
register: result
- debug: msg="{{result.stdout}}"
我希望此剧本在我 运行 脚本时使用 EndDate 作为今天的日期。我怎样才能使用我每次编写 运行 脚本时所写的相同格式的最新日期和时间,而不必每天手动更改?
假设 T00:00:00
始终是固定的,您可以使用查找插件声明一个变量,请参阅 exec_date
变量和修改后的 command
任务下方的示例:
---
- hosts: localhost
gather_facts: false
vars:
exec_date: "{{ lookup('pipe', 'date +%Y-%m-%d') }}T00:00:00"
tasks:
- name: print
debug: var=exec_date
- name: Run python script
command: "python Test.py -StartDate 2020-10-01T00:00:00 -EndDate {{ exec_date }}"
register: result
- debug: msg="{{result.stdout}}"
如果您也想传递当前时间而不是固定时间 T00:00:00
,您可以使用以下内容:
vars:
exec_date: "{{ lookup('pipe', 'date +%Y-%m-%dT%H:%M:%S') }}"
干杯
问:"如何使用最新的日期和时间...?"
A:使用 Ansible 事实变量 ansible_date_time。例如,给出下面的脚本
shell> cat test.sh
#!/bin/sh
echo
剧本
shell> cat playbook.yml
- hosts: localhost
tasks:
- name: Run script
command: "{{ playbook_dir }}/test.sh
2020-10-01T00:00:00
{{ ansible_date_time.date }}T00:00:00"
register: result
- debug:
var: result.stdout
给出(删节)
shell> ansible-playbook playbook.yml
result.stdout: 2020-10-01T00:00:00 2020-11-07T00:00:00
备注
"gather_facts:需要 true"(默认值)来收集 Ansible 事实。
当 playbook 启动时,将在远程主机上收集日期和时间的值。
如果需要,字典中还有其他属性
ansible_date_time:
date: '2020-11-07'
day: '07'
epoch: '1604779525'
hour: '21'
iso8601: '2020-11-07T20:05:25Z'
iso8601_basic: 20201107T210525040700
iso8601_basic_short: 20201107T210525
iso8601_micro: '2020-11-07T20:05:25.040817Z'
minute: '05'
month: '11'
second: '25'
time: '21:05:25'
tz: CET
tz_offset: '+0100'
weekday: Saturday
weekday_number: '6'
weeknumber: '44'
year: '2020'
- 变量ansible_date_time不会在剧本运行时自动更新。例如
- debug:
var: ansible_date_time.iso8601_micro
- debug:
var: ansible_date_time.iso8601_micro
- debug:
var: ansible_date_time.iso8601_micro
给出(删节)
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
- 运行 模块 setup 更新 Ansible 事实,包括变量 ansible_date_time。例如
- debug:
var: ansible_date_time.iso8601_micro
- setup:
- debug:
var: ansible_date_time.iso8601_micro
- setup:
- debug:
var: ansible_date_time.iso8601_micro
给出(删节)
ansible_date_time.iso8601_micro: '2020-11-07T20:16:09.481237Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:10.759533Z'
ansible_date_time.iso8601_micro: '2020-11-07T20:16:11.475873Z'
- 经常 运行 setup 只更新日期和时间是多余的。在这种情况下,请考虑 运行 command 并改为注册结果。