我想设置全局变量“file_time_stamp”和时间戳的运行时值,该值将在ansible playbook中使用。任何有关执行此操作的信息都会非常有用。
我正在备份数据库并在 Linux_system 的 docker 容器中恢复 我正在从 linux_system 运行 playbook,如下所示:
---
# global variables
file_time_stamp: "{{ now(utc=true,fmt='%Y-%m-%d_%H-%M-%S') }}"
- name: Dump db
hosts: windows_server
gather_facts: false
tasks:
- ansible.windows.win_shell: C:\xampp\mysql\bin\mysqldump.exe -h 127.0.0.1 -uroot -pmy-secret-pw my_repo > C:\Users\Administrator\Documents\mobile_{{ file_time_stamp }}.sql
- name: Copy the recent db dump for testing
hosts: windows_server
gather_facts: false
tasks:
- name: fetch file
fetch: src=C:\Users\Administrator\Documents\mobile_{{ file_time_stamp }}.sql dest=/root/mobile_{{ file_time_stamp }}.sql flat=yes
- hosts: linux_system
gather_facts: false
tasks:
- shell: docker exec -i some-mariadb1 mysql -u root --password=my-secret-pw --database=my_repo < /root/mobile_{{ file_time_stamp }}.sql
这种情况有两种解决方案。
set_fact
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/set_fact_module.html
该模块允许设置新变量。变量是在逐个主机的基础上设置的,就像设置模块发现的事实一样。这些变量将在 Ansible 运行期间在两次播放之间保留,但即使您使用事实缓存,也不会在执行期间保存。
- hosts: windows_server:linux_system
tasks:
- set_fact: file_time_stamp="{{ now(utc=true,fmt='%Y-%m-%d_%H-%M-%S') }}"
- hosts: windows_server
tasks:
-shell: echo {{file_time_stamp}}
- hosts: linux_system
tasks:
-shell: echo {{file_time_stamp}}
group_vars
在
文件中设置常用默认值。group_vars/all