如何在 ansible-playbook 中设置运行时全局变量

问题描述 投票:0回答:1

我想设置全局变量“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
ansible
1个回答
0
投票

这种情况有两种解决方案。

  • 使用
    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

https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#tips-on-where-to-set-variables

group_vars/all
文件中设置常用默认值。

© www.soinside.com 2019 - 2024. All rights reserved.