Hello,

Not sure if this still interest everyone, but the way I found to make is 
work is just like Michael explained. This is an example for future 
reference:

---
# This playbook upgrades a the social cluster to DSE 4.0.4


# Apply common configuration to all hosts
- hosts: all
  gather_facts: no
  tasks:
   - include: maintest.yaml

- include: restart.yaml okay_to_run={{ out.rc }}


- name: group my play
 group_by: key=my_ad_hoc_on_the_fly_group

- name: main task1
  command: "echo main.yaml task 1"

- name: main task2
  command: "echo main.yaml task 2"

# say this is the tasks that is supposed to "notify" restart 
- name: main task1
  command: "echo main.yaml task 3"
  register: out

---
- hosts: my_ad_hoc_on_the_fly_group
  serial: 1
  tasks: 
    - name: restart host
      command: "echo I would restart 1"
      when: ok_to_run.rc == 0

That did the trick for me. Hope that helps. Not the most elegant solution, 
but it might help. 


On Monday, February 17, 2014 at 4:09:19 AM UTC-8, Vidar Langseid wrote:
>
> Hi
>
> In playbook for web servers, I need set firewall rules so that database 
> accepts connections:
> - name: FW rule - accept input 3306 from web server to DB server
>   lineinfile: dest=/etc/sysconfig/iptables
>               regexp="^-A INPUT -p tcp -m state --state NEW -m tcp -s {{ 
> ansible_eth0["ipv4"]["address"] }} --dport 3306 -j ACCEPT$"
>               line="-A INPUT -p tcp -m state --state NEW -m tcp -s {{ 
> ansible_eth0["ipv4"]["address"] }} --dport 3306 -j ACCEPT"
>               state=present
>               insertbefore="^-A INPUT -j REJECT --reject-with 
> icmp-host-prohibited.*$"
>   delegate_to: "{{ groups.dbservers.0 }}"
>   notify:
>     - Restart iptables on DB server
>   tags: fwrules  
>
>
> However, since I have multiple web servers, the liniinfile action will be 
> run in parallel on the db server, causing an unpredictable result ( trying 
> to change the file from multiple processes at the same time )...
> Any thoughts about adding support for "Serial:1" in task context?
> I found this thread on the topic : 
> https://groups.google.com/forum/#!topic/ansible-project/CNxrMIyKx58
> but no solution yet...
>
>
> In one attempt to work around this problem, I have tried to set the FW 
> rules in the playbook for Database server instead, by looping over 
> groups['webservers']...
> However, I still need the IP of each web server and that is problematic. 
> It should  be possible to get the IPs using magic variable :
>
> {{ hostvars['test.example.com']['ansible_distribution'] }}
>
> Since I am looping over groups['webservers'], I have the name of the web 
> server in {{ item }}. How to I inject that variable name in the expression?
> The following do not work ( substituting lineinfile with shell to 
> illustrating the variable problem ) :
> - name: FW rule - accept input 3306 from web server to DB server
>   shell: /bin/true {{ hostvars.item.ansible_eth0["ipv4"]["address"] }} {{ 
> hostvars.[{{ 'item' }}].ansible_eth0["ipv4"]["address"] }}
>   with_items:  groups['webservers']
>   notify:
>     - Restart iptables on DB server
>   tags: fwrules  
>
>
> Btw, when using Rolles ( http://docs.ansible.com/playbooks_roles.html#roles 
> ), in which file may I specify Serial ?
> Neither in tasks/main.yml, handlers/main.yml or vars/main.yml seems to 
> work....
>
> Best regards,
> Vidar
>
>

-- 
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 ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/66fdfe0c-68f3-4b2f-92d0-97de5de10f36%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to