使用OpenStack Heat模板组合时遇“资源类型未找到”错误求助
解决OpenStack Heat自定义资源类型找不到的问题
我之前在组合Heat模板时也碰到过一模一样的错误,别着急,咱们一步步排查可能的原因:
1. 确认部署时加载了环境文件
这是最容易忽略的点!默认情况下Heat不会自动读取environment.yml,你必须在部署栈的时候显式指定环境文件:
heat stack-create -e environment.yml -f stack.yml my-test-stack
如果用的是较新的OpenStack CLI(比如openstack命令),对应的命令是:
openstack stack create -e environment.yml -t stack.yml my-test-stack
2. 检查自定义模板的路径是否正确
环境文件里My::Custom::Resource对应的my-custom-resource.yml路径要注意:
- 如果用相对路径,是相对于你执行Heat命令的当前工作目录,而不是环境文件所在的目录
- 建议用绝对路径避免路径问题,比如:
resource_registry: My::Custom::Resource: /home/user/templates/my-custom-resource.yml
3. 验证自定义模板本身的合法性
先单独验证你的my-custom-resource.yml有没有语法错误,执行:
heat template-validate -f my-custom-resource.yml
或者用openstack命令:
openstack orchestration template validate -f my-custom-resource.yml
如果模板有语法问题,Heat会给出具体的错误提示,先把这个解决掉。
4. 确认测试模板中资源类型的拼写完全一致
stack.yml里的资源类型必须和环境文件里的大小写完全匹配,比如正确的写法应该是:
heat_template_version: 2016-04-08 description: My Stack resources: my_custom_instance: type: My::Custom::Resource
别把My::Custom::Resource写成小写或者拼写错误,Heat对类型名称的大小写是敏感的。
5. 检查Heat版本兼容性
你用的是2016-04-08的模板版本,确认当前OpenStack集群的Heat服务支持这个版本(一般Mitaka及以后的版本都支持),如果集群版本太老,可能需要升级或者更换对应的模板版本。
按照上面的步骤排查下来,应该就能解决"The Resource Type could not be found."的问题了。
内容的提问来源于stack exchange,提问作者Eric Citaire
相关产品推荐
相关产品推荐

