2016-04-29 115 views
0

我正在一个数据库转储如下:如何从shell命令从ansible戏中提取文件名

- name: create backup of the EMS database 
  shell: " mysqldump --single-transaction --triggers --routines --events --hex-blob --complete-insert -h {{groups.db_name[0]}} -u {{ db_user }} -p{{ db_password }} {{ db_name }} > {{ vars.inventory_dir }}/../{{ db_name}}_backup-{{ ansible_date_time.iso8601 }}.sql" 
  register: db_backup 
现在

,如果你发现在最后的shell命令我转储MySQL的使用日期时间附加为{{ db_name}}_backup-{{ ansible_date_time.iso8601 }}.sql

如何在下一次播放中只使用这个动态部分?

回答

2

我建议你先保存文件名作为一个事实:

- set_fact: 
    mysql_dump_file: "{{ db_name }}_backup-{{ ansible_date_time.iso8601 }}.sql" 

然后在转储任务,下面你需要的文件名的所有任务,你使用这个事实:{{ mysql_dump_file }}

- name: create backup of the EMS database 
    shell: "mysqldump --single-transaction --triggers --routines --events --hex-blob --complete-insert -h {{ groups.db_name[0] }} -u {{ db_user }} -p{{ db_password }} {{ db_name }} > {{ vars.inventory_dir }}/../{{ mysql_dump_file }}" 
    register: db_backup 
+0

做到这一点在所有后续任务中保持不变?即'mysql_dump_file',因为它有ansible_date_time的东西? –

+0

事实存储为当前剧本执行,因此所有后续任务具有相同的值'mysql_dump_file'。如果你甚至需要后续剧本执行的相同值,你可以看看[缓存事实](http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching)。 – udondan