如何使用 ansible 对 gce 实例执行 shell 脚本

how to use ansible to execute shell script against gce instances

如何使用 ansible 对 gce 实例执行 shell 脚本。 我有一个服务帐户,它具有计算管理员权限。

如何编写 ansible 剧本,以便我可以针对我的 gcp 项目中的所有虚拟机执行 shell 脚本。

以下链接对我帮助不大 https://docs.ansible.com/ansible/latest/modules/gce_module.html# https://docs.ansible.com/ansible/latest/scenario_guides/guide_gce.html#gce-dynamic-inventory

我更喜欢 ansible,因为它是无代理的。我不想在这些虚拟机中安装任何进程,因为它们是生产服务器。

终于明白了

这是我的项目:

ansible-workplace
- .gitignore
- ansible.cfg 
- inventory.gcp.yaml
- main.yaml
- requirements.txt

ansible.cfg

[defaults]
inventory = inventory.gcp.yaml
host_key_checking = False
private_key_file = /Users/<your user>/.ssh/google_compute_engine
[inventory]
enable_plugins =  host_list, script, auto, yaml, ini, toml, gcp_compute

inventory.gcp.yaml

plugin: gcp_compute
projects:
  - gcp-project1
  - gcp-project2
auth_kind: serviceaccount
service_account_file: /Users/<your user>/.ssh/temp-serviceaccount.json

main.yaml

- name: echo
  hosts: all
  gather_facts: yes

  tasks:
  - name: Manage instances
    # connection: ssh
    shell: |
      server_name=`hostname`
      echo $server_name checking legacy-endpoint-access/0.1
      leg1=$(curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/legacy-endpoint-access/0.1)
      echo $leg1
      echo $server_name checking legacy-endpoint-access/v1beta1
      leg2=$(curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/legacy-endpoint-access/v1beta1)
      echo $leg2
    register: out
  - debug: var=out.stdout_lines

默认情况下,ansible 不会使用 gcloud 生成的 ssh 密钥来连接到 GCE 实例。因此,您可能需要执行以下操作。 “gcloud compute config-ssh”会将主机名添加到您的 ~/.ssh/config 中,您现在可以更轻松地连接到 gce 实例,最重要的是,您可以确定 ansible 应该用来连接到 gce 实例的计算密钥。 所以在ansible.cfg中,这一行很关键 “private_key_file = /用户//。ssh/google_compute_engine”

gcloud compute config-ssh --remove
gcloud compute config-ssh
ansible-playbook main.yaml

现在你可以愉快地运行 "ansible-playbook main.yaml"