Thanks a bunch Jon. It helps a lot.

On Friday, 16 November 2018 03:35:26 UTC-5, J Hawkesworth wrote:
>
> Hello,
>
> Ansible will run tasks in parallel against groups of hosts, so I suggest 
> you convert your 
>
> apache_sever_list.yaml
>
> file into ansible inventory format
>
> and put all the hosts in it into a group called 'apache'
>
> then you can run tasks against
>
> - hosts: apache
>   tasks:
>       - name: any tasks here run against all the hosts in apache group 
> simultaneously
>
>
> What its nice is you can still use 'delegate_to: localhost' for your uri 
> task and it will still run the task from the ansible controller (but run it 
> in parallel for each host in your 'apache' group).
>
> Also, have a look at 'template' module I think you will find it a lot 
> easier to create the html file than the combination of shell commands and 
> lineinfile.  
>
> I don't have time to test this today but try experimenting with organising 
> things as follows:
>
> Create an inventory file for your apache hosts:
>
> # file: apache_hosts 
> # this is an ansible inventory file (using 'ini' format but can use yaml)
> # see 
> https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html 
> for more about inventory 
> [apache]
> host1 ap_port=8081
> host2 ap_port=80
> host3 ap_port=8080
> host4 ap_port=8008
> host5 ap_port=8123
>
> Create a template file like this:
>
> # ansible template file: apache.html.j2
> # see 
> https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts
> # for how to use variables in templates.
> <html>
> <body>
> <h3>List of failed Apache servers</h3>
> <table>
> <table><tr><th>Hostname</th><th>Port</th></tr>
> <%for host_result in apache_check_result %>
> <tr><td>{{ examine apache_check_result to find hostname from results }}</
> td>{{ again use apache_check_result to get at the port used | default(
> 'Failed' }}</tr>
> </table>
> </body>
> </html>
>
> Create a playbook like this:
>
> # playbook: apache_check.yml
>
> - name: report on apache status 
>   gather_facts: yes
>   hosts: apache
>   
>   tasks:
>     - name: Check the apache server status
>       uri:
>         url: "{{ ansible_hostname }}:{{ ap_port }}"
>         method: GET
>         status_code: 200
>         body_format: raw
>         follow_redirects: all
>         return_content: yes
>         validate_certs: no
>         force: yes
>       register: apache_check_result
>       ignore_errors: yes
>       delegate_to: localhost  
>       
>     - name: show results for debugging purposes
>       debug:
>          var: apache_check_result
>   
>     - name: template out the results
>       template:
>         src: apache_html.j2
>         dest: /var/apache.html
>       delegate_to: localhost
>      
>
>   and run the playbook like this
>
> ansible-playbook -i apache_hosts apache_check.yml
>
>
> Sorry I haven't got time to debug this but I hope the above will 
> illustrate that by using ansible's inventory you can get your tasks to run 
> in parallel (and also that using the 'template' module is a great way to 
> create files from ansible.
>
> Hope this helps get you on the right track.
>
> All the best,
>
> Jon
>
>
>
>
>
>
> On Thursday, November 15, 2018 at 3:40:34 PM UTC, Build Admin wrote:
>>
>> Thank you for your reply.
>> I tried using strategy as free and unable to use async in the task as 
>> task has dependency task. Could you please suggest code change or alternate 
>> method for running the task in parallel.
>>
>> ---
>> - name: Main playbook
>>   gather_facts: no
>>   hosts: 127.0.0.1
>>   strategy: free
>>
>>   tasks:
>>     - name: Create csv file and html file
>>       file:
>>         path: "{{ item }}"
>>         state: touch
>>       delegae_to: localhost
>>       become_user: awx
>>       become: no
>>       with_items:
>>         - /tmp/apache.csv
>>         - /tmp/apache.html
>>
>>     - include_vars: apache_sever_list.yaml
>>
>>     - include_tasks: apache_task.yaml
>>       with_items: '{{ apacheSevers }}'
>>
>>     - name: Run the csv2html script
>>       shell: |
>>         echo "<h3>List of failed Apache servers</h3>"
>>         echo "<table>" ;
>>         echo "<table><tr><th>Hostname</th><th>Port</th></tr>"
>>         while read INPUT; do
>>         echo "<tr><td>${INPUT//,/</td><td>}</td></tr>";
>>         done < /tmp/apache.csv
>>         echo "</table>"
>>       delegae_to: localhost
>>       become_user: awx
>>       become: no        
>>
>>     - name: append
>>       lineinfile:
>>         dest: /tmp/apache.html
>>         line: "{{ output.stdout }}"
>>         insertafter: EOF
>>       delegae_to: localhost
>>       become_user: awx
>>       become: no
>>
>>
>>
>> *apche_task.yaml*
>>
>>     - name: Check the apache server status
>>       uri:
>>         url: "{{ item.hostname }}:{{ item.port }}"
>>         method: GET
>>         status_code: 200
>>         body_format: raw
>>         follow_redirects: all
>>         return_content: yes
>>         validate_certs: no
>>         force: yes
>>       delegae_to: localhost
>>       become_user: awx
>>       become: no
>>
>>
>>     - name: append output to file
>>       lineinfile:
>>         dest: /tmp/apache.csv
>>         line: "{{ item.hostname }},{{ item.port }}"
>>         insertafter: EOF
>>       delegae_to: localhost
>>       become_user: awx
>>       become: no 
>>
>>
>>
>>
>> On Wednesday, November 14, 2018 at 9:07:18 AM UTC-5, Brian Coca wrote:
>>>
>>> I would look at the 'free' strategy, but you have others: 
>>>
>>> https://docs.ansible.com/ansible/latest/plugins/strategy.html#plugin-list 
>>>
>>>
>>>
>>>
>>> -- 
>>> ---------- 
>>> Brian Coca 
>>>
>>

-- 
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/8cbd7281-6383-4ba2-ac41-f37664aff6a2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to