Hi Hissy,

As I said earlier I am extracting those hostname to an excel macro file
which is done by python program and send that file to a different team. But
I will consider your mail module inside the ansible now.

Regards

On Sat, Jul 29, 2023 at 0:25, Evan Hisey <ehi...@gmail.com> wrote:

> 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 <pradyumna....@gmail.com> 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 <ehi...@gmail.com> 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 <john.sm...@example.com>
>>>   from: i...@domain.com
>>>   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 <pradyumna....@gmail.com> 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:
>>>> i...@domain.com. 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"] = "validation_res...@domain.com"
>>>>         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 <uto...@gmail.com> 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 ansible-project+unsubscr...@googlegroups.com.
>>>>> 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 ansible-project+unsubscr...@googlegroups.com.
>>>>
>>> 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 ansible-project+unsubscr...@googlegroups.com.
>>> 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 ansible-project+unsubscr...@googlegroups.com.
>>
> 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 ansible-project+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/CAEcFzYyPdQQEhraYhKwE1an%2B7hsToCHbCQHhJBbgz%2BCKJ5upNA%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAEcFzYyPdQQEhraYhKwE1an%2B7hsToCHbCQHhJBbgz%2BCKJ5upNA%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 ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAEuB3AqnnZNbvsFf2j05QwYtb6w%3DFHo1HZ9AcT1Hh%2B-22ctcpQ%40mail.gmail.com.

Reply via email to