SaltStack穀物ガイド

穀類

塩は、管理対象システムに関する情報を取得するためのインタフェースを提供します。それは穀物塩のための情報を提供しますので、これは、穀物のインターフェースとして知られています。オペレーティングシステム、ドメイン名、IPアドレス、カーネル、オペレーティングシステムの種類、システムメモリ、および他の多くの属性に関連した穀物の情報。

塩の構成要素及びモジュールは自動的に正しい塩手先コマンドのパラメータに適切なシステムを得るために、粒子のインターフェースを利用することができます。

粒子は、比較的静的なデータであるが、システム情報が変更された場合(ネットワーク設定変更場合など)、またはカスタム穀物に割り当てられた新しい値は、そのデータがリフレッシュ粒子になる場合。

この資料では、GitHubの上でこの項目を参照することができます:粒を

注意:穀物は、統一された小文字です。例えば、FOOおよびFOOは、同じ粒子を指します。

LISTING粒

あなたは「を使用することができるgrains.lsモジュールが記載されている」粒がご利用いただけます:

salt '*' grains.ls

穀物やデータは「grains.items」チェックモジュールを使用することができます。

salt '*' grains.items

状態での粒を用いて

あなたは、単に状態の定義ファイルで、このように結晶粒内のデータを参照することができます{{ grains['key'] }}

ミニオンCONFIG中の粒子

需要は、設定ファイル中の粒子の手先を定義することができます。ただ、オプションの追加穀物それに渡された構成アイテムを:

grains:
  roles:
    - webserver
    - memcache
  deployment: datacenter4
  cabinet: 13
  cab_u: 14-15

その後、塩でサーバーの状態に、または国家マッチングシステム内のターゲットに特定のデータを取得することができます。あなたの上記の例では、補助的特性の展開に関する具体的なデータに基づいて、標的手先であることができる提供します。

/ ETC / SALT /穀物中の粒子

あなたは手先のコンフィギュレーション・ファイルの粒をカスタマイズしたくない、またはあなたがそれらを置くことができる場合/etc/salt/grainに。これらは、トップレベルの前の例と同じではなく、構成されているgrains:キー。

roles:
  - webserver
  - memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15

注意:/etc/salt/grainsあなたは子分の設定で同じ穀物を指定した場合は無視されます。

注意:穀物は、静的であり、それらは頻繁に変更していないので、彼らはあなたが更新するときにリフレッシュするためのイニシアチブを取る必要があります。:これは、呼び出すことによって行われsalt minion saltutil.refresh_modules、これを行います。

注:プロキシの手下などのカスタム粒を構成することができます。プロキシミニオン複数のプロセスが同じマシン上で実行することができますので、あなたが使用する必要があるため/etc/salt/proxy.d/<minion ID>/grainsミニオンIDインデックスファイルで。例えば、プロキシミニオンrouter1できる粒子の/etc/salt/proxy.d/router1/grains定義は、プロキシミニオン及びswitch7粒子を配置することが可能/etc/salt/proxy.d/switch7/です。

TOP FILE中の粒子を合わせます

手下が正しくファイルの柱やHighstate topfile粒を、設定された後、非常に効率的に使用することができます。たとえば、以下の構成:

'roles:webserver':
  - match: grain
  - state0

'roles:memcache':
  - match: grain
  - state1
  - state2

この例が機能するために、あなたは良い粒が手下を一致させるための役割を定義する必要があります。

穀物を書きます

ソルト・コード・モジュールのコア粒子のすべての「公開」機能を実行することにより(すなわち、アンダー機能を開始していないもの)は、所望のデータを取得するカスタム関数モジュール粒子、粒子と同様に、。穀物機能モジュールは、穀物の価値という辞書のキーは、穀物の名前であるPython辞書、各キーの値を返す必要があります。

穀物は、名前のカスタムモジュールに配置する必要があり_grains、サブディレクトリ、指定されたマスターの設定ファイルのサブディレクトリのfile_roots下に。デフォルトのパスです/srv/salt/_grains実行state.highstate時、または実行することによって、saltutil.sync_grainsまたはsaltutil.sync_all機能、モジュールは、カスタム粒の手下を配布します。

(上述のように)粒子モジュールは、データ・ディクショナリを返す必要があり製造が容易となります。例えば:

def yourfunction():
     # initialize a grains dictionary
     grains = {}
     # Some code for logic that sets grains like
     grains['yourcustomgrain'] = True
     grains['anothergrain'] = 'somevalue'
     return grains

関数の名前は、穀物のデータには影響しません、問題ではありません。キー/値の唯一のリターンは、データ中の粒子の一部となります。

