Ansible set_fact à travers joue
Je dois courir un ansible playbook pour exécuter les tâches suivantes
1) Calculer la date de YYYY_MM_DD format, puis utiliser ce préfixe de télécharger un fichier à partir d'aws pour ma machine locale. Le nom de fichier est de la forme suivante 2015_06_04_latest_file.csv
2) j'ai ensuite créer un dossier du nom 2015_06_04 dans plusieurs hôtes et de téléchargement de ce fichier.
C'est mon playbook -
---
- hosts: 127.0.0.1
connection: local
sudo: yes
gather_facts: no
tasks:
- name: calculate date
shell: date "+%Y_%m_%d" --date="1 days ago"
register: output
- name: set date variable
set_fact: latest_date={{ item }}
with_items: output.stdout_lines
- local_action: command mkdir -p /tmp/latest_contracts/{{ latest_date }}
- local_action: command /root/bin/aws s3 cp s3://primarydatafolder/data/{{ latest_date }}_latest_data.csv /tmp/latest_contracts/{{ latest_date }}/creates=/tmp/latest_contracts/{{ latest_date }}/latest_data.csv
register: result
ignore_errors: true
- local_action: command /root/bin/aws s3 cp s3://secondarydatafolder/data/{{ latest_date }}_latest_data.csv /tmp/latest_contracts/{{ latest_date }}/creates=/tmp/latest_contracts/{{ latest_date }}/latest_data.csv
when: result|failed
# remove the date prefix from the downloaded file
- local_action: command ./rename_date.sh {{ latest_date }}
ignore_errors: true
- hosts: contractsServers
sudo: yes
gather_facts: no
tasks:
- name: create directory
file: path={{item.path}} state=directory mode=0775 owner=root group=root
with_items:
- {path: '/var/mukul/contracts/{{ latest_date }}' }
- {path: '/var/mukul/contracts/dummy' }
- name: copy dummy contracts
copy: src=dummy dest=/var/mukul/contracts/
- name: delete previous symlink
shell: unlink /var/mukul/contracts/latest
ignore_errors: true
- name: upload the newly created latest date folder to the host
copy: src=/tmp/latest_contracts/{{ latest_date }} dest=/var/mukul/contracts/
- name: create a symbolic link to the folder on the host and call it latest
action: file state=link src=/var/mukul/contracts/{{ latest_date }} dest=/var/mukul/contracts/latest
Comme par ansible documentation sur les set_fact variable, cette variable latest_date devraient être disponibles à travers des pièces de théâtre. Cependant, ansible échoue avec le message suivant
failed: [192.168.101.177] => (item={'path': u'/var/mukul/contracts/{# latest_date #}'}) => {"failed": true, "item": {"path": "/var/mukul/contracts/{# latest_date #}"}}
msg: this module requires key=value arguments (['path=/var/mukul/contracts/{#', 'latest_date', '#}', 'state=directory', 'mode=0775', 'owner=root', 'group=root'])
Il semble que si la deuxième playbook est impossible d'obtenir la valeur de la latest_date fait. Pouvez-vous s'il vous plaît dites-moi où je fais une erreur?
OriginalL'auteur Mukul Jain | 2015-06-05
Vous devez vous connecter pour publier un commentaire.
Faits sont spécifiques de l'hôte. Comme le de la documentation sur set_fact dit, "[v]ariables [set avec set_fact] sont réglés sur un ordinateur hôte par hôte de la base".
Au lieu de cela, je vais essayer, à l'aide de
run_once
tel que défini dans Délégation, mises à jour régulières, et les actions locales, comme ceci:OriginalL'auteur Antonis Christofides
Vous pouvez activer fait de la mise en cache. Vous aurez besoin de mettre en place un local redis instance où les faits seront ensuite stockées.
OriginalL'auteur udondan