小编Ala*_*mHo的帖子

组的第一个主机名

我不确定如何从group_names中找到第一个可识别的主机名。您能给我建议怎么做吗?

主机

[webservers]
server1
server2
server3

[webserver-el7]
server4
server5
server6
Run Code Online (Sandbox Code Playgroud)

每个主机组都有2本不同的剧本

playbook1.yml

- name: deploy app
  hosts: webservers
  serial: 8
  roles:
    - roles1
Run Code Online (Sandbox Code Playgroud)

playbook2.yml

- name: deploy app
  hosts: webservers-el7
  serial: 8
  roles:
    - roles1
Run Code Online (Sandbox Code Playgroud)

问题是我有委派任务到每个组的第一位主持人。以前我只使用过webservers组,因此使用下面的任务要容易得多

- name: syncing web files to {{ version_dir }}
  synchronize:
    src: "{{ build_dir }}"
    dest: "{{ version_dir }}"
    rsync_timeout: 60
  delegate_to: "{{ groups.webservers | first }}"
Run Code Online (Sandbox Code Playgroud)

如果我有2个不同的group_names,如何选择每个组的第一个?这样可以更动态

ansible ansible-2.x

4
推荐指数
1
解决办法
7343
查看次数

Ansible 委托和 run_once

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

group_vars/dbserver

[dbserver]
vagrant1 # master db
vagrant2 # slave db
Run Code Online (Sandbox Code Playgroud)

之后,如果我需要删除数据库并再次创建数据库,基本上我只需要在组中的第一台服务器上运行该命令。

- 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
Run Code Online (Sandbox Code Playgroud)

这是我运行剧本时的日志

TASK [laravel : drop database] *************************************************
changed: [vagrant1 -> vagrant1] => (item=vagrant1)
changed: [vagrant1 -> …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-2.x

1
推荐指数
1
解决办法
8486
查看次数

Ansible jinja - 如果循环最后没有换行符

我在使用 ansible jinja 模板时遇到了问题。基本上我只需要列出 server_name 是更具可读性的格式。

这是我在 groups/all.yml 中定义的变量

server_name:
  - domain1.mydomain.com
  - domain2.mydomain.com
  - domain3.mydomain.com
  - domain4.mydomain.com
Run Code Online (Sandbox Code Playgroud)

这是我的 myvhost.conf.j2 模板

server_name     {% for name in server_name -%}
                  {{ name }}
                {% if loop.last -%};{%- endif -%}{% endfor %}
Run Code Online (Sandbox Code Playgroud)

结果是:

server_name     domain1.mydomain.com
                domain2.mydomain.com
                domain3.mydomain.com
                domain4.mydomain.com
                ;
Run Code Online (Sandbox Code Playgroud)

预期输出:

server_name     domain1.mydomain.com
                domain2.mydomain.com
                domain3.mydomain.com
                domain4.mydomain.com;
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种带有空格控制或缩进的模板组合,但它弄乱了结果。请亲切指教

jinja2 ansible ansible-2.x

0
推荐指数
1
解决办法
4035
查看次数

标签 统计

ansible ×3

ansible-2.x ×3

jinja2 ×1