Назад | Перейти на главную страницу

Как использовать модуль ipmi_power от ansible?

Я пытаюсь включить и выключить машину с помощью 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