You could reuse the module with some thing like:
name: send email
          command: python3 /path/to/process_hostnames.py '{{ arg }}'
          delegate_to: localhost
          register: out
          vars:
            arg: "{{ ansible_play_hosts_all | join(' ') }}"

On Fri, Jul 28, 2023 at 10:21 AM Prady A <[email protected]> wrote:

> Thank you both of you and code .
> I ll try to simplify it. since the module is already we are using in
> different program, i reused it.
>
>
> Regards
> Prady
>
> On Sat, Jul 29, 2023 at 0:18, Evan Hisey <[email protected]> wrote:
>
>> This seems massively complicated for a simple shell command to send an
>> email. ON top of that you are attempting to break the
>> anisble.builtin.script module by forcing it to run on the localhost
>> (controller) rather than the target.  Better option would be to just use
>> the either the command module and mailx or the
>> community.general.mail.module, both options will run fine with the
>> "delegate_to: localhost" and require much less coding to make work.
>>
>> A rough example base on the visible code:
>> name: mail host list
>> community.general.mail:
>>   host: mail.server.com
>>   port: 25
>>   to: John Smith <[email protected]>
>>   from: [email protected]
>>   subject: Ansible-report
>>   body: List of hosts {{ ansible_hostname }}
>> delegate to local hostocalhost
>> register: out
>> vars:
>>     arg: "{{ ansible_play_hosts_all |
>> join(' ') }}"
>>
>>
>>
>>
>>
>> On Fri, Jul 28, 2023 at 9:46 AM Prady A <[email protected]> wrote:
>>
>>> Hi Todd,
>>>
>>> Thank you so much as always.
>>> Actually to run the ansible we switch from normal user to root user and
>>> run the ansible.
>>> In my case when I m running "who am i"  from Putty it is working but
>>> when I am executing it from visual studio code using remote ssh login
>>> plugin there it is not working.
>>> Basically I want to send the mail from the user who logged in ex:
>>> [email protected]. Even though we logged in as root when we give "who am i"
>>> it returns the logged in user even though you su to another user. I will
>>> try to use your code. Incase still my approach is bad please let me know.
>>>
>>> Ex:
>>>
>>> ubuntu /home/gara% who am i
>>> gara     pts/0        2008-06-20 11:36 (192.168.0.1)
>>> ubuntu /home/gara% whoami
>>> gara
>>> ubuntu /home/gara% su -
>>> Password:
>>> root@ubuntu:~# who am i
>>> gara     pts/0        Jun 20 11:36 (192.168.0.1)
>>> root@ubuntu:~# whoami
>>> root
>>> root@ubuntu:~#
>>>
>>> Regarding the mailing function I am using the below. But it takes 10 min
>>> to send the mail.
>>>
>>> class Send_Mail:
>>>     def __init__(self, to_addrs, workbook_path):
>>>         self.to_addrs = to_addrs
>>>         self.workbook_path = workbook_path
>>>         d = self.workbook_path.rsplit("/", 3)
>>>         self.workbook_filename = d[3]
>>>
>>>     def send_mail(self):
>>>         import smtplib
>>>         from email.mime.text import MIMEText
>>>         from email import encoders
>>>         from email.mime.base import MIMEBase
>>>         from email.mime.multipart import MIMEMultipart
>>>
>>>         msg = MIMEMultipart()
>>>         msg['Subject'] = "Validation Result"
>>>         msg["From"] = "[email protected]"
>>>         msg["To"] = self.to_addrs
>>>         msg.preamble = 'excel test'
>>>
>>>         try:
>>>             file = open(self.workbook_path, 'rb')
>>>             attachment = MIMEBase('application', 'vnd.ms-excel')
>>>             attachment.set_payload(file.read())
>>>             file.close()
>>>             encoders.encode_base64(attachment)
>>>             attachment.add_header("Content-Disposition", 'attachment',
>>> filename=self.workbook_filename)
>>>             msg.attach(MIMEText('Attached is your validation
>>> result.\n\n\n', 'plain'))
>>>             msg.attach(attachment)
>>>
>>>             smtp = smtplib.SMTP('localhost')
>>>             smtp.send_message(msg)
>>>             smtp.close()
>>>         except IOError as e:
>>>             print('IOE Exception!!\n{0}'.format(e))
>>>         except:
>>>             raise RuntimeError("Sorry,email could not be sent
>>> successfully."
>>>                                "Please scp the validation result
>>> yourself, "
>>>                                "there might be something wrong with the
>>> email address or something\n ")
>>>         else:
>>>             print('Validation result is now being sent as an Excel file
>>> to {0}.'.format(self.to_addrs))
>>>         finally:
>>>             smtp.close()
>>>             file.close()
>>> ----
>>>         sendmail = Send_Mail(to_addrs, workbook_path)
>>>         sendmail.send_mail()
>>>
>>>
>>> ------
>>> Kind regards
>>>
>>> On Fri, Jul 28, 2023 at 21:43, Todd Lewis <[email protected]> wrote:
>>>
>>>> On my controller, `who am i` produces no output. In your python script
>>>> running on my system, because there is no output, `output[0]`
>>>> correctly produces the "IndexError: list index out of range" message.
>>>>
>>>> Having your python script go to all that trouble to run an external
>>>> program to get the user name seems a bit much. I'd suggest doing this
>>>> instead:
>>>>
>>>> import os
>>>> import pwd
>>>> userid = pwd.getpwuid(os.getuid())[0]
>>>>
>>>> Then there's the question of whether you want to roll your own email
>>>> sending program rather than using the `
>>>> community.general.notification.mail` module. There may be good reasons
>>>> either way.
>>>>
>>>> Good luck,
>>>> --
>>>> Todd
>>>>
>>>>
>>>> On 7/28/23 2:12 AM, Prady A wrote:
>>>>
>>>> Hi Experts,
>>>>
>>>> Need your suggestion pls.
>>>>
>>>> The below one is ansible file which calls an python file in the control
>>>> node(localhost) and process an excel file which is also present in control
>>>> node based on hostnames. There is no issue in processing the excel and now
>>>> I am facing challenges while sending the file in mail.I am trying to
>>>> extract the current logged in user in control node and send mail to that
>>>> logged in user. But both my below command incoporated in python script are
>>>> not working.
>>>>  #cmd = 'echo $USER
>>>>  #cmd = 'who am i | cut -d" " -f 1'
>>>> output, errors, return_code = serverside_execute_command(cmd)
>>>>
>>>> it seems my *serverside_execute_command(cmd):*
>>>> I executed the python program standalone it is working as expected in
>>>> the control node.But when it is called from Ansible code it is throwing the
>>>> below error. Any insight would be greatly helpful.
>>>>
>>>> *Error:*
>>>> fatal: [jp1ld100 -> localhost]: FAILED! => {"changed": true, "msg":
>>>> "non-zero return code", "rc": 1, "stderr": "Traceback (most recent call
>>>> last):\n  File
>>>> \"/root/.ansible/tmp/ansible-tmp-1690520194.14-32141-129555701534658/process_hostnames_v3.py\",
>>>> line 213, in <module>\n    mail(filename)\n  File
>>>> \"/root/.ansible/tmp/ansible-tmp-1690520194.14-32141-129555701534658/process_hostnames_v3.py\",
>>>> line 168, in mail\n    if not re.match('x', output[0]):\nIndexError: list
>>>> index out of range\n", "stderr_lines": ["Traceback (most recent call
>>>> last):", "  File
>>>> \"/root/.ansible/tmp/ansible-tmp-1690520194.14-32141-129555701534658/process_hostnames_v3.py\",
>>>> line 213, in <module>", "    mail(dest_filename)", "  File
>>>> \"/root/.ansible/tmp/ansible-tmp-1690520194.14-32141-129555701534658/process_hostnames_v3.py\",
>>>> line 168, in mail", "    if not re.match('x', output[0]):", "IndexError:
>>>> list index out of range"], "stdout": "Test.xltm\nFile [Test.xltm] has been
>>>> updated and sent to mail\nDEBUG  cmd: who am i | cut -d\" \" -f 1\nDEBUG
>>>> return_code: 0\n", "stdout_lines": ["Test.xltm", "File [Test.xltm] has been
>>>> updated and sent to mail", "DEBUG  cmd: who am i | cut -d\" \" -f 1",
>>>> "DEBUG   return_code: 0"]}
>>>>
>>>>
>>>> *Process.yml:*
>>>> name: Collect host
>>>>   hosts: all
>>>>   tasks:
>>>>     - block:
>>>>         - name: python
>>>>           script: "process_hostnames.py '{{ arg }}'"
>>>>           args:
>>>>             executable: python3
>>>>           delegate_to: localhost
>>>>           register: out
>>>>           vars:
>>>>             arg: "{{ ansible_play_hosts_all | join(' ') }}"
>>>>         - debug:
>>>>             var: out.stdout_lines
>>>>       run_once: true
>>>>
>>>>
>>>> *process_hostnames.py*
>>>>
>>>> def *serverside_execute_command(cmd):*
>>>>     import subprocess
>>>>     try:
>>>>         result = subprocess.run(cmd, stdout=subprocess.PIPE,
>>>> stderr=subprocess.PIPE,
>>>>                                 check=True, shell=True,
>>>> universal_newlines=True)
>>>>     except subprocess.CalledProcessError:
>>>>         print('{0}'.format(result.stdout))
>>>>         sys.exit(1)
>>>>
>>>>     output = []
>>>>     errors = []
>>>>     stdout = result.stdout.splitlines()
>>>>     try:
>>>>         for line in stdout:
>>>>             if line.strip() == "":
>>>>                pass
>>>>             else:
>>>>                 output.append(line.strip())
>>>>     except UnicodeDecodeError:
>>>>         output = [ "OUTPUT UNREADABLE" ]
>>>>     try:
>>>>         errors.append(result.stderr.strip())
>>>>     except UnicodeDecodeError:
>>>>         errors = [" ERRORS UNREADABLE" ]
>>>>     return_code = result.returncode
>>>>
>>>>     print("DEBUG  cmd: {0}".format(cmd))
>>>>     print("DEBUG   return_code: {0}".format(str(return_code)))
>>>>
>>>>     return (output, errors, return_code)
>>>>
>>>> def mail(dest_filename):
>>>>     #cmd = 'echo $USER'
>>>>     cmd = 'who am i | cut -d" " -f 1'
>>>>     output, errors, return_code = *serverside_execute_command(cmd)*
>>>>     if not re.match('x', output[0]):
>>>>        raise RuntimeError("You are {0}.Please login as xID. Then try
>>>> again.".format(result.stdout))
>>>>        sys.exit(1)
>>>>     xid = output[0].rstrip('\n')
>>>>
>>>>
>>>> if __name__ == "__main__":
>>>> file_name= "Template.xltm"
>>>> mail(file_name)
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Ansible Project" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/ansible-project/d3d38e2c-9984-89df-eb86-e3795162c9d6%40gmail.com
>>>> <https://groups.google.com/d/msgid/ansible-project/d3d38e2c-9984-89df-eb86-e3795162c9d6%40gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ansible Project" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/CAEuB3Ap0_idXR%2B5H-U3J%2B1apfcX%3DPu4x6SvPUo5b8UUQ6qO%3Dkw%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/ansible-project/CAEuB3Ap0_idXR%2B5H-U3J%2B1apfcX%3DPu4x6SvPUo5b8UUQ6qO%3Dkw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/CAEcFzYwb%2B8DSL5P4nf2iVNu0vLJtGwg%3Dfo%2BFFCqgAB4udqjZPg%40mail.gmail.com
>> <https://groups.google.com/d/msgid/ansible-project/CAEcFzYwb%2B8DSL5P4nf2iVNu0vLJtGwg%3Dfo%2BFFCqgAB4udqjZPg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CAEuB3Aqn%2BWKXT82y7t%3DEJ63JOwC2VY3x7tBT2F9vNkh2Z2jGpg%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAEuB3Aqn%2BWKXT82y7t%3DEJ63JOwC2VY3x7tBT2F9vNkh2Z2jGpg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAEcFzYyPdQQEhraYhKwE1an%2B7hsToCHbCQHhJBbgz%2BCKJ5upNA%40mail.gmail.com.

Reply via email to