Я пытаюсь включить и выключить машину с помощью ansible ipmi_power модуль.
В документации сказано, что вам нужно иметь пигмий установлен на хосте, на котором вы выполняете playbook, и я подтвердил, что у меня есть модуль для python 2 и 3.
[userg@box ~]$ python3
Python 3.6.8 (default, Apr 2 2020, 13:34:55)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyghmi.ipmi
>>> quit()
[user@box ~]$ python
Python 2.7.5 (default, Apr 2 2020, 13:16:51)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyghmi.ipmi
>>> quit()
У меня есть роль под названием power_cycle
и определяется это так:
---
- name: "powering down {{ ansible_hostname }}"
ipmi_power:
name: "{{ ansible_hostname }}"
user: "{{ ipmi_user }}"
password: "{{ ipmi_password }}"
state: off
И у меня есть playbook, который вызывает роль, он выглядит так:
---
- name: power cycle
hosts: boxes
roles:
- power_cycle
Когда я запускаю playbook, я получаю сообщение об ошибке:
$ ansible-playbook --limit target_box playbooks/power_cycle.yml
PLAY [power cycle]********************************************************************************
TASK [Gathering Facts] ***************************************************************************
ok: [target_box]
TASK [power_cycle : powering down target_box]*****************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ImportError: No module named pyghmi.ipmi
fatal: [target_box]: FAILED! => changed=false
exception: |-
Traceback (most recent call last):
File "/tmp/ansible_ipmi_power_payload_skn3T3/ansible_ipmi_power_payload.zip/ansible/modules/remote_management/ipmi/ipmi_power.py", line 81, in <module>
ImportError: No module named pyghmi.ipmi
msg: Failed to import the required Python library (pyghmi) on target_box's Python
/usr/bin/python. Please read module documentation and install in the appropriate location. If the
required library is installed, but Ansible is using the wrong Python interpreter, please consult
the documentation on ansible_python_interpreter
PLAY RECAP***************************************************************************************
target_box : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Сообщение об ошибке предполагает, что мне нужно pyghmi
установлен на машине, которой я пытаюсь управлять через IPMI. Похоже, это противоречит документации для ipmi_power
модуль.
Что я делаю не так?
Я покопался в проблемах на гитхабе ansible.
Я обнаружил проблему с ipmi_power у этого был пример того, как его использовать. Вам нужно использовать delegate_to
свойство в задаче, чтобы гарантировать, что она выполняется локально.
Изменение моего определения роли на это сработало:
---
- name: "powering down {{ ansible_hostname }}"
ipmi_power:
name: "{{ ansible_hostname }}"
user: "{{ ipmi_user }}"
password: "{{ ipmi_password }}"
state: off
delegate_to: localhost