Saltstackコンポーネントの下で制御対象ホストの情報を収集するにはどうすればよいですか?

グレインとはグレイン
はSaltstackの最も重要なコンポーネントの1つです。グレインの機能は、制御対象ホストに関する基本情報を収集することです。これらの情報は通常、CPU、カーネル、オペレーティングシステム、仮想化などの静的データです。サーバー側この情報に基づいて柔軟にカスタマイズでき、管理者はこの情報を使用してさまざまなビジネスの設定をパーソナライズできます。公式に提供されているもの:穀物はさまざまな構成のさまざまなミニオンを区別するために使用され、ソルト ' 'は主に 'で実行されます'ホストの役割と一致します。

アプリケーションシナリオ
は、管理モジュールを構成する状態で使用されます

ミニオンと一致するためにターゲットで使用されます。たとえば、オペレーティングシステムで使用される-Gオプションと一致します。

情報クエリの場合、グレインは収集されたクライアントの詳細を保存します

CentOSディストリビューションホストは「host:{{grains ['xxx']}}」と一致します。例としてホストsaltstack_web1group_1(CentOS 6.5)を取り上げ、最後に「host:saltstack_web1group_1」を取得します。同時に、オペレーティングシステムのリリースバージョンに一致するコマンドラインはCentOSであり、制御された端は-Gパラメーターでフィルター処理できます。


[root@saltstack-master ~]# salt -G 'os:CentOS' test.ping
saltstack_web1group_1:
True
saltstack_web1group_2:
True

穀物の一般的な操作コマンド

ミニオンをカーネルバージョン2.6.32-504.el6.x86_64と照合し、コマンド「uname-a」を実行します


[root@saltstack-master ~]# salt -G 'kernelrelease:2.6.32-431.el6.x86_64' cmd.run 'uname -a'
saltstack_web1group_1:
Linux saltstack_web1group_1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
saltstack_web1group_2:
Linux saltstack_web1group_2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

すべてのミニオンの穀物アイテム情報を取得する


[root@saltstack-master ~]# salt '*' grains.ls
saltstack_web1group_1:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
- host
--------------忽略部分内容------------------

もちろん、運用リリースバージョンの取得など、ホストの個々のグレインデータを取得することもできます。


[root@saltstack-master ~]# salt 'saltstack_web1group_1' grains.item os
saltstack_web1group_1:
----------
os:
CentOS

グレインデータを定義する

グレインデータを定義する方法は2つあります。1つはミニオンで構成ファイルをカスタマイズする方法、もう1つはマスター拡張モジュールAPIを実装する方法です。違いは、モジュールがより柔軟で、Pythonプログラミングによって動的に定義できることです。構成ファイルは、相対的な固定キーと値にのみ適しています。


[root@saltstack-master ~]# salt 'saltstack_web1group_1' grains.items
saltstack_web1group_1:
----------
SSDs:
biosreleasedate:
05/19/2017
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
--------------忽略部分内容------------------

制御されたエンドホストのカスタマイズされたグレインデータ

SN2013-08-022などのSSH経由で制御対象ホスト(ミニオン)にログインします。構成ファイルのカスタマイズされたパスは/ etc / salt / minionで、パラメーターはdefault_include:minion.d / * confです。

ファイルを作成します[/etc/salt/minion.d/hostinfo.conf]


[root@saltstack_web1group_1 ~]# cd /etc/salt/minion.d/
[root@saltstack_web1group_1 minion.d]# vim hostinfo.conf
grains:
roles:
- webserver
- memcache
deployment: datacenter4
cabinet: 14
[root@saltstack_web1group_1 minion.d]# service salt-minion restart
Stopping salt-minion daemon: [确定]
Starting salt-minion daemon: [确定]

ミニオンサービスを再起動し、マスターで検証結果を実行します:salt'saltstack_web1group_1'grains.itemrolesデプロイメントキャビネット、構成されたキーと値を確認します。


[root@saltstack-master ~]# salt 'saltstack_web1group_1' grains.item roles deployment cabinet
saltstack_web1group_1:
----------
cabinet:
14
deployment:
datacenter4
roles:
- webserver
- memcache

