首页 > 解决方案 > 存储在 gcp 云存储桶中的 yaml 文件的 GCP 部署管理器配置“无法解析 YAML”错误

问题描述

我正在使用 GCP 部署管理器来部署 gcp 云存储桶。我的 YAML 文件上传到另一个现有的 gcp 云存储桶中,我在 gcp cloud shell 上运行以下命令以创建部署。我在命令中指定链接 url 以创建部署(见下文)

$gcloud config set project my-project-name
$gcloud deployment-manager deployments create bkt-deployer  --config https://storage.cloud.google.com/mybucket/UCABkt-V4.yaml

我得到以下错误

 Failed to parse YAML: mapping values are not allowed here
  in "<unicode string>", line 11, column 14:
      font-family: 'Open Sans';
                 ^ (line: 11)

尽管指定了错误的存储桶名称,但我认为我得到了 YAML 解析错误,所以我怀疑这是由于 YAML 无法访问的问题。我尝试修复存​​储桶和单个 YAML 的权限,但无济于事。我仍然得到这个错误,在我看来这确实具有误导性。

虽然实际的 YAML 格式不相关,但仅供参考,我的 YAML 文件如下所示(参见代码块)

resources:
- name: deployment-manager-bucket-2
  type: storage.v1.bucket
  properties:
    predefinedAcl: projectPrivate
    projection: full
    location: US
    storageClass: STANDARD
    lifecycle:
      rule:
      - action: 
        type: SetStorageClass storage_class = "NEARLINE" 
        condition:
          age: 30
      - action:
        type: SetStorageClass storage_class = "COLDLINE"
        condition:
          age: 90

所以几个问题

1) 向部署管理器提供 YAML 配置的最佳方式是什么?将 yaml 配置文件上传到 gcp 对象存储桶,然后像我一样指定其链接 URL,这是一个最佳选择吗?或者是否有另一种方法可以将 YAML 路径提供给 gcp cloud shell 以进行部署创建?

2)假设最终我克服了指定部署路径的障碍,我的 YAML 并确保没有访问和权限问题,我的 YAML 语法看起来还好吗?尤其是在老化 30 天和 90 天时分别分配 Nearline 和 Coldline 存储类的生命周期规则规范

非常感谢您的帮助。

此致

约格什

标签: deploymentgoogle-cloud-platformyamlgoogle-cloud-storage

解决方案


您的 YAML 文件接缝的开头已损坏:

resources:
- name: deployment-manager-bucket-2
type: storage.v1.bucket
properties:

类型和属性之前缺少空格。

然后,您在部署中遇到的问题是因为您的 yaml 文件不可访问。您在访问错误页面的 CSS 中遇到了“字体系列”问题。自己试试吧!curl -L https://storage.cloud.google.com/mybucket/UCABkt-V4.yaml

你应该得到

<!DOCTYPE html>
<html lang="en">
  <head>
  <meta charset="utf-8">
  <meta content="width=300, initial-scale=1" name="viewport">
  <meta name="google-site-verification" content="LrdTUW9psUAMbh4Ia074-BPEVmcpBxF6Gwf0MSgQXZs">
  <title>Sign in - Google Accounts</title>
  <style>
  @font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 300;
...

因此,您必须使您的文件或存储桶可公开访问。不是很安全和专业。

我提出一个解决方案:使用Cloud Build

  1. 使用gsutilbuilder 将您的文件放入 Cloud Build 环境
  2. 使用gcloudbuilder 运行部署管理器

Cloud Build 具有访问您项目的存储桶的权限。


推荐阅读