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 <[email protected]> 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 <[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 > <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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAEuB3AqnnZNbvsFf2j05QwYtb6w%3DFHo1HZ9AcT1Hh%2B-22ctcpQ%40mail.gmail.com.
