首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用kubectl命令在YAML中使用env变量

问使用kubectl命令在YAML中使用env变量
EN

Stack Overflow用户
提问于 2019-03-12 21:36:49
回答 1查看 8.2K关注 0票数 4

如何在YAML文件中使用环境变量?

我正在使用kubectl创建一个命名空间,并想知道如何使用变量而不是testnamespace (如name: $var )。

代码语言:javascript
复制
apiVersion: v1
kind: Namespace
metadata:
  name: testnamespace
spec:
  finalizers:
  - kubernetes
EN

回答 1

Stack Overflow用户

发布于 2019-03-13 11:35:54

作为解决办法,您可以始终使用命令式的对象创建模式,而不是将变量合并到yaml文件中。

代码语言:javascript
复制
kubectl create namespace $NAME [--dry-run] [options]

问题

  • YAML本机不支持变量占位符
  • 锚点和别名确实允许某种级别的抽象和间接,但这些不作为变量占位符,可以插入整个YAML文本的任意区域。它们必须作为单独的YAML节点放置。
  • 有些插件库支持任意变量占位符,但它们不是本机YAML规范的一部分。

示例

考虑下面的示例YAML。它是格式良好的YAML语法,但是它使用(非标准的)带内嵌表达式的大括号占位符。

嵌入的表达式不会在YAML中产生所需的结果,因为它们不是本机YAML规范的一部分。尽管如此,在本例中,它们只用于帮助说明标准YAML可用的是什么,哪些不是。

代码语言:javascript
复制
part01_customer_info:
  cust_fname:   "Homer"
  cust_lname:   "Himpson"
  cust_motto:   "I love donuts!"
  cust_email:   homer@himpson.org

part01_government_info:
  govt_sales_taxrate: 1.15

part01_purchase_info:
  prch_unit_label:    "Bacon-Wrapped Fancy Glazed Donut"
  prch_unit_price:    3.00
  prch_unit_quant:    7
  prch_product_cost:  "{{prch_unit_price * prch_unit_quant}}"
  prch_total_cost:    "{{prch_product_cost * govt_sales_taxrate}}"

part02_shipping_info:
  cust_fname:   "{{cust_fname}}"
  cust_lname:   "{{cust_lname}}"
  ship_city:    Houston
  ship_state:   Hexas

part03_email_info:
  cust_email:     "{{cust_email}}"
  mail_subject:   Thanks for your DoughNutz order!
  mail_notes: |
    We want the mail_greeting to have all the expected values
    with filled-in placeholders (and not curly-braces).
  mail_greeting: |
    Greetings {{cust_fname}} {{cust_lname}}!

    We love your motto "{{cust_motto}}" and we agree with you!

    Your total purchase price is {{prch_total_cost}}

    Thank you for your order!

解释

  • 绿色标记的替换在标准的YAML中很容易获得,使用锚、别名和合并键。
  • 标记为黄色的替换在标准的YAML中技术上可用,但没有自定义类型声明或其他一些绑定机制。
  • 标记为红色的替换在标准的YAML中不可用。然而,也有解决办法和替代办法;例如通过字符串格式或string模板引擎(如python的str.format)。

​

​

详细信息

YAML的一个经常被请求的特性是能够插入任意变量占位符,这些占位符支持与同一(或遮挡) YAML文件中的其他内容相关的任意交叉引用和表达式。

YAML支持锚点和别名,但此功能不支持任意放置YAML文本中任何位置的占位符和表达式。它们只适用于YAML节点。

YAML也支持自定义类型声明,但是它们并不常见,如果您接受来自可能不受信任的源的YAML内容,则存在安全问题。

YAML addon库

有YAML扩展库,但这些库不是本机YAML规范的一部分。

  • 无源
    • yml/template.html
    • (支持对YAML的许多扩展,但是它是一个编排工具,如果您只想要YAML,这是过分的)

​

解决办法

  • 将YAML与模板系统(如Jinja2或Twig )结合使用
  • 使用YAML扩展库
  • 使用宿主语言中的sprintf或str.format样式功能

另请参阅

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55131000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档