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.
