yaml中的錨點和引用


項目引入yaml語言來寫配置文件,最近發現利用其錨點&和引用*的功能,可以極大減少配置文件中的重復內容,將相同配置內容收斂到錨點處,修改時,只需要修改錨點處的內容,即可在所有引用處生效。

yaml基礎參考自阮老師的blog: http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt

具體練習也是使用阮老師推薦的http://nodeca.github.io/js-yaml/

舉例,在server對redis的訪問配置中,針對不同的db可能會寫成如下配置:

user:
    host: 127.0.0.1
    db: 8

book:
    host: 127.0.0.1
    db: 9

comment:
    host: 127.0.0.1
    db: 10

此處host其實配置都是一樣的,只有db不一樣,通過錨點和引用的功能,可以寫成如下:

localhost: &localhost1
    host: 127.0.0.1
user:
    <<: *localhost1
    db: 8

book:
    <<: *localhost1
    db: 9

comment:
    <<: *localhost1
    db: 10

其中&表示將localhost1作為localhost的別名,*標識取別名localhost1對應的value,<<表示將*localhost1代表的map合並入當前map數據。

針對遠端服務多台機器的訪問配置,針對不同情況可能存在不同的優先級訪問順序,可以寫成如下形式:

server_order_0:
    -
        - 127.0.0.1
        - 8050
    -
        - 10.0.1.1
        - 8050
    -
        - 10.0.2.1
        - 8050

server_order_1:
    -
        - 10.0.1.1
        - 8050
    -
        - 127.0.0.1
        - 8050
    -
        - 10.0.2.1
        - 8050

server_order_2:
    -
        - 10.0.2.1
        - 8050
    -
        - 10.0.1.1
        - 8050
    -
        - 127.0.0.1
        - 8050

利用錨點和引用,可以寫為下面的配置:

server0: &server0
    - 127.0.0.1
    - 8050

server1: &server1
    - 10.0.1.1
    - 8050

server2: &server2
    - 10.0.2.1
    - 8050    

server_order_0:
    -
        *server0
    -
        *server1
    -
        *server2

server_order_1:
    -
        *server1
    -
        *server0
    -
        *server2

server_order_2:
    -
        *server2
    -
        *server1
    -
        *server0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM