【问题标题】:Override YAML node覆盖 YAML 节点
【发布时间】:2014-05-31 11:04:06
【问题描述】:

我有一个包含一些项目配置的 YAML 文件,我希望重用部分代码以使其易于维护。所以,我尝试使用锚来做到这一点,但我想覆盖以前的节点。这可能吗?

下面是我的例子:

default: &default
    output: &default_output
       make_video: true
       take_screenshot: true
    browser: &default_browser
       type: :chrome
       width: 1024
       height: 1280
    logger: &default_logger
       level: TRACE
       output_type: :file

chrome_browser: &chrome_browser
    <<: *default
    browser:
       type: :chrome
       user_agent: user_agent_string_for_chrome

firefox_browser: &firefox_browser
     <<: *default
     browser: 
         type: :firefox
         user_agent: user_agent_string_for_firefox

好的,这是第一部分:这可能吗? firefox_browser 会覆盖“类型”吗?

现在是第二部分:

profile:
    <<: *default
    staging:
        europe:
            url: www.staging-europe-site.com
            chrome:
                <<: *browser_chrome
            firefox:
                <<: *browser_firefox
        america:
            url: www.staging-america-site.com
            chrome:
                <<: &browser_chrome
            firefox:
                <<: &browser_firefox                    
    live:
        europe:
            url: www.europe-site.com
            chrome:
                <<: &browser_chrome
            firefox:
                <<: &browser_firefox
        america:
            url: www.america-site.com
            chrome:
                <<: &browser_chrome
            firefox:
                <<: &browser_firefox

我可以这样做,以便在阅读 yaml 之后,我可以这样做:

profile_yaml['staging.europe.chrome'] 

我得到了所有的配置?

【问题讨论】:

    标签: parsing yaml


    【解决方案1】:

    至于您的第一个问题,因为键 browser(来自 default)的值被替换为 chrome_browser 中定义的值,所以这并不能满足您的要求。没有树合并或类似的事情发生。

    所以对于你的第二个例子,你最终得到:

    output: 
       make_video: true
       take_screenshot: true
    logger: 
       level: TRACE
       output_type: :file
    browser:
       type: :chrome
       user_agent: user_agent_string_for_chrome
    

    如果您将其转储回 YAML,这可能也缺少。当然还有其他方法可以实现这些目标,但您必须帮助解析器这样做。

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 1970-01-01
      • 2011-06-19
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多