Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何让Ansible动态库存与谷歌云平台(谷歌计算引擎)GCP协同工作_Google Cloud Platform_Ansible_Google Compute Engine - Fatal编程技术网

Google cloud platform 如何让Ansible动态库存与谷歌云平台(谷歌计算引擎)GCP协同工作

Google cloud platform 如何让Ansible动态库存与谷歌云平台(谷歌计算引擎)GCP协同工作,google-cloud-platform,ansible,google-compute-engine,Google Cloud Platform,Ansible,Google Compute Engine,我使用Ansible按照以下指南创建了一个gce集群: 在GCE创建结束时,我使用add_hostAnsible模块注册其相应组中的所有实例例如gce\U master\U ip 但是,当我尝试在创建任务之后运行以下任务时,它们将不起作用: - name: Create redis on the master hosts: gce_master_ip connection: ssh become: True gather_facts: True vars_files:

我使用Ansible按照以下指南创建了一个gce集群:

在GCE创建结束时,我使用
add_host
Ansible模块注册其相应组中的所有实例<代码>例如gce\U master\U ip

但是,当我尝试在创建任务之后运行以下任务时,它们将不起作用:

- name: Create redis on the master
  hosts: gce_master_ip
  connection: ssh
  become: True
  gather_facts: True
  vars_files:
    - gcp_vars/secrets/auth.yml
    - gcp_vars/machines.yml
  roles:
    - { role: redis, tags: ["redis"] }
auth.yml
文件中,我已经提供了服务帐户电子邮件、json凭证文件的路径和项目id。但显然这还不够。我得到如下错误:

UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey).\r\n", "unreachable": true}
这是不允许或不提供的典型ssh用户名和凭据。在本例中,我会说我没有为Ansible将用于连接的
ssh
连接设置任何用户名和私钥

我应该做些什么来确保提供了相应的凭据来建立连接


在我的搜索过程中,我想有一个问题简单地提到了可以使用
gcloudcomputessh…
命令。但是有没有一种方法我可以指定不使用经典的
ssh
而使用gcloud

要让Ansible SSH进入GCE实例,您必须提供一个SSH用户名和私钥,该用户名和私钥对应于实例上可用的SSH配置

所以问题是:如果您刚刚使用Ansible模块创建了一个新的GCE实例,是否有一种方便的方法可以在该实例上配置SSH,而不必手动连接到该实例并自己进行配置

为此,GCP提供了两种方法来为GCE实例提供支持。 例如,您可以使用该功能。要将操作系统登录与Ansible一起使用,请执行以下操作:

  • 使用Ansible创建实例时,通过将“Enable oslogin”元数据字段设置为“TRUE”,在目标实例上启用OS登录
  • 确保附加到运行Ansible的实例的服务帐户具有这两种权限
  • 生成新实例或选择将部署到目标实例的现有实例
  • 用于操作系统登录:这可以通过
    gcloud compute OS Login ssh keys add--key file[key\u file\u PATH]--ttl[EXPIRE\u TIME]
    (其中
    --ttl
    指定此公钥的可用时间-例如,
    --ttl 1d
    将使其在1天后过期)
  • 配置Ansible以使用服务帐户的用户名和与通过
    gcloud
    命令上载的公钥相对应的私钥。例如,通过覆盖
    ansible\u user
    ansible\u ssh\u private\u key\u文件
    清单参数,或者通过将
    --private key
    --user
    参数传递到
    ansible playbook
  • 服务帐户用户名是上面的
    gcloud
    命令返回的
    username

    此外,如果要在GCP项目的所有实例中将
    启用oslogin
    元数据字段自动设置为“TRUE”,只需添加项目范围的元数据条目即可。这可以在“计算引擎>元数据”下完成