使用 kubectl 命令在 YAML 中使用环境变量

Ahm*_*mFM 3 kubectl

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

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

apiVersion: v1
kind: Namespace
metadata:
  name: testnamespace
spec:
  finalizers:
  - kubernetes
Run Code Online (Sandbox Code Playgroud)

A_S*_*Suh 6

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

kubectl create namespace $NAME [--dry-run] [options]
Run Code Online (Sandbox Code Playgroud)

问题

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

例子

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

嵌入的表达式不会在 YAML 中产生所需的结果,因为它们不是本机 YAML 规范的一部分。然而,在本示例中使用它们只是为了帮助说明标准 YAML 中哪些可用,哪些不可用。

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!
Run Code Online (Sandbox Code Playgroud)

解释

  • GREEN标记的替换在标准 YAML 中很容易获得,使用锚、别名和合并键

  • YELLOW标记的替换在技术上可以在标准 YAML 中使用,但不能没有自定义类型声明或其他一些绑定机制。

  • RED标记的替换在标准 YAML 中不可用。然而,也有解决方法和替代方案;例如通过字符串格式化或字符串模板引擎(例如 python 的str.format)。

解释 YAML 中不同类型变量替换的图像

细节

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

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

YAML 还支持自定义类型声明,但是这些不太常见,如果您接受来自潜在不可信来源的 YAML 内容,则会存在安全隐患。

YAML 插件库

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

解决方法

  • 将 YAML 与模板系统结合使用,例如 Jinja2 或 Twig
  • 使用 YAML 扩展库
  • 使用托管语言的功能sprintfstr.format样式

也可以看看


归档时间:

查看次数:

5860 次

最近记录:

6 年,9 月 前