我在这里使用一些新代码配置新的 droplet 时得到了不同的结果。似乎 Ansible 可能没有正确等待服务器获取 IP 地址。我曾多次尝试修复它,但没有成功,并且输入一些任意的等待时间不会扩展。有人能看看我是否在代码中犯了导致这种奇怪行为的错误吗?现在,剧本旨在从 PROVISION 组中获取主机名,启动虚拟机,回复它们的 IP 地址,然后将新地址附加到 DROPLETS 组。通常只有部分 IP 地址会进入 DROPLETS 组。
这是主机文件:
[DIGITALOCEAN]
localhost ansible_connection=local
[PROVISION]
TEST1
TEST2
TEST3
[DROPLETS]
TEST1 ansible_ssh_host=x.x.x.x
TEST2 ansible_ssh_host=y.y.y.y
See, this one didn't make it in... Not always this one... and they get unordered sometimes.
以下是剧本:
---
- hosts: PROVISION
gather_facts: no
vars:
do_token: TOKEN
tasks:
- name: Create new droplet
digital_ocean: >
state=present
command=droplet
name={{ inventory_hostname }}
unique_name=yes
size_id=512mb
region_id=nyc3
image_id=ubuntu-18-04-x64
ssh_key_ids=KEY
api_token={{ do_token }}
wait=yes
wait_timeout=500
register: hostname
delegate_to: localhost
- name: Add host to Ansible config
lineinfile:
dest: "/etc/ansible/hosts"
insertafter: '^\[DROPLETS\]'
state: present
line: "{{ hostname.droplet.name }} ansible_ssh_host={{ hostname.droplet.ip_address }}"
delegate_to: localhost