1

我想在两个系统中部署代码......

group_vars/all有不同的变量,例如。

---
# group variable for webservers
username: abc

hosts我有 Windows 组和两个机器 ips ..

[webservers]
10.0.1.2

[databases]
10.0.1.3

role/tasks/playbook我有可以在两台机器上执行的游戏...

---
- hosts: all
  roles:
    - base

当前的:

  • 它从所有文件夹中获取 var 并替换为 jinja2 模板并根据模板信息运行任务。

需要:

  • 我处于一种情况,只有一个用户变量(如用户名)对于两台机器应该是不同的.....最后我想username=abc在一台机器和username=xyz另一台机器上运行相同的剧本和相同的模板..

可能吗?

4

2 回答 2

3

除此之外group_varshost_vars您可以在其中定义每个主机的各个变量。与主机相关的所有内容都应存储在那里,并且您的用户名似乎适合那里。

对于这两个以外的主机,您可以回退到模板中定义的变量group_vars或在模板中设置默认值:

{{ username | default("AxelFoley")}}
于 2015-07-14T14:58:16.020 回答
2

可以在许多不同的地方设置不同的变量。您应该查看ansible 的变量优先级文档

连接用户名最常见的位置直接在hosts文件中。

[webservers]
10.0.1.2      ansible_ssh_user=vagrant

[databases]
10.0.1.3      ansible_ssh_user=ubuntu

如果您的username变量用于配置某些服务使用者,那么您应该将其设置为group_varsor host_vars

---
# group variable for webservers
username: abc

---
# host variables for 10.0.1.2
username: xyz

或者,如果您需要遍历您正在部署的某些应用程序,您可以在剧本级别上执行此操作:

---
- hosts: webservers
  vars:
    app1:
      username: abc
  roles:
    - { configure_application, app: app1 }

- hosts: databases
  vars:
    app2:
      username: xyz
  roles:
    - { configure_application, app: app2 }
于 2015-07-14T15:09:14.120 回答