gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:12:36 27 4
gpt4 key购买 nike

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

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

apiVersion: v1
kind: Namespace
metadata:
name: testnamespace
spec:
finalizers:
- kubernetes

最佳答案

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

kubectl create namespace $NAME [--dry-run] [options]

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

  • 例子

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

    嵌入的表达式不会在 YAML 中产生所需的结果,因为它们不是 native 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!

    解释
  • 在标准 YAML 中,使用 anchor 、别名和 merge keys 可以很容易地使用绿色标记的替换。 .
  • 标记为黄色的替换在技术上可用于标准 YAML,但并非没有 custom type declaration ,或其他一些绑定(bind)机制。
  • 红色标记的替换在标准 YAML 中不可用。然而,有一些变通方法和替代方案;比如通过string formatting或字符串模板引擎(例如 python 的 str.format )。

  • Image explaining the different types of variable substitution in YAML

    细节

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

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

    YAML 还支持 custom type declaration ,但是这些不太常见,如果您接受来自可能不受信任的来源的 YAML 内容,则会存在安全隐患。

    YAML 插件库

    有 YAML 扩展库,但这些不是 native YAML 规范的一部分。
  • Ansible
  • https://docs.ansible.com/ansible-container/container_yml/template.html
  • (支持对 YAML 的许多扩展,但它是一个编排工具,如果你只想要 YAML,那就有点大材小用了)
  • https://github.com/kblomqvist/yasha
  • https://github.com/dreftymac/dynamic.yaml
  • https://bitbucket.org/djarvis/yamlp

  • 解决方法
  • 将 YAML 与模板系统结合使用,例如 Jinja2 或 Twig
  • 使用 YAML 扩展库
  • 使用sprintfstr.format来自宿主语言的样式功能

  • 也可以看看
  • String interpolation in YAML
  • how to reference a YAML "setting" from elsewhere in the same YAML file?
  • Use YAML with variables
  • How can I include a YAML file inside another?
  • Passing variables inside rails internationalization yml file
  • Can one YAML object refer to another?
  • is there a way to reference a constant in a yaml with rails?
  • https://learnxinyminutes.com/docs/yaml/
  • 关于kubectl - 通过 kubectl 命令在 YAML 中使用环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55131000/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com