主制御端子拡張モジュール用にカスタマイズされた穀物データ

最初にメインコントロールエンドでPythonコードを記述し、次にPythonファイルをコントロールエンドに同期し、最後に更新して有効にします(つまり、Pythonソースコードファイルをバイトコードpycにコンパイルします)。マスター制御端末のベースディレクトリの下に_grainsディレクトリを作成し(/ etc / salt / master構成ファイルのfile_roots項目を参照、デフォルトの基本構成は/ srv / salt)、install -d / srv / salt / _grainsを実行します。コードの記述を開始するには、リアルタイムで制御されたホストシステムで許可されているオープンファイルの最大数の詳細データを取得します(ulimit-n)。


[root@saltstack-master ~]# install -d /srv/salt/_grains
[root@saltstack-master ~]# cd /srv/salt/_grains
[root@saltstack-master _grains]# vim grains_openfile.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os,sys,commands

#定义一个获取最大打开文件数的函数,函数名称没有要求,符合python函数命名规则即可
def Grains_openfile():
'''
return os max open file of grains value
'''
grains = {} #初始化一个字典,变量名一定要用grains,以便Saltstack识别

_open_file=65535 #初始化一个默认值

try:
getulimit = commands.getstatusoutput('source /etc/profile;ulimit -n')
except Exception,e:
pass

if getulimit[0]==0:
_open_file=int(getulimit[1])
grains['max_open_file'] = _open_file #将获取的ulimit -n的结果进行赋值,其中'max_open_file'就是grains项,——open_file就是grains的值
return grains

grains_openfile()は、開いているファイルの最大数を取得する関数を定義します。関数名に要件はなく、Python関数の命名規則に準拠するだけで済みます。

穀物= {}穀物辞書を初期化します。saltstackが認識できるように、変数名は穀物を使用する必要があります

grains ['max_open_file'] = _ open_fileは、取得したLinux ulimit-nの結果値をgrains ['max_open_file']に割り当てます。ここで、「max_open_file」はグレインのアイテムであり、_open_fileはグレインの値です。

ホスト上の同期モジュール:salt'saltstack_web1group_1'saltutil.sync_grainsまたはsalt'saltstack_web1group_1 'saltutil.sync_all、この時点で、ファイルはホストホストの下のディレクトリに同期されています。


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' saltutil.sync_all
saltstack_web1group_1:
----------
beacons:
grains:
- grains.grains_openfile
modules:
output:
renderers:
returners:
sdb:
states:
utils:
[root@saltstack_web1group_1 minion.d]# ll /var/cache/salt/minion/extmods/grains/
总用量 4
-rw-------. 1 root root 774 3月 20 16:36 grains_openfile.py
[root@saltstack_web1group_1 minion.d]# ll /var/cache/salt/minion/files/base/_grains/
总用量 4
-rw-------. 1 root root 774 3月 20 16:36 grains_openfile.py

/ var / cache / salt / minion / extmods / grains /

拡張モジュールファイルの最終的な保存場所については、モジュールを更新した後、バイトコードpycが同じパスの下に生成されます。/var/cache/salt/minion/files/base/_grains/は一時的な保存場所です。

モジュールsalt'saltstack_web1group_1'sys.reload_modulesを更新します

/ var / cache / salt / minion / extmods / grains /の場所にあるコンパイル済みのバイトコードファイルgrains_openfile.pyはPython実行可能形式です。


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' sys.reload_modules
saltstack_web1group_1:
True
[root@saltstack_web1group_1 minion.d]# ll /var/cache/salt/minion/extmods/grains/
总用量 4
-rw-------. 1 root root 774 3月 20 16:36 grains_openfile.py

検証結果は、穀物情報が主制御端末で表示できることです。

salt'saltstack_web1group_1'grains.item max_open_fileを実行すると、
以前にカスタマイズされたホストグレイン情報である「max_open_file:65535」が表示されます。


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' grains.item max_open_file
saltstack_web1group_1:
----------
max_open_file: 65535

おすすめ

転載: blog.51cto.com/15067236/2607516