Centos6でAnsibleを1から2にしたら 「ERROR! Unexpected Exception: 'AnsibleLoader' object has no attribute 'dispose'」
Ansible2をCentOS6にインスト 今までは1.9系でした
yum install python-jinja2-26 --enablerepo=epel yum --enablerepo=epel-testing install ansible
とりあえずsudo:yesは以下にしとこう become: yes become_user: root
そしてAnsibleを1.9から2.0にしたら以下エラーが出た
[root@ansiblesvr01 ansible]# ansible-playbook -vvv test.yml -i ./hosts --check
/usr/lib64/python2.6/site-packages/pycrypto-2.6.1-py2.6-linux-x86_64.egg/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
_warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
Using /etc/ansible.cfg as config file
ERROR! Unexpected Exception: 'AnsibleLoader' object has no attribute 'dispose'
the full traceback was:
Traceback (most recent call last):
File "/usr/bin/ansible-playbook", line 86, in <module>
sys.exit(cli.run())
File "/usr/lib/python2.6/site-packages/ansible/cli/playbook.py", line 128, in run
inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list=self.options.inventory)
File "/usr/lib/python2.6/site-packages/ansible/inventory/__init__.py", line 85, in __init__
self.parse_inventory(host_list)
File "/usr/lib/python2.6/site-packages/ansible/inventory/__init__.py", line 141, in parse_inventory
group.vars = combine_vars(group.vars, self.get_group_variables(group.name))
File "/usr/lib/python2.6/site-packages/ansible/inventory/__init__.py", line 506, in get_group_variables
self._vars_per_group[groupname] = self._get_group_variables(groupname, vault_password=vault_password)
File "/usr/lib/python2.6/site-packages/ansible/inventory/__init__.py", line 524, in _get_group_variables
vars = combine_vars(vars, self.get_group_vars(group))
File "/usr/lib/python2.6/site-packages/ansible/inventory/__init__.py", line 704, in get_group_vars
return self._get_hostgroup_vars(host=None, group=group, new_pb_basedir=new_pb_basedir)
File "/usr/lib/python2.6/site-packages/ansible/inventory/__init__.py", line 743, in _get_hostgroup_vars
results = combine_vars(results, self._variable_manager.add_group_vars_file(base_path, self._loader))
File "/usr/lib/python2.6/site-packages/ansible/vars/__init__.py", line 560, in add_group_vars_file
(name, data) = self._load_inventory_file(path, loader)
File "/usr/lib/python2.6/site-packages/ansible/vars/__init__.py", line 528, in _load_inventory_file
data = loader.load_from_file(new_path)
File "/usr/lib/python2.6/site-packages/ansible/parsing/dataloader.py", line 114, in load_from_file
parsed_data = self.load(data=file_data, file_name=file_name, show_content=show_content)
File "/usr/lib/python2.6/site-packages/ansible/parsing/dataloader.py", line 93, in load
new_data = self._safe_load(new_data, file_name=file_name)
File "/usr/lib/python2.6/site-packages/ansible/parsing/dataloader.py", line 150, in _safe_load
loader.dispose()
AttributeError: 'AnsibleLoader' object has no attribute 'dispose'
どうやらlibyamlが先に入ってないとダメなようで、今回入ってなかったので一度Ansible2をアンインストールして、 そのあとにlibyamlを入れてからAnsible2を入れ直した。 libyamlだけ追加で入れてもダメでした。おそらくライブラリを見てる先が変わってしまってるのかな
ちなみにpython-yamlはAnsibleと依存関係があり同時にインストされます
[root@ansiblesvr001 ansible]# rpm -qa | grep yaml python-yaml-3.09-3.el6.rf.x86_64 libyaml-0.1.3-4.el6_6.x86_64