我正在使用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
答案 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。
gsutil
构建器将文件导入Cloud Build环境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