我们正在尝试弄清楚如何在部署管理器生成最终实例时创建计算引擎模板,并在变量的帮助下设置密码等信息。当从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这样的点击部署脚本中是这样做的吗?或者,有没有更好的方法来实现这一点?
发布于 2019-09-26 17:54:45
最好的方法是使用元数据服务器。
在启动脚本中,使用此命令恢复VM的所有属性。
curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetada
ta/v1/instance/attributes/"然后,随心所欲地处理它
使用后,不要忘了从元数据中删除secret。或者在计算机上更改它们。秘密必须保密。
顺便说一句,我想推荐你看看另一个东西:berglas。Berglas是由Google Developer Advocate制作的,专门从事安全: Seth Vargo。总而言之,原则是:
所有这些操作都可以在命令行中执行,因此可以在脚本中集成。
发布于 2019-09-27 00:08:19
你可以使用python模板,这给了你更多的灵活性。在您的YAML中,您可以从documentation调用python脚本来填充必要的信息
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脚本:
"""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
https://stackoverflow.com/questions/58101518
复制相似问题