【问题标题】:Ansible: Configure global variable which "environments" to set upAnsible:配置要设置的“环境”的全局变量
【发布时间】:2021-12-27 16:39:00
【问题描述】:

我希望能够通过不同的“环境”(相同变量集)进行设置,例如生产、测试​​、登台等。

我想:

  1. 定义在全球某个地方设置哪些环境 (setup_environments)
  2. setup_environments 中的每个环境运行一次角色 r1
  3. 在不设置环境的情况下运行角色 r2,但 r2 应该能够访问变量 setup_environments 并且能够为某些任务加载定义的环境。

这可能吗? 3. 应该可以使用include_vars,但我提到它是为了表明我确实需要“setup_environments”变量并且不能简单地多次运行ansible,包括使用-i 分别包含每个环境。

【问题讨论】:

  • 将每个环境放在自己的清单中。

标签: ansible


【解决方案1】:

阅读您的要求,您似乎只需要structure your inventory。假设您的库存看起来像

inventory.ini

[environment:children]
prod
qa
dev

webserver
database

[environment:vars]
# No global variables here / yet

[prod:children]
webserver_prod
database_prod

[qa:children]
webserver_qa
database_qa

[dev:children]
webserver_dev
database_dev

# Logical services nodes

[webserver:children]
webserver_prod
webserver_qa
webserver_dev

[database:children]
database_prod
database_qa
database_dev

# List of all hosts

# [prod:children]

[webserver_prod]
web.prod.example.com

[database_prod]
primary.prod.example.com
secondary.prod.example.com

# [qa:children]

[webserver_qa]
web.qa.example.com

[database_qa]
primary.qa.example.com
secondary.qa.example.com

# [dev:children]

[webserver_dev]
web.dev.example.com

[database_dev]
primary.dev.example.com
secondary.dev.example.com

你可能对结构比较熟悉

ansible-inventory dev --graph
ansible-inventory database_dev --graph
...

可以通过to certain nodes 应用剧本、任务等

ansible-playbook database_dev ...

另外你应该introduce group_vars点赞

all
prod
qa
dev
webserver_prod
database_prod
...

所有都取决于库存的结构,但之后会更容易。

【讨论】:

  • 实际上我所有的服务都运行在同一台主机上,这有意义吗?如何解决我的第 2 步?我想在某处定义一个变量(例如“setup_environments”),然后为每个定义的变量组为某个主机/服务运行一次任务。因此,例如,组“server_setup”的任务应该使用“prod”中定义的变量运行一次,并使用“dev”中的变量运行一次 - 因为服务器设置需要访问这两个环境才能在一台服务器上设置它们。您能否根据我的问题中的要点具体化您的答案?
猜你喜欢
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2015-12-07
  • 2011-12-12
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多