Объект AnsibleModule не вызывает ошибку - PullRequest
0 голосов
/ 26 декабря 2018

Моя книга воспроизведения выглядит следующим образом

---
- hosts: nodes
  become: yes
  tasks:
  - name: Run Shell Script to get IPs with 4xx and 5xx errors

    script: /home/ubuntu/ips.sh
    args:
      chdir: /home/ubuntu
    register: ips

  - set_fact:
       iperrors: "{{ groups.nodes | map('extract', hostvars, 'ips') | map(attribute='stdout') | join('') }}"
    run_once: true
    delegate_to: localhost


  - name: Python Custom Module to get Top 5 Ips
    5ips:
      iperrors: "{{iperrors}}"
    run_once: true
    delegate_to: localhost
    register: 5ip

Я написал пользовательский модуль 5ips. Но когда я запускаю программу воспроизведения, она выдает ошибку следующим образом

TASK [Python Custom Module to get Top 5 Ips] ***************************************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: TypeError: 'AnsibleModule' object is not callable
fatal: [54.183.110.130 -> localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n  File \"/home/ubuntu/.ansible/tmp/ansible-tmp-1545815995.35-86175850009970/AnsiballZ_5ips.py\", line 113, in <module>\n    _ansiballz_main()\n  File \"/home/ubuntu/.ansible/tmp/ansible-tmp-1545815995.35-86175850009970/AnsiballZ_5ips.py\", line 105, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/home/ubuntu/.ansible/tmp/ansible-tmp-1545815995.35-86175850009970/AnsiballZ_5ips.py\", line 48, in invoke_module\n    imp.load_module('__main__', mod, module, MOD_DESC)\n  File \"/tmp/ansible_5ips_payload_7Vi28k/__main__.py\", line 41, in <module>\n  File \"/tmp/ansible_5ips_payload_7Vi28k/__main__.py\", line 12, in main\nTypeError: 'AnsibleModule' object is not callable\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc"

, мой 5ips.py выглядит какследует

#!/usr/bin/python

from ansible.module_utils.basic import *

def main():
    fields = {
        "iperrors" :{"required":True, "type":"str"}
        }
    module = AnsibleModule(argument_spec = fields)
    iperrors = module.params['iperrors']
    module(iperrors)

    if IpList !=0:
        module.exit_json(changed = True, msg = "top5 ips done")
    else:
        module.fail_json(changed = False, Error = "Something went wrong in Top5IPS.py")

def module(iperrors):
    ipErrors ={}
    IpList=[]

входные ошибки, которые я даю, представляют собой многострочную строку.Я не уверен, где именно ошибка?

1 Ответ

0 голосов
/ 26 декабря 2018

Проверьте ключ "module_stderr" в выходных данных.Ближе к концу написано, что «объект AnsibleModule не может быть вызван \ n»

Я не очень знаком с пользовательскими модулями ANSIBLE, но похоже, что способ их записи изменился, проверьте новые документы здесь.: https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_general.html#developing-modules-general

В качестве альтернативы, вы можете попробовать использовать более старую (<2.0, вероятно) версию ansible. </p>

...