如何使用 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"
如何使用 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"