5

Ilekroć uruchomić mój Playbook następujące ostrzeżenie pojawia się:Ostrzeżenie podczas konstruowania mapowanie w ansibl

[UWAGA]: Podczas konstruowania mapowanie z /etc/ansible/roles/foo/tasks/main.yml , wiersz 17, kolumna 3, znalazł duplikat klucza dyktującego (plik). Używanie tylko ostatniej zdefiniowanej wartości.

Odpowiednia część mojego main.yml w folderze zadań jest tak:

(linia 17 jest zadanie oczyścić pliki, które wydaje się być nieco off, więc myślę, że problem jest z poprzednia linia "skrypt")

- name: Run script to format output 
    script: foo.py {{ taskname }} /tmp/fcpout.log 
- name: Clean temp files 
    file: path=/tmp/fcpout.log state=absent 

A mój plik Vars:

--- 
my_dict: {SLM: "114", Regular: "255", Production: "1"} 
taskid: "{{my_dict[taskname]}}" 

Aby uruchomić moja PlayBook zrobić:

ansible-playbook playbooks/foo.yml --extra-vars "server=bar taskname=SLM" 

Co staram się zrobić, to podjąć argumenty wiersza poleceń, ustawić zastępów z parametrem „server”, uzyskać TaskName i od tego dowiedzieć, do którego odnosi id do. Ten id jest używany jako pierwsze wejście do mojego skryptu Pythona, który działa zdalnie.

Playbook działa dobrze, ale nie rozumiem, dlaczego otrzymuję ostrzeżenie. Czy ktoś może wyjaśnić, co tu jest nie tak?

Odpowiedz

7

Czy na pewno nie ma więcej w pobliżu linii 17? To ostrzeżenie jest wyzwalane, gdy w zadaniu są dwa identyczne klucze (lub ogólnie w dowolnym miejscu w dykcie).

Ostrzeżenie twierdzi, istnieją dwa file klucze, sugerując zadanie wygląda następująco:

- name: Clean temp files 
    file: ... 
    file: ... 

Częstym błędem jest to, że ludzie zapominają, aby rozpocząć nowy element listy do następnego zadania. Następujące są ważne, podczas gdy powyższe nie jest:

- name: Clean temp files 
    file: ... 
- file: ... 

Zauważyłem, że w niektórych przypadkach komunikaty o błędach są błędnie wyświetlane, a nawet błędnie. Widziałem, że narzeka na to, że tasks/main.yml problem był w rzeczywistości handlers/main.yml. Jeśli w pobliżu tej linii nie znajdzie się takie zadanie z duplikatami kluczy file, przeszukaj cały plik, a nawet inne pliki. Jeśli nigdzie nie ma niczego takiego, to wygląda na to, że znalazłeś błąd w Ansible. W takim przypadku powinieneś repot it on github.

+0

Masz rację. Było drugie zadanie 'file:'. Nie jestem obeznany z ansible sformułowaniem, więc nie zrozumiałem, że "znaleziono duplikat klucza (pliku)" odnosi się do modułu plików. Słowem "klucz" pomyślałem, że ma to związek z moim słownikiem ... Dzięki za pomoc. –

+0

Możesz to uzyskać, jeśli masz dwa klawisze "task:" :) scenariusz: w książce jest jedno zadanie, które skopiowałeś, a także przez pomyłkę skopiowałeś nagłówek zadania. Czy kopia zapasowa, co @udondan mówi o błędnych numerów linii też - Widziałem ostrzeżenia kilka linii. –