将字典集成到所有任务并在Ansible中循环浏览

时间:2019-09-19 13:48:36

标签: ansible

嘿,Ansible还是很新。

我制作了一个剧本(测试),该剧本将对使用HAproxy作为lb的Mariadb galera-cluster执行滚动更新。

我不知道如何将字典(代码的底部)用于剧本中的所有任务。同样,它也必须像第一个服务器1,然后的服务器3,然后是服务器2,然后是服务器4那样循环。想法是,如果主机或ip发生了更改,则只需要在字典中进行更改即可。

例如task1需要使用host1的key.value与task2相同,并且完成循环到下一个主机时也要使用

我尝试使用vars模块,但仅能完成任务 具体。在考虑使用Vars文件夹,但我没有使用角色体系结构。

- hosts: DBserver
  become: yes
  tasks:
  - name: disable the haproxy server
    replace:
      path: /etc/haproxy/haproxy.cfg
      regexp: "{{ item }}"
      replace: 'server "{{}}" "{{}}"  check weight 0'
    with_items:
    - 'server "{{}}" "{{}}"  check weight 1' 

- hosts: "{{}}"
  become: yes
  tasks:
  - name: stop the mariadb
    service:
      name: mariadb
      state: stopped

- hosts: DBserver
  become: yes
  tasks:
  replace:
    path: /etc/haproxy/haproxy.cfg
    regexp: "{{ item }}"
    replace: 'server "{{}}}" "{{}}"  check weight 1'
  with_items:
  - 'server "{{}}" "{{}}"  check weight 0' 


dictionary:
{ 'name': 'host1', 'key': 'ipxxx' }, { 'name': 'host2', 'key': 'ipxxxx' }, { 'name': 'host3', 'key': 'ipxxx' }, { 'name': 'host4', 'key': 'ipxxx' }

1 个答案:

答案 0 :(得分:0)

我通过这出戏解决了我的问题。

---
- hosts: clients
  become: yes
  serial: 1
  tasks:

  - name: disable the haproxy server
    replace:
      path: /etc/haproxy/haproxy.cfg
      regexp: "{{ item }}"
      replace: 'server {{ name }} {{ ip }}  check weight 0'
    with_items:
    - 'server {{ name }} {{ ip }}  check weight 1'

    delegate_to: deploy

  - name: stop the mariadb
    service:
      name: mariadb
      state: stopped

  - name: update mariadb
    apt:
      name: "{{ packages }}"
      state: latest
      update_cache: yes
    vars:
       packages:
       - mariadb-server
       - mariadb-client
       - mariadb-common

  - name: start the mariadb
    service:
      name: mariadb
      state: started

  - name: status mariadb
    shell: systemctl status mariadb
    register: server_status
  - name: debug
    debug:
       msg: "{{ server_status['stdout_lines'] }}"


  - name: enable proxy
    replace:
      path: /etc/haproxy/haproxy.cfg
      regexp: "{{ item }}"
      replace: 'server {{ name }} {{ ip }}  check weight 1'
    with_items:
    - 'server {{ name }} {{ ip }}  check weight 0'

    delegate_to: deploy

我使用了host_vars,并与委托_to结合使用了。