GCP部署管理器配置“无法解析YAML”错误,并且存储在gcp云存储存储桶中的yaml文件

时间:2019-09-23 17:04:26

标签: deployment google-cloud-platform yaml google-cloud-storage

我正在使用GCP部署管理器来部署gcp云存储桶。我的YAML文件上传到另一个现有的gcp云存储桶中,我在gcp云外壳上运行以下命令以创建部署。我在用于创建部署的命令中指定链接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)向Deployment Manager提供YAML配置的最佳方法是什么?是将yaml配置文件上传到gcp对象存储桶,然后以我的方式指定其链接URL的最佳选择吗?还是有另一种方法可以提供YAML到gcp云外壳以进行部署创建的路径?

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

非常感谢您的帮助。

最诚挚的问候

Yogesh

2 个答案:

答案 0 :(得分:1)

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. 使用gsutil构建器将文件导入Cloud Build环境
  2. 使用gcloud builber运行Deployment Manager

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

答案 1 :(得分:0)

由于@guillaume的评论,我找到了失败的确切原因 当我执行从云外壳到从云存储获取的“链接” URL的“ wget”操作时,我没有得到YAML本身,但返回了我认为浏览器遵循的重定向链接,但是Deployment Manager命令行却没有。它尝试将服务器响应解释为YAML并引发错误。请参阅下面的wget响应
因此,现在我知道了原因-我想我得出结论,使用gcp存储桶为Deployment Manager存储yaml是一个坏主意。

简单的解决方案。 -在gcp命令行工具中就地编辑yaml文件,或将其直接上传到您的Shell并在本地使用。

为了所有人的利益,我在问题中编辑了我的YAML。现在那里有什么现在是完全有效的:-)

wget https://storage.cloud.google.com/mybucket/myyaml.yaml
--2019-09-24 12:15:23--  
https://storage.cloud.google.com/mybucket/myyaml
Resolving storage.cloud.google.com 
(storage.cloud.google.com)...    
Connecting to storage.cloud.google.com 
(storage.cloud.google.com)| :443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://accounts.google.com/ServiceLogin? service=cds&passive=1209600&continue=https://storage.cloud.google .com/mybucket/myyaml.yaml&followup=https://storage.cloud.google.com/dmybucket/myyaml.yaml [following]
--2019-09-24 12:15:23--  
https://accounts.google.com/ServiceLogin?service=cds&passive=1209600&continue=https://storage.cloud.google.com/mybucket/myyaml.yaml&followup=https://storage.cloud.google.com/dmybucket/myyaml.yaml
Resolving accounts.google.com (accounts.google.com)...
Connecting to accounts.google.com 
(accounts.google.com) ... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘myyaml.yaml’

myyaml.yaml [ <=>                            ]  xx.xxK  --.-KB/s    in 0.0xxs