Получите метку времени с сервера управления Ansible и добавьте ее к команде, запущенной в удаленной системе. - PullRequest
0 голосов
/ 24 января 2020

Я запускаю Ansible playbooks с сервера Linux и подключаюсь к удаленным сетевым устройствам. У меня есть книга игр для архивации конфигурации удаленного приложения в хранилище на самом устройстве. По сути, это задание «copy running-config {{filename}}». Как я могу получить метку времени с сервера управления, прежде чем запустить удаленную команду? По сути, я хочу сохранить временную метку сервера управления в переменной, а затем вызвать ее при выполнении команды удаленного архивирования.

1 Ответ

0 голосов
/ 24 января 2020

ansible_date_time - это факт, доступный на любой машине, где вы собрали факты.

$ ansible localhost -m setup -a filter=ansible_date_time
localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_date_time": {
            "date": "2020-01-24",
            "day": "24",
            "epoch": "1579835473",
            "hour": "04",
            "iso8601": "2020-01-24T03:11:13Z",
            "iso8601_basic": "20200124T041113893686",
            "iso8601_basic_short": "20200124T041113",
            "iso8601_micro": "2020-01-24T03:11:13.893763Z",
            "minute": "11",
            "month": "01",
            "second": "13",
            "time": "04:11:13",
            "tz": "CET",
            "tz_offset": "+0100",
            "weekday": "vendredi",
            "weekday_number": "5",
            "weeknumber": "03",
            "year": "2020"
        }
    },
    "changed": false
}

Допустим, epoch - ваш выбор метки времени, вы можете получить к нему доступ в любой строке шаблона jinja2 с помощью ansible_date_time.epoch.

- name: My timestamp play
  hosts: my_hosts
  tasks:
    - name: Show timestamp
      debug:
        msg: "Epoch on {{ inventory_hostname }} is {{ ansible_date_time.epoch }}"

Это будет содержать факт для вашей целевой машины, то есть информацию о дате и времени вашей цели в момент сбора фактов.

Если вы действительно хотите Информация о дате и времени от вашего локального хоста, вам необходимо убедиться, что вы собрали факты из localhost. Достаточно простого пустого игрового таргетинга localhost, как показано ниже, и затем вы можете использовать hostvars['localhost'].ansible_date_time.epoch

- name: Make sure we have localhost facts
  hosts: localhost

- name: Rest of my playbook
  hosts: my_hosts
  tasks:
    - name: Show timestamp from localhost for each target machine
      debug:
        msg: >-
          ansible contoler's epoch is
          {{ hostvars['localhost'].ansible_date_time.epoch }}
          (displayed from {{ inventory_hostname }})

...