首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从模板部署时如何将密码等变量数据摄取到计算实例中

从模板部署时如何将密码等变量数据摄取到计算实例中
EN

Stack Overflow用户
提问于 2019-09-25 23:08:00
回答 2查看 385关注 0票数 0

我们正在尝试弄清楚如何在部署管理器生成最终实例时创建计算引擎模板,并在变量的帮助下设置密码等信息。当从marketplace部署一些东西时,你可以看到密码是由"password.py“生成的,并作为元数据存储在VM模板中。但我找不到将此数据写入VM磁盘映像的代码。有人能解释一下如何实现这一点吗?

编辑:我发现启动脚本能够读取实例的元数据:https://cloud.google.com/compute/docs/storing-retrieving-metadata在市场上像https://console.cloud.google.com/marketplace/details/click-to-deploy-images/wordpress这样的点击部署脚本中是这样做的吗?或者,有没有更好的方法来实现这一点?

EN

回答 2

Stack Overflow用户

发布于 2019-09-26 17:54:45

最好的方法是使用元数据服务器。

在启动脚本中,使用此命令恢复VM的所有属性。

代码语言:javascript
复制
curl  -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetada
ta/v1/instance/attributes/"

然后,随心所欲地处理它

使用后,不要忘了从元数据中删除secret。或者在计算机上更改它们。秘密必须保密。

顺便说一句,我想推荐你看看另一个东西:berglas。Berglas是由Google Developer Advocate制作的,专门从事安全: Seth Vargo。总而言之,原则是:

  • Bootstrap a bucket with berglas
  • 使用berglas
  • 在此存储桶中创建秘密通过berglas
  • 在启动脚本中传递对计算元数据中此秘密的引用以解析秘密。

所有这些操作都可以在命令行中执行,因此可以在脚本中集成。

票数 0
EN

Stack Overflow用户

发布于 2019-09-27 00:08:19

你可以使用python模板,这给了你更多的灵活性。在您的YAML中,您可以从documentation调用python脚本来填充必要的信息

代码语言:javascript
复制
imports:
- path: vm-template.py

resources:
- name: vm-1
  type: vm-template.py
- name: a-new-network
  type: compute.v1.network
  properties:
    routingConfig:
      routingMode: REGIONAL
    autoCreateSubnetworks: true

其中vm-template.py是一个python脚本:

代码语言:javascript
复制
    """Creates the virtual machine."""

COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'


def GenerateConfig(unused_context):
  """Creates the first virtual machine."""

  resources = [{
      'name': 'the-first-vm',
      'type': 'compute.v1.instance',
      'properties': {
          'zone': 'us-central1-f',
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/[MY_PROJECT]',
                                  '/zones/us-central1-f/',
                                  'machineTypes/f1-micro']),
          'disks': [{
              'deviceName': 'boot',
              'type': 'PERSISTENT',
              'boot': True,
              'autoDelete': True,
              'initializeParams': {
                  'sourceImage': ''.join([COMPUTE_URL_BASE, 'projects/',
                                          'debian-cloud/global/',
                                          'images/family/debian-9'])
              }
          }],
          'networkInterfaces': [{
              'network': '$(ref.a-new-network.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }]
      }
  }]
  return {'resources': resources}

现在,密码取决于您使用的虚拟机,是Windows还是Linux。

你可以添加一个注入ssh public key的启动脚本。

Windows你可以先准备好合适的密钥,查看这个Automate password generation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58101518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档