如何将今天的日期和时间作为参数传递给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 并改为注册结果。