如何从云中运行的实例内部运行 Ansible 的 gce.py 脚本?

如何从云中运行的实例内部运行 Ansible 的 gce.py 脚本?

我的目标是在 Google 云中创建一个计算引擎实例,从中我可以运行 ansible 脚本来进一步创建将通过 GKE 运行容器的其他实例。

我已经想通了一些事情:

  • 如何创建可以运行 ansible 和 gce.py 的实例
  • 如何赋予该实例足够的权限来调用 apache-cloudlib
  • ansible 使用 inventory 中的 'ansible_ssh_host' 来建立连接

py可以使用外部 IP 地址,也可以使用内部 IP 地址,具体取决于 shell 变量 INVENTORY_IP_TYPE 的值。

计算引擎环境均未将上述两者配置为使用由 gcloud compute ssh-config 生成的 SSH 密钥,如下所示:

Host compute-instance.us-central1-a.project-name
   Hostname 99.99.99.99
   IdentityFile /home/user/.ssh/google_compute_engine

*其中 99.99.99.99 是公共 IP 地址

最终结果是,我可以通过 ssh 连接到 compute-instance.us-central1-a.project-name,但不能连接到公共 IP、99.99.99.99 或私有 IP,而无需指定私钥文件( google_compute_engine ),因为这不是 gce.py 脚本中的选项。

我可以通过将内部 IP 添加为主机的另一个条目来获得我想要的行为:

Host compute-instance.us-central1-a.project-name 10.128.0.2

..但是,配置文件中有一个注释,指出该文件是自动生成的(而不是做那件事):

# The following has been auto-generated by "gcloud compute config-ssh"
# to make accessing your Google Compute Engine virtual machines easier.
#
# To remove this blob, run:
#
#   gcloud compute config-ssh --remove
...
# You should not hand-edit this section, unless you are deleting it.
#

是否存在已知的“正确”方法,可以让 gce.py 在 Google Cloud 内部运行,而无需破解脚本生成的 ansible_ssh_host 值?

答案1

Ansible 托管实例的配置规范在剧本中定义。剧本是 YAML 格式的文件,其中包含代表托管实例所需状态的任务集合。

Ansible 还需要管理实例的库存清单。您需要使用静态文件或动态库存插件来管理其库存。

可以使用用于应用剧本的 Ansible 命令来创建、管理和销毁 Compute Engine 资源:

ansible-playbook -i inventory.ini gce-playbook.yml

有关此事的更多信息,请参阅此帮助中心文章

相关内容