Inventardatei

Inventardatei

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_commandakzeptiert direkt einen String, benötigt aber eine explizite commandOption 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 dem cli_commandModulaufruf 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

verwandte Informationen