Синтаксическая ошибка YAML
Ниже приведен мой файл yaml для доступной конфигурации устройства Cisco. В /etc/ansible/hosts я также отредактировал файл hosts, чтобы отразить мой экземпляр Amazon EC2 Ami, как показано ниже.
[ec2-instances]
ec2-54-152-72-23.compute-1.amazonaws.com
Инвентарный файл ^
Файл YAML ниже
---
- 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: sample@gmail.com
password: sample2
to: sample@sample.com
subject: '{{ ansible_hostname }} configuration'
body: 'System {{ ansible_hostname }} has been successfully discovered.'
delegate_to: localhost
save_when: changed
...
Я получаю следующее сообщение об ошибке при попытке запустить следующее. Есть идеи, почему это происходит? Я отключил то, что видно в исходном файле.yaml, предоставленном с [ec2-instances], и по-прежнему нет разницы в результатах во время выполнения.
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
1 ответ
Сначала вам нужно починить свой чистый ямл.
Вам необходимо обратить внимание на параметры, которые относятся к задаче в целом или являются параметрами определенного модуля: они должны иметь отступы, чтобы отражать их правильную область действия.
Вы должны убедиться, что вы прочитали документ о модулях, которые вы хотите использовать. Например, cli_command
принимает непосредственно строку, но нуждается в явном command
вариант и, возможно, другие. Он не примет список, поэтому придется зациклить другие ваши команды.
Наконец, есть некоторые странности, которые вы должны проверить:
- Вы предоставляете один удаленный хост в качестве цели для вашей игры (это нормально), но вы указываете локальное соединение. Если это действительно удаленный хост, это не может работать, так как вам нужно будет подключиться к нему по ssh.
- Вы используете (что я считаю) вариант задачи
save_when
, Я думаю, что я понимаю, что он находится в конце файла по ошибке и должен использоваться сcli_command
Модуль вызова. Между тем, он не указан в качестве параметра этого модуля (но является частью других соответствующих модулей Cisco IOS
На данный момент я не совсем понимаю, что именно вы хотите делать, поэтому я могу исправить вашу игру только тем, что я считаю правильным, чтобы вы могли попытаться двигаться вперед.
---
- 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: sample@gmail.com
password: sample2
to: sample@sample.com
subject: '{{ ansible_hostname }} configuration'
body: 'System {{ ansible_hostname }} has been successfully discovered.'
delegate_to: localhost