【问题标题】:Trouble with Ansible ec2 dynamic inventoryAnsible ec2 动态库存问题
【发布时间】:2016-05-26 15:49:38
【问题描述】:

我正在使用 ansible 在 ec2 中配置和部署多个服务器。由于这些服务器经常变化,我想使用动态库存。我已经在我的 jenkins 服务器中设置了 ec2.py 和 ec2.ini(这是运行 ansible 脚本的地方),但是当我运行 playbook 时遇到了问题:

ERROR! Specified --limit does not match any hosts

这显然意味着我的主机没有被正确选择。当我跑步时:

./ec2.py --list >> aws_example.json

aws_example.json 中的一切看起来都不错。

我正在尝试根据名称和环境这两个标签来选择服务器。例如,我有一个服务器,其“名称”标签为“api”,“环境”标签为“生产”。


我已经像这样设置了destination_format_tags

destination_format_tags = Name,environment

按如下方式运行ansible:

ansible-playbook site.yml -i ec2.py -l api

我也尝试过更改hostname_variable

hostname_variable = tag_Name.tag_environment

并像这样运行命令:

ansible-playbook site.yml -i ec2.py -l api.production

此外,我还尝试过只使用一个带有hostname_variable 的标签:

hostname_variable = tag_Name

并像这样运行命令:

ansible-playbook site.yml -i ec2.py -l api

这些配置都不起作用。我也找不到很多关于这些设置的文档,所以我不确定如何正确配置它。谁能指出我正确的方向?

【问题讨论】:

  • 你是如何执行剧本的?发布包含参数的命令行。
  • @helloV 我已更新问题以包含命令。

标签: amazon-web-services jenkins amazon-ec2 ansible ansible-inventory


【解决方案1】:

所以问题是我如何在我的剧本中表示我的主机名。设置主机名变量是正确的做法:

hostname_variable = tag_Name

下面是如何在剧本中表示它:

- name: configure and deploy api servers
  hosts: tag_Name_api
  remote_user: ec2-user
  sudo: true

  roles:
  - java
  - nginx
  - api

另外,它需要像这样调用:

ansible-playbook site.yml -i ec2.py -l tag_Name_api

确保将.- 等特殊字符更改为_

【讨论】:

  • 标签可以包含 .或任何其他特殊字符,但清单会将所有特殊字符转换为下划线。
  • tag_Name_api.production 变为 tag_Name_api_production
  • 感谢@smiller171,我已经更新了我的答案以反映这一点。
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多