Ansible 可接受委托并运行一次

Ansible 可接受委托并运行一次,ansible,ansible-playbook,ansible-2.x,Ansible,Ansible Playbook,Ansible 2.x,我为本地和开发环境编写了一个特定的角色,它将从dbserver组中的第一台服务器删除并重新创建数据库,dbserver组主要用作主数据库 group_vars/dbserver [dbserver] vagrant1 # master db vagrant2 # slave db 之后,如果我需要删除数据库并再次创建数据库,基本上我只需要在组中的第一台服务器上运行该命令 - name: drop database mysql_db: name={{ targetdbname }} sta

我为本地和开发环境编写了一个特定的角色,它将从dbserver组中的第一台服务器删除并重新创建数据库,dbserver组主要用作主数据库

group_vars/dbserver

[dbserver]
vagrant1 # master db
vagrant2 # slave db
之后,如果我需要删除数据库并再次创建数据库,基本上我只需要在组中的第一台服务器上运行该命令

- name: drop database
  mysql_db: name={{ targetdbname }} state=absent
  when: targetdeploydb == "new"
  delegate_to: "{{ item }}"
  with_items: "{{ groups.dbserver }}"
  run_once: true

- name: create database
  mysql_db: name={{ targetdbname }} state=present
  when: targetdeploydb == "new"
  delegate_to: "{{ item }}"
  with_items: "{{ groups.dbserver }}"
  when: targetdeploydb == "new"
  run_once: true
这是我运行剧本时的日志

TASK [laravel : drop database] *************************************************
changed: [vagrant1 -> vagrant1] => (item=vagrant1)
changed: [vagrant1 -> vagrant2] => (item=vagrant2)

TASK [laravel : create database] ***********************************************
changed: [vagrant1 -> vagrant1] => (item=vagrant1)
changed: [vagrant1 -> vagrant2] => (item=vagrant2)

我可以想到的另一种方法是直接在delegate_上使用master db hostname,但这意味着我需要创建另一个变量。另一方面,我认为最好减少变量的数量,使其更具动态性。请告知

如果您只需要将任务委派给第一台服务器,并且无论当前播放中有多少台服务器,都要运行一次,请使用:

- name: drop database
  mysql_db: name={{ targetdbname }} state=absent
  when: targetdeploydb == "new"
  delegate_to: "{{ groups['dbserver'] | first }}"
  run_once: true

如果您只需要将任务委派给第一台服务器,并且无论当前播放中有多少台服务器都要运行一次,请使用:

- name: drop database
  mysql_db: name={{ targetdbname }} state=absent
  when: targetdeploydb == "new"
  delegate_to: "{{ groups['dbserver'] | first }}"
  run_once: true

完美的它现在可以正常工作,并且只在1台服务器上运行。不管怎样,你知道我在哪里可以阅读更多关于ansible变量高级用法的文档吗?对于何时使用方括号或曲括号,我并不十分熟悉,甚至对于如何使用上面给出的管道来获得数组中的第一个结果,我也不太熟悉。还是基于python?您所需要的一切都是:。花括号和管道来自Jinja2,方括号来自Python。嗨,我想用同样的方法,但不是在第一台服务器上执行,而是在组中的所有服务器上执行。你能帮我吗!它现在可以正常工作,并且只在1台服务器上运行。不管怎样,你知道我在哪里可以阅读更多关于ansible变量高级用法的文档吗?对于何时使用方括号或曲括号,我并不十分熟悉,甚至对于如何使用上面给出的管道来获得数组中的第一个结果,我也不太熟悉。还是基于python?您所需要的一切都是:。花括号和管道来自Jinja2,方括号来自Python。嗨,我想用同样的方法,但不是在第一台服务器上执行,而是在组中的所有服务器上执行。你能帮我吗