Posts

From unique values of first column, get all the values of the 2nd column and print them in the same line by separating them with commas

The what: I have a file as below: $ cat sample.csv DEPT_ID,EMP_NAME 100,Keshava 100,Madhava 100,Narayana 100,Govinda 100,Vishnu 110,Madhusudana 110,Trivikrama 110,Vamana 110,Shridhara 110,Hrishikesha 110,Padmanabha 120,Damodara 120,Sankashana 120,Vasudeva 120,Pradyumna 130,Aniruddha 130,Purushottama 130,Adhokshaja 130,Narasimha 140,Achyuta 140,Janardana 140,Upendra 140,Hari 140,Krishna  The challenge is to make it look like below: $ cat sample.csv DEPT_ID: EMP_NAME (SEPARATED BY COMMA) 100: Keshava, Madhava, Narayana, Govinda, Vishnu 110: Madhusudana, Trivikrama, Vamana, Shridhara, Hrishikesha, Padmanabha 120: Damodara, Sankashana, Vasudeva, Pradyumna, Aniruddha 130: Purushottama, Adhokshaja, Narasimha 140: Achyuta, Janardana, Upendra, Hari, Krishna The How: Method 1 - Using pure shell commands tail -n +2 sample.csv | cut -d "," -f1 | sort -u | while read dept_id; do emp_names=$(grep "${dept_id}" sample.csv | cut -d "," -f2 | tr '\n' '

Read a file and extract specific lines using Native Ansible Modules

I never realised that reading a file on a remote host and extracting specific lines from that file would be such an arduous task. As part of one of my projects, I had this requirement and without using "cat" or other shell utilities, it was quite cumbersome to read and extract the information that I was looking for. Read on to find out how it can be done using Ansible native commands. Note that I have suggested only one out of a possible many methods. Feel free to explore yourself and update the comments here! REMOTE FILE CONTENTS $ cat /tmp/IP_and_hostnames.txt $ cat /tmp/IP_and_hostnames.txt 192.168.230.165:example-host-1.example.com 192.168.230.166:example-host-2.example.com 192.168.230.167:example-host-3.example.com 192.168.230.175:example-host-1-vip.example.com 192.168.230.176:example-host-2-vip.example.com 192.168.230.177:example-host-3-vip.example.com 192.168.230.185:example-host-1-priv.example.com 192.168.230.186:e

Formatting code for blogger

CODE Copy the below code snippet: ------------------------- COPY FROM BELOW ------------------------- <pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%; white-space: pre-wrap;"> <code style="color: black; overflow-wrap: normal; word-wrap: normal;"> INPUT YOUR CODE HERE (SHELL, PYTHON, JAVA etc.,) </code></pre> ------------------------- END OF COPY ------------------------- Shell Command (bash) example: $ sendEmail -t "&lt;TO_EMAIL&gt;" -f "&lt;FROM&gt;" -u "&lt;SUBJECT&gt;" [-cc "&lt;EMAIL_IN_CC&gt;" -bcc "&lt;EMAIL_IN_BCC&gt;"] -o message-content-type=html -o message-file="&lt;INPUT_FILE_NAME&gt;" -a "&lt;FILE_TO_BE_ATTACHED&gt;"

SendEmail - the best option for emails on Linux

After any automation or scripting task is complete, I am sure some of them would need to email the output or alert to your mailbox. Linux does provide a few basic tools/utilities to cater to that requirement such as mailx or sendmail. However, their capabilities are limited to sending emails in text. But the need of the hour, if I may say so, is to have formatted emails with tables, highlighting and underlining words, attachments, the whole shebang! In other words, emails should be sent in HTML format which can have all these features and much more.  Though there are methods available to send emails using sendmail or mailx (using uuencode etc.,) they are quite cumbersome and convoluted. That's where "sendemail" utility comes in. It can send html emails so easily and with attachments as well. The software is described as "a lightweight tool written in Perl for sending SMTP email from the console". Some flavours of Linux provide it as a package (like Ubuntu, Kali

Ansible - run_once, set_fact and include_tasks - The pitfalls

Image
Ansible does provide a wonderful option to execute a module or command in only one host called run_once but the results and facts are applied to all the hosts involved in the play. See definition and working :     This blog has good information on how it can be used to in various scenarios.  However, I don't want to talk about how it can be used and how its working (well, the blog calls it magic 😄) is quite useful. Rather, I want to share an interesting anomaly of run_once, when used in conjunction with either include_roles or include_tasks.   My scenario is quite simple: set_fact with run_once: My playbook: $ cat run_once_set_fact.yml --- - hosts: all gather_facts: False tasks: - name: Set fact fact1 set_fact: fact1: "DUMMY" run_once: True - debug: msg: "fact1: {{ fact1 }}" Output: PLAY [all] *******************************************************************************************