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.

Reply via email to