gpt4 book ai didi

scope - 在以 playbook 为目标的 ansible 主机中使用变量

转载 作者:行者123 更新时间:2023-12-01 02:10:41 25 4
gpt4 key购买 nike

我正在尝试编写一个非常灵活的剧本,它根据主机所在的环境针对主机。我使用了尽可能多的变量,因此剧本可以以最小的更改重用于其他项目/环境。

我有一个 application.yml

---
- name: Prepare app-server for "The app"
hosts: "{{'env'}}_super_app"
vars:
vars_files:
- "environments/{{env}}.yml"
sudo: yes
tasks:
- command: echo {{env}}
roles:
- common
- nginx
- php5-fpm
- nodejs
- newrelic
- users
- composer

- name: Install and configure mysql for "The super app"
hosts:
- "{{env}}_super_db"
vars:
vars_files:
- "environments/{{env}}.yml"
sudo: yes
roles:
- common
- mysql
- newrelic

这是剧本目录结构:
├── environments
│   ├── prod.yml << environment specific vars
│   ├── stag.yml << environment specific vars
│   └── uat.yml << environment specific vars
├── roles
│   ├── common
│   ├── composer
│   ├── mysql
│   ├── newrelic
│   ├── nginx
│   ├── nodejs
│   ├── php5-fpm
│   └── users
├── users
│   └── testo.yml
├── prod << inventory file for production
├── README.md
├── application.yml << application playbook
├── stag << inventory file for staging
├── uat << inventory file for uat

以下是uat list 文件的内容:
[uat_super_app]
10.10.10.4
[uat_super_db]
10.10.10.5

当我运行我的剧本时,我将环境作为一个额外的变量传递:
ansible-playbook -K -i uat application.yml -e="env=uat" --check

这个想法是:
如果 {{env}} 设置为 uat,则将使用环境/uat.yml 变量,并且将基于 {{env}}_super_app 定位主机 [uat_super_app]。

如果我或任何人犯了错误并尝试针对生产库存运行 uat 变量,则主机将不匹配,并且 ansible 将不会运行剧本。
ansible-playbook -K -i prod application.yml -e="env=uat" --check

当我在主机定位中不使用变量时,此剧本有效。
问题是没有主机匹配任何一种方式:
ansible-playbook -K -i uat application.yml -e="env=uat" --check -vvvv

SUDO password:
PLAY [Prepare app-server for "The app"] *******************************
skipping: no hosts matched

PLAY [Install and configure mysql for "The app"] **********************
skipping: no hosts matched

PLAY RECAP ********************************************************************

最佳答案

hosts: "{{'env'}}_super_app"

看起来您正在使用字符串 env ,而不是变量,其计算结果为 env_super_app .我想你的意思是:
hosts: "{{ env }}_super_app"

关于scope - 在以 playbook 为目标的 ansible 主机中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com