Terraform - huaweicloudstack 提供商 - 无法使用 ssh 密钥登录

Terraform - huaweicloudstack 提供商 - 无法使用 ssh 密钥登录

在 terraform 和 huaweicloudstack 提供商的帮助下,我使用特定的 ssh 密钥创建了 ECS 实例,但我无法使用密钥登录,也无法使用管理员密码登录。如果我通过 webconsole 手动创建机器,则一切正常。Webconsole 还显示正确的 ssh 密钥。

机器创建后还有什么需要做的吗?

resource "huaweicloudstack_compute_instance_v2" "testsrv" {
  name              = "basic"
  flavor_name       = "s3.small.1"
  key_pair          = "authorized-key"
  admin_pass        = "somepass"
  security_groups   = ["default", "base"]
  availability_zone = "az1.dc0"
  user_data         = "#cloud-config\nhostname: basic\nfqdn: basic"

  network {
    port = huaweicloudstack_networking_port_v2.port_1.id
  }

  block_device {
    uuid                  = huaweicloudstack_blockstorage_volume_v2.volume_1.id
    source_type           = "volume"
    destination_type      = "volume"
    boot_index            = 0
    delete_on_termination = true
  }
}

谢谢你的帮助。

答案1

快速解决方案- config_drive: true 在实例中使用

原因:如果没有 config_drive: true,实例将尝试从网络获取配置。最新 centos 中内置的 cloudinit 版本有错误:

failed run of stage init                                                                 
------------------------------------------------------------                             
Traceback (most recent call last):                                                       
  File "/usr/lib/python3.6/site-packages/cloudinit/cmd/main.py", line 652, in status_wrapper                                                                                       
    ret = functor(name, args)                                                            
  File "/usr/lib/python3.6/site-packages/cloudinit/cmd/main.py", line 362, in main_init  
    init.apply_network_config(bring_up=bool(mode != sources.DSMODE_LOCAL))               
  File "/usr/lib/python3.6/site-packages/cloudinit/stages.py", line 649, in apply_network_config                                                                                   
    netcfg, src = self._find_networking_config()                                         
  File "/usr/lib/python3.6/site-packages/cloudinit/stages.py", line 636, in _find_networking_config                                                                                
    if self.datasource and hasattr(self.datasource, 'network_config'):      
  File "/usr/lib/python3.6/site-packages/cloudinit/sources/DataSourceOpenStack.py", line 115, in network_config                                                                    
    self.network_json, known_macs=None)     
  File "/usr/lib/python3.6/site-packages/cloudinit/sources/helpers/openstack.py", line 645, in convert_net_json                                                                    
    'Unknown network_data link type: %s' % link['type'])                                 
ValueError: Unknown network_data link type: cascading

最新的 centos 内置版本为 18.5,但是 ubuntu 有 20.1,并且已经解决了这个错误,因此 cloudinit 运行时没有错误。

我之所以能够通过控制台手动启动实例,是因为华为的 openstack 使用 configdrive 模块,而不是网络。所以找到 cdrom 实际上是解决方案。

因此有两个选择:

  1. 使用 config_drive: true openstack 将生成 cd 驱动器并将其安装到实例中。很简单。
  2. 在 centos 中更新 cloud-init 手动启动实例,进入,更新 cloud-init,从实例创建映像,然后使用这个新映像。比较难。

相关内容