2016-04-29 43 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