我正在使用 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 作为今天的日期。如何使用每次运行脚本时编写的相同格式的最新日期和时间,而不必每天手动更改?
问:“如何使用最新的日期和时间...?”
A:给出下面的脚本
shell> cat test.sh
#!/bin/sh
echo $1
如果以秒为单位的粒度足够,最有效的方法是使用函数 strftime
- name: Run script
command: >
{{ playbook_dir }}/test.sh '{{ "%Y-%m-%d %H:%M:%S"|strftime }}'
register: result
- debug:
var: result.stdout
给予
result.stdout: '2023-05-09 00:09:29'
如果您需要微秒,请使用 Ansible 事实变量 ansible_date_time
- setup:
gather_subset: date_time
- name: Run script
command: "{{ playbook_dir }}/test.sh {{ ansible_date_time.iso8601_micro }}"
register: result
- debug:
var: result.stdout
给予
result.stdout: '2023-05-08T22:09:29.023295Z'
备注:
字典 ansible_date_time 也将在剧本启动时由 'gather_facts: true' 创建。
如果需要的话字典里还有其他属性
ansible_date_time:
date: '2023-05-09'
day: 09
epoch: '1683583769'
epoch_int: '1683583769'
hour: '00'
iso8601: '2023-05-08T22:09:29Z'
iso8601_basic: 20230509T000929023295
iso8601_basic_short: 20230509T000929
iso8601_micro: '2023-05-08T22:09:29.023295Z'
minute: 09
month: '05'
second: '29'
time: 00:09:29
tz: CEST
tz_dst: CEST
tz_offset: '+0200'
weekday: Tuesday
weekday_number: '2'
weeknumber: '19'
year: '2023'
- 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: '2023-05-08T22:09:29.023295Z'
ansible_date_time.iso8601_micro: '2023-05-08T22:09:29.023295Z'
ansible_date_time.iso8601_micro: '2023-05-08T22:09:29.023295Z'
- setup:
gather_subset: date_time
- debug:
var: ansible_date_time.iso8601_micro
- setup:
gather_subset: date_time
- debug:
var: ansible_date_time.iso8601_micro
- setup:
gather_subset: date_time
- debug:
var: ansible_date_time.iso8601_micro
给予(删节)
ansible_date_time.iso8601_micro: '2023-05-08T22:09:29.845384Z'
ansible_date_time.iso8601_micro: '2023-05-08T22:09:30.390135Z'
ansible_date_time.iso8601_micro: '2023-05-08T22:09:31.059892Z'
- debug:
msg: "{{ '%Y-%m-%d %H:%M:%S'|strftime }}"
- wait_for:
timeout: 1
- debug:
msg: "{{ '%Y-%m-%d %H:%M:%S'|strftime }}"
- wait_for:
timeout: 1
- debug:
msg: "{{ '%Y-%m-%d %H:%M:%S'|strftime }}"
给予(删节)
msg: '2023-05-09 00:26:58'
msg: '2023-05-09 00:27:00'
msg: '2023-05-09 00:27:01'
假设
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') }}"
干杯
您可以使用接受 strftime 字符串的 fmt
参数调用
now() 函数。
---
- hosts: localhost
vars:
exec_date: "{{ now(fmt='%Y-%m-%d') }}T00:00:00"