首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多环境部署

多环境部署
EN

Stack Overflow用户
提问于 2017-12-13 03:57:03
回答 1查看 2K关注 0票数 2

我知道您可以使用-i标志在不同的清单文件之间切换,该标志可用于在不同的主机之间切换。

在我的示例中,要在不同部署之间执行操作的主机,因此我将主机作为--extra-vars,并使用delegate_to将其部署到该主机(有关更多详细信息,请参见下面的内容)。

我希望有一种方法能够以类似的方式在包含环境变量的文件之间切换。例如,假设我有以下简化的目录结构:

代码语言:javascript
运行
复制
/etc/ansible/
├── ansible.cfg
├── hosts
└── project/
    └── environments/
        ├── dev/
        │   └── vars.yml
        └── prd/
            └── vars.yml

两个环境中的vars.yml的结构是完全相同的,只是由于环境之间的差异,变量具有不同的值。

我找到了一些谈论类似的事情的地方,比如:

https://rock-it.pl/managing-multiple-environments-with-ansible-best-practices/

http://rosstuck.com/multistage-environments-with-ansible

http://www.geedew.com/setting-up-ansible-for-multiple-environment-deployments/

在这些指南中,它们针对静态声明的主机执行操作。有一件事似乎对我有帮助,那就是称为group_vars的目录。看起来清单指向具有相同名称的配置,并假设当play的hosts:指令包含清单头部中指定的主机时,会使用这些变量。

但是,由于我通过CLI标志--extra-vars动态读取了我们正在操作的服务器,所以我不能采用这种方法,因为我在我的剧本中总是会有这样的东西:

代码语言:javascript
运行
复制
...
hosts: localhost
tasks:
    ...
    - name: do something
    ...
    delegate_to: {{ item }}
    with_items: {{ given_hosts }}

或者我首先运行一个任务,获取服务器并将其添加到新主机,如下所示:

代码语言:javascript
运行
复制
- name: Extract Hosts
  hosts: localhost
  tasks:

    - name: Adding given hosts to new group...
      add_host:
        name: "{{ item }}"
        groups: some_group
      with_items:
        - "{{ list_of_hosts | default([]) }}"

然后使用动态创建的组:

代码语言:javascript
运行
复制
- name: Restart Tomcat for Changes to Take Effect
  hosts: some_group
  tasks:

    - name: Restarting Tomcat...
      service:
        name: tomcat
        state: restarted

因此,我需要找到一种方法来指定要使用的vars.yml。因为我使用Jenkins通过CLI over SSH启动Ansible攻略,所以我希望如下所示:

ansible-playbook /path/to/some/playbook.yml --include-vars /etc/ansible/project/dev/vars.yml

至少,我该如何在剧本中显式地包含一个vars.yml文件,以使用其中定义的变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-13 14:14:53

您可以使用:

使用@extra vars--extra-vars @/etc/ansible/project/dev/vars.yml

include_vars

代码语言:javascript
运行
复制
- include_vars: "/etc/ansible/project/{{ some_env }}/vars.yml"

根据您的环境加载不同的变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47780583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档