Das Folgende ist meine YAML-Datei für eine Ansible-Konfiguration eines Cisco-Geräts. In /etc/ansible/hosts habe ich auch die Hosts-Datei bearbeitet, um meine Amazon EC2 Ami-Instanz widerzuspiegeln, wie unten zu sehen ist
[ec2-instances]
ec2-54-152-72-23.compute-1.amazonaws.com
Inventardatei
YAML-Datei unten
---
- hosts: ec2-54-152-72-23.compute-1.amazonaws.com
gather_facts: false
connection: local
tasks:
-name: Customer IOS Upgrade Initial Discovery
cli_command: "{{ show }}"
vars:
show:
- show run
- show version
- show interface status
- show license
-mail:
host: smtp.gmail.com
port: 587
username: [email protected]
password: sample2
to: [email protected]
subject: '{{ ansible_hostname }} configuration'
body: 'System {{ ansible_hostname }} has been successfully discovered.'
delegate_to: localhost
save_when: changed
...
Ich erhalte die folgende Fehlermeldung, wenn ich versuche, Folgendes auszuführen. Irgendeine Idee, warum das passiert? Ich habe das, was in der anfänglichen YAML-Datei angezeigt wird, die mit [ec2-instances] bereitgestellt wird, ausgetauscht und es gibt immer noch keinen Unterschied im Laufzeitergebnis.
ansible-playbook -i /etc/ansible/hosts test2.yml --user ec2-user --private-key=/home/adam/Desktop/EC2CSR1000v.pem -vvv
ansible-playbook 2.7.9
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/adam/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/dist-packages/ansible
executable location = /usr/bin/ansible-playbook
python version = 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0]
Using /etc/ansible/ansible.cfg as config file
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected
Parsed /etc/ansible/hosts inventory source with ini plugin
ERROR! A malformed block was encountered while loading tasks
The error appears to have been in '/etc/ansible/scripts/test2.yml': line 2, column 4, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
---
- hosts: [ec2-instance]
^ here
Antwort1
Zuerst müssen Sie Ihre reineyaml.
Sie müssen auf Optionen achten, die sich global auf eine Aufgabe beziehen oder Parameter eines bestimmten Moduls sind: Sie sollten richtig eingerückt sein, um ihren richtigen Umfang widerzuspiegeln.
Sie müssen unbedingt die Dokumentation zu den Modulen lesen, die Sie verwenden möchten. Zum Beispiel:cli_command
akzeptiert direkt einen String, benötigt aber eine explizite command
Option und möglicherweise andere. Es akzeptiert keine Liste, daher müssen andere Ihrer Befehle in einer Schleife ausgeführt werden.
Abschließend sollten Sie noch einige Besonderheiten überprüfen:
- Sie geben einen einzelnen Remote-Host als Ziel für Ihr Spiel an (das ist ok), listen aber die Verbindung lokal auf. Wenn dies wirklich ein Remote-Host ist, kann dies nicht funktionieren, da Sie sich per SSH darauf einloggen müssen.
- Sie verwenden (was meines Erachtens eine) Task-Option ist
save_when
. Ich glaube, ich verstehe, dass sie sich fälschlicherweise am Ende der Datei befindet und mit demcli_command
Modulaufruf verwendet werden sollte. Inzwischen ist sie nicht als Parameter dieses Moduls aufgeführt (ist aber Teil anderer relevanterCisco iOS-Module
An diesem Punkt verstehe ich nicht wirklich, was Sie genau tun möchten, daher kann ich Ihr Playbook nur mit dem korrigieren, was ich für richtig halte, damit Sie versuchen können, weiterzumachen.
---
- name: Playbook to manage my cisco IOS devices
hosts: ec2-54-152-72-23.compute-1.amazonaws.com
gather_facts: false
tasks:
- name: Customer IOS Upgrade Initial Discovery
cli_command:
command: "{{ item }}"
loop:
- show run
- show version
- show interface status
- show license
- name: Send a feedback by email
mail:
host: smtp.gmail.com
port: 587
username: [email protected]
password: sample2
to: [email protected]
subject: '{{ ansible_hostname }} configuration'
body: 'System {{ ansible_hostname }} has been successfully discovered.'
delegate_to: localhost