实例自定义元数据 示例:通过元数据配置云主机的python环境 场景:在使用python过程中,我们经常需要安装很多依赖包,并且每个包之间互相有版本限制(比如在深度学习框架中,Keras与TensorFlow之间需要版本对应)。此时我们可以通过创建元数据,来记录该云主机所需要的python包环境的版本信息。 首先,console界面远程登录云主机,进入远程界面后,查看当前python包信息: 我们需要将关键的包的版本信息写入。 这里我们以部分包为例,执行openapi创建云主机的自定义元数据: python 按照创建云数据的openapi文档填写相关参数 createmetadataparams { "regionID": huadong1regionid, "azName": huadong1az1, "instanceID": huadong1instance, "metadta": { "requeirements": { "requests": "2.27.1", "numpy": "1.16.6", "matplotlib": "2.2.5" } } } 这里省略post方法的定义,该方法的实现请参考天翼云官网文档中的python示例文档 url " resmetadatacreate post(url, paramscreatemetadataparams) 执行结果: python { "returnObj": { "instanceID": "c44de03e300b72371827b51aeaff3ccd", "metadata": { "requeirements": { "requests": "2.27.1", "numpy": "1.16.6", "matplotlib": "2.2.5" } } }, "details": "", "message": "SUCCESS", "description": "成功", "statusCode": 800 } 在创建过元数据后,我们可以在云主机内使用相关脚本,对python进行相应的配置。 python示例脚本(test.py): python import json import subprocess HOST "169.254.169.254" URL HOST + "/specmetadata" FILEREQUEIRE "requirements.txt" def sendcommand(command): commandls command.split() process subprocess.Popen(commandls, stdoutsubprocess.PIPE) output, err process.communicate() return output.decode("utf8") if name "main": res sendcommand("curl s %s" % URL) metadata json.loads(res) requeireinfo metadata.get("requeirements") with open(FILEREQUEIRE, "w") as f: for k, v in requeireinfo.items(): writeinfo "%s%s" % (str(k), str(v)) f.writelines(writeline) tsinghuaimage "