CUSTOMの穀物を使用する場合

前に新しい穀物の定義では、何であるかの特性データを検討し、データの粒(主に)静的な型を覚えておいてください。

データが変更される可能性場合は、柱や実行モジュールを使用することを検討してください。それは、キー/値ペアの簡単なセットである場合、柱は良い試合です。あなたは、システムがプロセスに関する情報をコンパイルするコマンドを実行する必要がある場合は、そのモジュールの実装この情報は良いアイデアかもしれません。

topfile手下ファイルまたは塩CLIでのデータの場所として粒を使用してのベストプラクティス。穀物名とデータ構造は、複数のプラットフォーム、オペレーティングシステムやアプリケーションをサポートするように設計されなければなりません。また、サポートの参照データの神社テンプレート塩の柱を覚えているし、神社テンプレートのそれが利用できるようにするので、何も情報が粒内に配置されていない、実行モジュールから関数を呼び出します。例えば:

...
...
{{ salt['module.function_name']('argument_1', 'argument_2') }}
{{ pillar['my_pillar_key'] }}
...
...

警告:初めてのhighstateを実行した後、カスタム粒がファイルtopfile有効になります。アンダーhighstate用手先に最初に行うために、カスタム粒子はこのreator使用することが推奨され、有効である例を実装プロセスが場合手先カスタム粒子同期データを開始することを保証します。

LOADINGのCUSTOM粒

あなたは穀物データ作成を支援するためにサブルーチンを使用する場合は、穀物のサブルーチン名の前にアンダースコアを追加してください。これは、ロードされた穀物の機能に含まれているデータでは、最終的な粒子構造から結晶粒の塩を防ぐことができます。たとえば、このカスタム穀物ファイルを考えてみます。

#!/usr/bin/env python
def _my_custom_grain():
    my_grain = {'foo': 'bar', 'hello': 'world'}
    return my_grain


def main():
    # initialize a grains dictionary
    grains = {}
    grains['my_grains'] = _my_custom_grain()
    return grains

次のように、この例の出力は、次のとおりです。

# salt-call --local grains.items
local:
    ----------
    <Snipped for brevity>
    my_grains:
        ----------
        foo:
            bar
        hello:
            world

あなたが持っていない場合は、my_custom_grain関数の前にアンダースコアを追加するために、関数が二度塩によって項目出力に表示されます。一度のためのmy_custom_grainコール自体とのための1つのmainその関数の呼び出し:

# salt-call --local grains.items
local:
----------
    <Snipped for brevity>
    foo:
        bar
    <Snipped for brevity>
    hello:
        world
    <Snipped for brevity>
    my_grains:
        ----------
        foo:
            bar
        hello:
            world

PRECEDENCE

コア粒子は、粒をカスタマイズするためにオーバーライドすることができます。そこに自己粒を定義する方法はいくつかあるので、力の優先順位を定義するとき、彼らは心に留めておく必要がありますので。次の順序で:

  • コア粒。
  • の/ etc /塩/粒のカスタム粒。
  • の/ etc /塩/手先のカスタム粒。
  • 手下に同期_grainsディレクトリのカスタム穀物モジュール。

コア粒子を被覆手先に同期したときに後続の各は、任意のカスタム粒粒子モジュールの定義と同じ名前の前、従ってコア粒子を上書きします。同様に、から/etc/salt/minionコア粒子と粒カスタムモジュール粒を上書きし、_grains粒子が同じ名前の任意の粒をカバーします。

関数は、パラメータの粒を取る場合は、カスタム粒の場合、最初はそれが渡されますグレインをレンダリングします。粒の残りの部分は、任意の順序でレンダリングすることができますので、これだけの粒子は、コア粒に頼ることができます。これは2019.2.0リリースが追加されます。

粒の例

コアモジュールの穀物パッケージは主要な穀物データ塩手先の場所によってロードされ、それは穀物の書き方の例を提供します。

https://github.com/saltstack/salt/blob/develop/salt/grains/core.py

穀物を同期

呼び出し時に粒子データの同期は、様々な方法で達成することができるstate.highstate呼び出すことによって、(上述のように)、彼らは自動的に同期、またはされsaltutil.sync_grains、またはsaltutil.sync_all同期および手動機能をリロード。

注意:ときgrain_cache粒辞書メモリを構築する際にFalseに設定し、手先に保存されています。すべての手先の再起動または実行saltutil.refresh_grains時には、スクラッチ穀物の辞書から再構築されます。

おすすめ

転載: blog.csdn.net/watermelonbig/article/details/90735257