Here is my playbook, i would like to display all lines in stdout_lines in
below format without miss. I am able to display only first 3 lines but
host03 has more than 3 lines even it may be more lines for other hosts.
Would anyone please help me?
Required output fle:
==================
host1,nfsflr01:/app01,/app,na,/etc/fstab
host2,nfsflr02:/app02,/app02,na,/etc/fstab
host3,nfsflr03:/app03,/app03,na,/etc/fstab
host3,nfsflr03:/app03,/app03,na,/etc/rc.willows
host4,nfsflr04:/app04,na,na,na
---
- name: nullify the ansible log file
local_action: copy content="" dest="{{ playbook_dir
}}/logs/volmigration.log"
ignore_errors: true
run_once: True
- name: nullify the file content
local_action: copy content="" dest="{{ playbook_dir
}}/logs/volcheck.txt"
ignore_errors: true
run_once: True
- name: Making the txt header information to volcheck.txt file
local_action:
module: lineinfile
path: "{{ playbook_dir }}/logs/volcheck.txt"
line: "host,python,old_path,mnt_path,new_path,map_path,csv_path"
state: present
create: yes
run_once: True
- name: Fetch the volume mounted status
shell: |-
{% if ansible_os_family == "Solaris" %}
grep -ws "{{ item.0 }}" /etc/vfstab|awk '{print $1}'
grep -ws "{{ item.0 }}" /etc/vfstab|awk '{print $3}'
grep -wls "{{ item.0 }}" /etc/vfstab
grep -wls "{{ item.0 }}" /etc/auto*|head -1|xargs grep -w "{{ item.0
}}"|awk '{print $2}'
grep -wls "{{ item.0 }}" /etc/auto*|head -1|xargs grep -w "{{ item.0
}}"|awk '{print $1}'
grep -wls "{{ item.0 }}" /etc/auto*|head -1
{%- else %}
grep -rws "{{ item.0 }}" /etc/fstab|awk '{print $1}'
grep -rws "{{ item.0 }}" /etc/fstab|awk '{print $2}'
grep -wls "{{ item.0 }}" /etc/fstab
grep -rls "{{ item.0 }}" /etc/auto*|head -1|xargs grep -w "{{ item.0
}}"|awk '{print $3}'
grep -rls "{{ item.0 }}" /etc/auto*|head -1|xargs grep -w "{{ item.0
}}"|awk '{print $1}'
grep -rwls "{{ item.0 }}" /etc/auto*|head -1
grep -rwls "{{ item.0 }}" /etc/rc*|head -1|xargs grep -w "{{ item.0
}}"|awk '{print $6}'
grep -rwls "{{ item.0 }}" /etc/rc*|head -1|xargs grep -w "{{ item.0
}}"|awk '{print $7}'
grep -rwls "{{ item.0 }}" /etc/rc*|head -1
{%- endif %}
with_together:
- "{{ var1 }}"
register: volchk
args:
warn: false
ignore_errors: true
- name: Making the final volcheck.txt file
local_action:
module: lineinfile
path: "{{ playbook_dir }}/logs/volcheck.txt"
line: |-
{% if item.stdout|length>0 %}
{{ inventory_hostname }},{{ ansible_python_interpreter }},{{
item.stdout_lines[0] }},{{ item.stdout_lines[1] }},NA,{{
item.stdout_lines[2] }},{{ item.item.0 }},
{%- else %}
{{ inventory_hostname }},{{ ansible_python_interpreter
}},NA,NA,NA,NA,{{ item.item.0 }},
{%- endif %}
insertafter: EOF
state: present
create: yes
with_items: "{{ volchk.results }}"
- name: mark the entry of /etc/fstab and /etc/vfstab as fstab
replace:
path: "{{ playbook_dir }}/logs/volcheck.txt"
regexp: "{{ item.stdout_lines[2] }}"
replace: "fstab"
when: item.stdout|length>0 and (item.stdout_lines[2] |
regex_search("/etc/fstab") or item.stdout_lines[2] |
regex_search("/etc/vfstab"))
with_items: "{{ volchk.results }}"
delegate_to: localhost
- debug:
msg: "Final volume check file is located at {{ playbook_dir
}}/logs/volcheck.txt"
delegate_to: localhost
run_once: true
- name: Send the final report email
local_action:
module: mail
host: host10.google.com
port: 25
to: [email protected]
subject: Ansible volume pre-check report
attach: "{{ playbook_dir }}/logs/volcheck.txt"
run_once: true
...
Debug:
Debug "volchk.result" output:
===============
host1:
"stdout": "nfsflr01:/app01\n/app\n/etc/fstab",
"stdout_lines": [
"nfsflr01:/app01",
"/app",
"/etc/fstab"
host2:
"stdout": "nfsflr02:/app02\n/app02\n/etc/fstab",
"stdout_lines": [
"nfsflr02:/app02",
"/app02",
"/etc/fstab"
host3:
"stdout":
"nfsflr03:/app03\n/app03\n/etc/fstab\nnfsflr03:/app03\n/app03\n/etc/rc.willows",
"stdout_lines": [
"nfsflr03:/app03",
"/app03",
"/etc/fstab",
"nfsflr03:/app03",
"/app03",
"/etc/rc.willows"
On Mon, May 4, 2020 at 2:57 PM Suresh Karpurapu <[email protected]>
wrote:
> Hi Sai Stian,
>
> This syntax would be helpful but i may be using in wrong way as i am
> getting below errors. Please help on fixing the issue.
>
> - name: debug with with sequence
> debug:
> msg:"{{ volchk[item.stdout | int] }},{{ volchk[item.stdout | int +
> 1] }},{{ volchk[item.stdout | int + 2] }}"
> with_sequence: start=0 end={{ (volchk | length)-1 }} stride=3
> *error:*
> FAILED! => {"msg": "The task includes an option with an undefined
> variable. The error was: 'ansible.utils.unsafe_proxy.AnsibleUnsafeBytes
> object' has no attribute 'stdout'\n\nThe error appears to be in
> '/suresh/suresh_playbooks/nfsvolmigration/roles/mountcheck/tasks/volcheck.yml':
> line 44, column 5, but may\nbe elsewhere in the file depending on the exact
> syntax problem.\n\nThe offending line appears to be:\n\n ignore_errors:
> true\n - name: debug with with sequence\n ^ here\n"}
>
> Debug "volchk.result" output:
> ===============
> host1:
> "stdout": "nfsflr01:/app01\n/app\n/etc/fstab",
> "stdout_lines": [
> "nfsflr01:/app01",
> "/app",
> "/etc/fstab"
>
> host2:
> "stdout": "nfsflr02:/app02\n/app02\n/etc/fstab",
> "stdout_lines": [
> "nfsflr02:/app02",
> "/app02",
> "/etc/fstab"
> host3:
> "stdout":
> "nfsflr03:/app03\n/app03\n/etc/fstab\nnfsflr03:/app03\n/app03\n/etc/rc.willows",
> "stdout_lines": [
> "nfsflr03:/app03",
> "/app03",
> "/etc/fstab",
> "nfsflr03:/app03",
> "/app03",
> "/etc/rc.willows"
>
> Regards,
> Suresh
>
>
>
> FAILED! => {"msg": "'dict object' has no attribute 'stdout'"}
>
> On Sat, May 2, 2020 at 2:32 PM Kai Stian Olstad <
> [email protected]> wrote:
>
>> On Wed, Apr 29, 2020 at 03:44:14PM -0700, Suresh Karpurapu wrote:
>> > Would anyone please help me formatting mountchk.result. I am able to
>> get
>> > the required output with
>> > item.stdout_lines[0],item.stdout_lines[1],item.stdout_lines[2] but
>> host3
>> > has 6 entries. So, please help me in filtering
>>
>> You can use with_sequence or range in a for loop.
>>
>> vars:
>> myvar:
>> - one
>> - two
>> - three
>> - four
>> - five
>> - six
>> tasks:
>> - debug: msg="{{ myvar[item | int] }},{{ myvar[item | int + 1] }},{{
>> myvar[item | int + 2] }}"
>> with_sequence: start=0 end={{ (myvar | length) - 1 }} stride=3
>>
>> - debug:
>> msg: |
>> {% for i in range(0, myvar | length, 3) %}
>> {{ myvar[i] }},{{ myvar[i + 1] }},{{ myvar[i + 2] }}
>> {% endfor %}
>>
>> --
>> Kai Stian Olstad
>>
>> --
>> 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/20200502090224.zygkso3iqpjok2bk%40olstad.com
>> .
>>
>
--
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/CAHedzhKd%2B_0CADwMdR4s%3DLU%2BckZRUngAjzExSMb58VK7QR4y6A%40mail.gmail.com.