我有一个基本的 Ansible 剧本,如下所示:
---
- name: Provision ec2 servers
hosts: 127.0.0.1
connection: local
roles:
- aws
- name: Configure {{ application_name }} servers
hosts: webservers
sudo: yes
sudo_user: root
remote_user: ubuntu
vars:
- setup_git_repo: no
- update_apt_cache: yes
vars_files:
- env_vars/common.yml
- env_vars/remote.yml
roles:
- common
- db
- memcached
- web
具有以下库存:
[localhost]
127.0.0.1 ansible_python_interpreter=/usr/local/bin/python
Provision ec2 servers 任务可以满足您的期望。它创建一个 ec2 实例;它还创建一个主机组 [webservers] 并将创建的实例 IP 添加到其中。
配置 {{ application_name }} 服务器步骤然后配置该服务器,安装我需要的一切。
到目前为止一切顺利,这一切都完全符合我的要求,一切似乎都有效。
这就是我卡住的地方。我希望能够为不同的角色启动一个 ec2 实例。理想情况下,我会创建一个数据库服务器、一个网络服务器,也许还有一个 memcached 服务器。我希望能够单独部署此基础架构的任何部分,例如仅创建和配置数据库服务器
我能想到的唯一方法可以使这项工作......好吧,它们不起作用。
我尝试简单地声明清单中没有主机的主机组:
[webservers]
[dbservers]
[memcachedservers]
但这是一个语法错误。
我可以明确地配置每个服务器并声明它的主机组,如下所示:
- name: Provision webservers
hosts: webservers
connection: local
roles:
- aws
- name: Provision dbservers
hosts: dbservers
connection: local
roles:
- aws
- name: Provision memcachedservers
hosts: memcachedservers
connection: local
roles:
- aws
但是这些组在相应步骤完成之前不存在,所以我认为这也不会奏效。
我看过很多关于动态库存的内容,但我无法理解这对我有什么帮助。我还查看了无数 ansible ec2 配置项目的示例,它们总是要么配置预先存在的 ec2 实例,要么只是创建一个实例并在其上安装所有东西。