きみはねこみたいなにゃんにゃんなまほう

ねこもスクリプトをかくなり

Saltstack の highstate や low とは何なのか

最近 Saltstack を触っております。

デバッグがてらに state.show_ 系のコマンドを打つことが多いのですが似たようなコマンドが多くて初見ではちんぷんかんぷんなんですよね。

  • state.show_sls
  • state.show_low_sls
  • state.show_highstate
  • state.show_lowstate

この highlow といった用語はあからさまに Saltstack ドメインの言葉遣いなのですが、ではそれが意味するところとは何なのか、今回はそれを押さえてより理解度深く Slatstack を使えるようになろうと思います。

といっても公式のドキュメントの簡単な和訳や要約なので特に大したことはしてません。

State System Layers

State System Layers に挙げられている項目は上から順に Saltstack における State 系の概念のローレイヤーからのスタックになっているのでそれを順に見ていきたいと思います。

Function Call

  • State System における最もローレイヤーな要素
  • Slatstack における State の実行とは個々の State Function の実行と言える
  • pkg.installed などの関数の実行がこれに当たる

Low Chunk

  • YAML(JSON?) で書かれたデータ構造
  • Salt State Compiler のコンパイル結果がこれ(Low Chunk)の集積物になる
  • Function Call が「実行すること」だとすると Low Chunk は 「実行するとその Function Call が実行されるもの」 と言えそう(ややこしい)

Low State

  • Low Chunk が処理順に並べられたリスト
  • 推測混じりで言えば、ここまでは「どの環境のどのホストで」というものを 考慮しない 純粋なデータ構造・実装や処理のことを指していると思われる*1

High Data

  • SLS Files により構成される YAML として表されるデータ構造
  • SLS Files をまとめたもの、という説明にとどまっている
  • この時点では特に「何のためのもの」というところには触れられていない

SLS

  • SLS レイヤーは High Data の論理レイヤーであると(ちょっと意味が読み取れない)
    • 最終的にデータ構造さえ提供されればその生成過程は問わないとある
  • 用語として SLS Files と SLS Formula は区別したいらしい
    • かつては SLS は単体のファイルで構成されており SLS Formula は SLS Files とも呼ばれていた
    • 現在の SLS は Pillar の内容などが適用され動的に生成されるので SLS Formula と呼ぶのが良い
    • この説明の流れだと SLS Files は個々の *.sls ファイルを指すと考えればいいのだろうか

Highstate

  • SLS を読み込んでどの minion に何を実行させるべきかを判断する

Orchestrate

  • これは Salt の更に上位でやってくれとある

まとめ

ここまで読んで来た内容を今度は逆順におさらいしてみると...

  • Highstate とは各 minion ごとの Low State が集まったもの
  • Low State とは Low Chunk のリストで、Low Chunk とは個々の Function Call を行うためのデータ

と読み取れます。つまり当初気になっていた Slatstack 的な high/low の意味合いとしては

  • 細かい個々の State 管理の項目のことが low
  • 環境やグループなど minion ごとの設定を含めた全体の状態管理が high

...と呼ばれているのかな、という雰囲気はつかめたような気がします。

コマンドの解説を再度読んでみる

以上の前提知識をもとに改めて コマンドリファレンス を読んでみます。

  • state.show_highstate
    • salt master から highstate を取得し表示する
  • state.show_low_sls
    • SLS から Low Data 形式に落とし込まれたものを表示する
  • state.show_lowstate
    • 指定された minion に適用される Low Data を表示する
  • state.show_sls
    • master 上の指定された sls file の State Data を表示する
    • State Data ってなんだろう...

よく見たら high/low の違いと state/sls の違いの組み合わせなんですよね。手元に試せる環境がないので何も言えないのですが、まだ違いがよくわからないんですよね... また気が向いたら今度は触りながら確認していきたいです。

*1:わかりづらい例えをすれば、我々のプロジェクトではこの筆記具のことを「鉛筆」と呼びそれはこういう構造・性質を持っています、ということを言っているのみで、それが運用上どう使われているかはこの段階では触れられていない。