1

追加的な方法でアンカーを使用しようとすると、次の YAML コードは機能しませんが、何をしたいかを説明できます

  endpoint:
    data.updates.index.name: &UPDATES-INDEX-NAME "data-updates"
    meta.data.type.name: &DATA-TYPE-NAME "meta-data"
    last.run.type.name: &RUN-TYPE-NAME "lastrun"
    search.ctx: *UPDATES-INDEX-NAME "/" *DATA-TYPE-NAME "/_search"
    search.lastrun: *UPDATES-INDEX-NAME "/" *RUN-TYPE-NAME "/_search"
    update.lastrun: *UPDATES-INDEX-NAME "/" *RUN-TYPE-NAME "/"

a1: &anchor1 "hello" a2: &anchor2 "moon" プロパティ: *anchor1 "-" *anchor2

プロパティは「hello-moon」を生成する必要があります。それはまったく可能ですか? アンカーの代わりに ${} も使用してみました

4

1 に答える 1

0

これは YAML では不可能です。アンカー/エイリアス機能は、式内で値を再利用するためではなく、循環データ構造をシリアル化するために設計されました。YAML には式がありません (ただし、!!mergeYAML 1.1 のタグは古く、ここでは役に立ちません)。ロード中またはロード後に、データに対して実行するすべての操作を実行する必要があります。

それを行う可能な方法:

endpoint:
  data.updates.index.name: "data-updates"
  meta.data.type.name: "meta-data"
  last.run.type.name: "lastrun"
  search.ctx: "{{data.updates.index.name}}/{{meta.data.type.name}}/_search"
  search.lastrun: "{{data.updates.index.name}}/{{last.run.type.name}}/_search"
  update.lastrun: "{{data.updates.index.name}}/{{last.run.type.name}}/"

ご覧のとおり、YAML 以外のマークアップ (この場合は口ひげのようなもの) をプレースホルダーとして使用しました。プレースホルダーを適切なコンテンツに置き換えるには、ロード後にデータを後処理する必要があります。

于 2016-12-13T15:25:46.280 に答える