'TypeError: 'NoneType' object is not iterable in ansible output

I have set up an ansible tower using the following docker image

ybalt/ansible-tower:latest

After setting up I have upgraded the applications inside the container by

apt-get upgrade

After that following are the versions inside my conatiner

ansible 2.7.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.12 (default, Jul 18 2016, 15:02:52) [GCC 4.8.4]

Then when I execute a script that uses the mail module in ansible the following error shown in the ansible tower output

fatal: [Server]: FAILED! => {
    "changed": false, 
    "module_stderr": "Shared connection to x.x.x.x closed.\r\n", 
    "module_stdout": "\r\nTraceback (most recent call last):\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1549369654.27-211111564926363/AnsiballZ_mail.py\", line 113, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1549369654.27-211111564926363/AnsiballZ_mail.py\", line 105, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1549369654.27-211111564926363/AnsiballZ_mail.py\", line 48, in invoke_module\r\n    imp.load_module('__main__', mod, module, MOD_DESC)\r\n  File \"/tmp/ansible_mail_payload_bQeVQh/__main__.py\", line 381, in <module>\r\n  File \"/tmp/ansible_mail_payload_bQeVQh/__main__.py\", line 330, in main\r\nTypeError: 'NoneType' object is not iterable\r\n", 
    "msg": "MODULE FAILURE\nSee stdo…

I have developed a seperate palybook with email configurations inorder to refer from an any playbook. So the following is the variables that I have defined in the playbook

email_host: "smtp.sendgrid.net"
email_port: 587
email_username: "username"
email_password: "password"
email_to: "[email protected]"
email_cc:
email_subject: "test"
email_body:
email_subtype: "html"
email_secure: "try"
email_from: "[email protected] ( Ansible Tower )"
email_bcc:
email_attach: 

Following is the way how i refer to the above email playbook from my other playbooks

- name: Email body on failure
  set_fact:
    email_body="Hi {{ tower_user_name }}, <br><br> Status - Failed
                                                                  <br> Issue - Build path or given build name doesn't exist
                                                                  <br> Suggested Solution - Check the validity of the build path or the build name.
                                                                  <br><br> Thank You"

- name: Sending an email
  include_role:
    name: email
    tasks_from: main.yml
  when: path_build_location.stat.exists == False

But when that section triggers and when a second play book tries to send an email. I get the above error. Variables in my ansible config file are fully commented out and all are overidden by the ansible tower variables. All the configurations are rechecked and are according to the ansible documentation. I even can sent the notifications via the ansible tower but not through the mail module in ansible. But I expected to sent the mail automatically by the ansible script. But that didn't happen..



Solution 1:[1]

Your actual error is in module_stdout TypeError: 'NoneType' object is not iterable. must be referring to a variable which is null or unknown variable type.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 KrishnaR