我正在使用 ec2.py
动态库存来配置ansible . 我已将 ec2.py
放在 /etc/ansible/hosts
文件中并将其标记为可执行文件 . 我在 /etc/ansible/hosts
中也有 ec2.ini
文件 .
[ec2]
regions = us-west-2
regions_exclude = us-gov-west-1,cn-north-1
destination_variable = public_dns_name
vpc_destination_variable = ip_address
route53 = False
all_instances = True
all_rds_instances = False
cache_path = ~/.ansible/tmp
cache_max_age = 0
nested_groups = False
group_by_instance_id = True
group_by_region = True
group_by_availability_zone = True
group_by_ami_id = True
group_by_instance_type = True
group_by_key_pair = True
group_by_vpc_id = True
group_by_security_group = True
group_by_tag_keys = True
group_by_tag_none = True
group_by_route53_names = True
group_by_rds_engine = True
group_by_rds_parameter_group = True
以上是我的 ec2.ini
文件
---
- hosts: localhost
connection: local
gather_facts: yes
vars_files:
- ../group_vars/dev_vpc
- ../group_vars/dev_sg
- ../hosts_vars/ec2_info
vars:
instance_type: t2.micro
tasks:
- name: Provisioning EC2 instance
local_action:
module: ec2
region: "{{ region }}"
key_name: "{{ key }}"
instance_type: "{{ instance_type }}"
image: "{{ ami_id }}"
wait: yes
group_id: ["{{ sg_npm }}", "{{sg_ssh}}"]
vpc_subnet_id: "{{ PublicSubnet }}"
source_dest_check: false
instance_tags: '{"Name": "EC2", "Environment": "Development"}'
register: ec2
- name: associate new EIP for the instance
local_action:
module: ec2_eip
region: "{{ region }}"
instance_id: "{{ item.id }}"
with_items: ec2.instances
- name: Waiting for NPM Server to come-up
local_action:
module: wait_for
host: "{{ ec2 }}"
state: started
delay: 5
timeout: 200
- include: ec2-configure.yml
现在配置脚本如下
- name: Configure EC2 server
hosts: tag_Name_EC2
user: ec2-user
sudo: True
gather_facts: True
tasks:
- name: Install nodejs related packages
yum: name={{ item }} enablerepo=epel state=present
with_items:
- nodejs
- npm
但是,在调用configure脚本时,第二个脚本会导致找不到主机 . 如果我单独执行 ec2-configure.yml
并且如果EC2服务器启动并运行,则它能够找到并配置它 .
我添加了 wait_for
以确保在调用 ec2-configure.yml
之前实例处于运行状态 .
如果有人能指出我的错误,将不胜感激 . 谢谢
4 回答
经过研究,我发现动态库存不会在剧本调用之间刷新,只有在您分别执行剧本时才会刷新 . 但是,我能够使用
add_host
命令解决该问题 .使用ansible 2.0,您可以刷新playbook中间的动态库存,如下所示:
为了扩展这一点,如果您在剧本中遇到缓存问题,那么您可以像这样使用它:
其中
./inventory
是动态广告资源的路径,请相应调整 .希望这会帮助你 .
Configure EC2 server
play无法从EC2动态库存中找到任何主机,因为新实例是在剧本的第一次播放中添加的 - 在同一次执行期间 . 小组tag_Name_EC2
没有找到't exist in the inventory when the inventory was read and thus can' .当你再次运行相同的剧本
Configure EC2 server
应该找到该组 .我们使用以下解决方法来指导用户处于这种情况 .
首先,提供实例:
然后在
ec2-configure.yml
之前添加一个新剧本 . 该剧使用在Provisioning EC2 instance
中注册的ec2
变量,如果启动任何实例,将失败并退出该剧本:您还可以刷新缓存:
ec2.py --refresh-cache
或者,如果您使用Ansible主机文件:
/etc/ansible/hosts --refresh-cache