#python #ansible #centos #vagrant
#python #ansible #centos #бродяга
Вопрос:
Ситуация: У меня возникает проблема при попытке загрузить базовый файл python динамической инвентаризации в Ansible.
Предыстория: Когда я выполняю python test.py он выведет список, однако в ansible это не удается
Оценка:Я перепробовал множество других файлов-примеров, и ни один из них не сработал, это самое простое, что я мог сделать
Рекомендация: Может кто-нибудь, пожалуйста, указать мне правильное направление? связано ли это с ansible.cfg?
vagrant@cd98f180bc88 /vagrant/adc-cmdb-inventory/enviroments $ python test.py --list
{"all": {"hosts": ["192.168.28.71", "192.168.28.72"], "vars": {"ansible_python_interpreter": "/usr/bin/python3", "ansible_ssh_private_key_file": "~/.vagrant.d/insecure_private_key", "example_variable": "value", "ansible_user": "vagrant"}}, "_me
ta": {"hostvars": {"192.168.28.72": {"host_specific_var": "bar"}, "192.168.28.71": {"host_specific_var": "foo"}}}}
ПРОБЛЕМА:
Используемая команда: ansible -i test.py all -m ping —list-host
[WARNING]: * Failed to parse /vagrant/adc-cmdb-inventory/enviroments/test.py with script plugin: problem running /vagrant/adc-cmdb-inventory/enviroments/test.py --list ([Errno 2] No such file or directory: '/vagrant/adc-cmdb-
inventory/enviroments/test.py': '/vagrant/adc-cmdb-inventory/enviroments/test.py')
[WARNING]: * Failed to parse /vagrant/adc-cmdb-inventory/enviroments/test.py with ini plugin: /vagrant/adc-cmdb-inventory/enviroments/test.py:4: Expected key=value host variable assignment, got: os
[WARNING]: Unable to parse /vagrant/adc-cmdb-inventory/enviroments/test.py as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
hosts (0):
test.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
import sys
import argparse
import json
class ExampleInventory(object):
def __init__(self):
self.inventory = {}
self.read_cli_args()
# Called with `--list`.
if self.args.list:
self.inventory = self.example_inventory()
# Called with `--host [hostname]`.
elif self.args.host:
# Not implemented, since we return _meta info `--list`.
self.inventory = self.empty_inventory()
# If no groups or vars are present, return empty inventory.
else:
self.inventory = self.empty_inventory()
print(json.dumps(self.inventory))
# Example inventory for testing.
def example_inventory(self):
return {
'all': {
'hosts': ['192.168.28.71', '192.168.28.72'],
'vars': {
'ansible_user': 'vagrant',
'ansible_ssh_private_key_file':
'~/.vagrant.d/insecure_private_key',
'ansible_python_interpreter':
'/usr/bin/python3',
'example_variable': 'value'
}
},
'_meta': {
'hostvars': {
'192.168.28.71': {
'host_specific_var': 'foo'
},
'192.168.28.72': {
'host_specific_var': 'bar'
}
}
}
}
# Empty inventory for testing.
def empty_inventory(self):
return {'_meta': {'hostvars': {}}}
# Read the command line args passed to the script.
def read_cli_args(self):
parser = argparse.ArgumentParser()
parser.add_argument('--list', action = 'store_true')
parser.add_argument('--host', action = 'store')
self.args = parser.parse_args()
# Get the inventory.
ExampleInventory()
Комментарии:
1.
chmod 755 test.py
и / или/usr/bin/python
существует?2. Добавлены разрешения (та же ошибка) и да, / usr/bin/python существует
3. Не знаю, что вам сказать, это работает на моей машине:
chmod 755 test.py amp;amp; ansible-inventory -i test.py --list
бодро выдает{"_meta":{"hostvars":{"192.168.28.71"
и все остальное; редактированиеtest.py
для того, чтобы#!/nope/404
затем заставитьansible-inventory
выдавать ту же ошибку, которую вы опубликовали, так что мы здесь4. Я подтверждаю, что это работает так, как ожидалось, и на моей стороне
5. Спасибо, я могу подтвердить, что я полностью собрал другую сборку centos, и она работает. Проблема в том, что мне нужно найти решение в текущей среде. Я не верю, что его Ansible связан с centos.
Ответ №1:
Невидимые окончания строк!
В итоге я установил dos2unix и преобразовал файлы, в конце каждой строки были теги CR и LF.
Удалите строки CF с помощью dos2unix, и он заработает с первого раза.
Комментарии:
1. Я провел последние пару дней, пытаясь понять, почему это происходило со мной, прежде чем я увидел этот пост!