saltstackの日常使用(一)
10396 ワード
詳細な注意:http://www.mknight.cn/
インストール
salt-key
salt-keyコマンドはマスター上のすべての鍵を管理するために使用されます。マスターの鍵を一覧表示します。
disk.usage
cmd.runを使ってリモートでコマンドを実行して、cmdはモジュールで、runはcmdモジュールの一つの方法です。
pkg関数は、ローカルシステムのパケットマネージャを自動的に同じsalt関数にマッピングします。これは、pkg.installがRed Hatシステムに基づいてyumを使用し、Debianシステムにはapptを使用してパッケージをインストールするという意味です。普通マッチング 正則マッチングは-Eを使用し、--pcreは正則マッチング を行う。リストマッチング-L,--listは、ホストIDリストとしてフィルタリングされ、フォームはPythonのリストと似ています。すなわち、異なるホストID名はカンマ区切り を使用しています。 IPマッチング-S,--ipcidrは、制御されたホストのIPアドレスまたはIPサブネットワークに基づいて とマッチングする。
SLS(SaLt Stateファイルを表す)は、Salt Stateシステムの中核である。SLSは、システムの目標状態を記述し、シンプルなフォーマットのデータから構成される。これはしばしば配置管理と呼ばれる。
top.slas
top.slasは配置管理の入口ファイルです。すべてはここから始まります。masterホストでデフォルトは/srv/salt/ディレクトリ.top.ssはデフォルトでbaseタグから解析実行します。次のレベルは操作の目標です。正則、grainモジュール、またはグループ名でマッチングできます。次のレベルは実行するstateファイルです。拡張子は含まれません。作成/srv/salt/top.sms第一行は(ID declaration)タグ定義と呼ばれ、ここではインストールパッケージの名前として定義されている。注意:異なる発行版のパッケージの名前は違っています。例えば、fedoraの中でhttpdというカバンのDebian/Ubuntuの中でapache 2 といいます。第二行は状態定義と呼ばれ、ここで定義して使用する(pkg state module) 。第3行は関数定義と呼ばれ、ここではinstalled関数 を使用することを定義します。
最後に、端末でコマンドを実行して結果を見ることができます。
SLSファイル
なお、上記の例では、SLSファイルwebserver.slasを略してwebserverと呼ぶ。SLSファイルの名前空間には、以下のようないくつかの基本的なルールがある。
1、SLSファイルの拡張子.slasは省略される。(例えば.webserver.slasがwebserverになる)2、サブディレクトリがより良い組織になることができ、各サブディレクトリは一つの点で表されます。(例えば、webserver/init.slasを単にwebserverと呼ぶことができる)4、もし一つのディレクトリの下に同時にwebserver.slasとwebserver/init.smsが存在するならば、webserver/init.slasは無視され、SLSファイルの参照webserverはwebserver.slasの例だけ参照されます。
include
includeはあるstateファイル/srv/salt/apache.slasを含みます。
extedとincludeは共同で使用して、作用は修正して、あるいは拡張して引用するstateファイルのあるフィールド/srv/salt/apaache.ssです。
require:あるstateに依存して、このstateを実行する前に、先に依存のstateを実行して、依存は複数あります。まず依存を確認して、他のものを実行します。
環境変数
例:
state.highstate:これは全体のすべての環境であり、すべての状態が有効です。各環境のtop.slasを読み取り、すべてのsmsに有効です。
state.smsはどの環境を読み込むかを指定できます。
テンプレート
テンプレートを使用して、slasファイルをPythonのループ、判定などのロジックを使用できるように簡単にすることができます。例:
YAML文法
ルール1:インデント
YAMLは固定的なインデントスタイルを使ってデータ層の構造関係を表しています。Saltstackは各インデントレベルは2つのスペースで構成されています。必ずtabキーを使用してはいけません。
ルール二:コロン
YAML:mykey:mymyvalueは各コロンの後ろに必ずスペースがあります。(コロンで終わるとスペースがいらないです。ファイルのパスを示すテンプレートはスペースが必要ではありません。)
ルール三:短横線
リスト項目を表示するには、短いバーを使ってスペースを追加します。複数の項目は同じインデントレベルを使って同じリストの一部として使用します。
インストール
yum install salt-master
or
yum install salt-minion
起動systemctl start salt-master
or
/etc/init.d/salt-master start
基本コマンドsalt-key
salt-keyコマンドはマスター上のすべての鍵を管理するために使用されます。マスターの鍵を一覧表示します。
salt-key -L
salt-key-aは一つのminionの認証を受ける。salt-key -a minion.saltstack.com
未検証の鍵をすべて受け入れるsalt-key -A
test.pingは一つのminionが正常に接続されているか確認します。salt '*' test.ping
すべてのminionsを指す目標です。test.pingは、minion実行test.ping関数を教えます。このコマンドを実行した結果、マスターがすべてのminionsにステップ・pingを並行して実行するように指示し、結果を返します。これは本物のICMP pingではなく、簡単な関数でTrueに戻ります。test.pingを使って、一つのminionが正常に接続されているかを確認します。disk.usage
salt '*' disk.usage
network.interfacessalt '*' network.interfaces
cmd.runcmd.runを使ってリモートでコマンドを実行して、cmdはモジュールで、runはcmdモジュールの一つの方法です。
salt '*' cmd.run 'df -h'
ホームを見るsalt '*' cmd.run "grep salt /etc/hosts"
mq:
192.168.1.31 salt
owncloud:
192.168.1.31 salt
docker:
192.168.1.31 salt
dev.db:
192.168.1.31 salt
ロット修正hostssalt '*' cmd.run "sed -i 's/192.168.1.30/192.168.1.31/' /etc/hosts"
pkgpkg関数は、ローカルシステムのパケットマネージャを自動的に同じsalt関数にマッピングします。これは、pkg.installがRed Hatシステムに基づいてyumを使用し、Debianシステムにはapptを使用してパッケージをインストールするという意味です。
salt 'salt-minion' pkg.install vim
ホストにマッチ '*'
'minion_id'
salt -E '^stack-node\w+' cmd.run "free -m"
結果を返しますstack-node01:
total used free shared buffers cached
Mem: 1877 377 1499 0 27 223
-/+ buffers/cache: 126 1751
Swap: 4095 0 4095
stack-node02:
total used free shared buffers cached
Mem: 1877 377 1499 0 28 223
-/+ buffers/cache: 125 1751
Swap: 4095 0 4095
[root@stack-master ~]# salt -L 'stack-node01,stack-node02' cmd.run "free -m"
stack-node02:
total used free shared buffers cached
Mem: 1877 376 1501 0 28 223
-/+ buffers/cache: 123 1753
Swap: 4095 0 4095
stack-node01:
total used free shared buffers cached
Mem: 1877 378 1499 0 28 223
-/+ buffers/cache: 126 1751
Swap: 4095 0 4095
[root@stack-master ~]# salt -S 172.16.202.0/24 cmd.run "free -m"
stack-master:
total used free shared buffers cached
Mem: 1877 676 1201 0 30 225
-/+ buffers/cache: 420 1457
Swap: 4095 0 4095
stack-node01:
total used free shared buffers cached
Mem: 1877 378 1498 0 28 223
-/+ buffers/cache: 126 1751
Swap: 4095 0 4095
stack-node02:
total used free shared buffers cached
Mem: 1877 376 1500 0 28 223
-/+ buffers/cache: 123 1753
Swap: 4095 0 4095
設定管理SLS(SaLt Stateファイルを表す)は、Salt Stateシステムの中核である。SLSは、システムの目標状態を記述し、シンプルなフォーマットのデータから構成される。これはしばしば配置管理と呼ばれる。
top.slas
top.slasは配置管理の入口ファイルです。すべてはここから始まります。masterホストでデフォルトは/srv/salt/ディレクトリ.top.ssはデフォルトでbaseタグから解析実行します。次のレベルは操作の目標です。正則、grainモジュール、またはグループ名でマッチングできます。次のレベルは実行するstateファイルです。拡張子は含まれません。作成/srv/salt/top.sms
#
base:
'*':
- webserver
#
base:
group1:
- match: nodegroup
- webserver
#grain , - match: grain
base:
'os:Fedora':
- match: grain
- webserver
top.slasファイルを準備して、stateファイルを作成します。#/srv/salt/webserver.sls
apache: #
pkg: # state declaration
- installed # function declaration
最後に、端末でコマンドを実行して結果を見ることができます。
salt '*' state.highstate
または添付のtest=Trueパラメータテスト実行salt '*' state.highstate -v test=True
マスタがターゲットホストに対して命令を出してstate.highstatemモジュールを実行します。ターゲットホストはまずtop.slasをダウンロードして解析し、top.sms内のマッチングルール内の定義に従ってモジュールをダウンロードし、解析し、実行し、結果をmasterにフィードバックします。SLSファイル
なお、上記の例では、SLSファイルwebserver.slasを略してwebserverと呼ぶ。SLSファイルの名前空間には、以下のようないくつかの基本的なルールがある。
1、SLSファイルの拡張子.slasは省略される。(例えば.webserver.slasがwebserverになる)2、サブディレクトリがより良い組織になることができ、各サブディレクトリは一つの点で表されます。(例えば、webserver/init.slasを単にwebserverと呼ぶことができる)4、もし一つのディレクトリの下に同時にwebserver.slasとwebserver/init.smsが存在するならば、webserver/init.slasは無視され、SLSファイルの参照webserverはwebserver.slasの例だけ参照されます。
apache/init.sls
apache/httpd.conf
ssh/init.sls
ssh/server.sls
ssh/banner
ssh/ssh_config
ssh/sshd_config
これらのディレクトリを参照するserver.slasを作成します。server:
- apache
- ssh
- ...
stateの階層関係include
includeはあるstateファイル/srv/salt/apache.slasを含みます。
apache:
pkg:
- installed
service:
- running
- require:
- pkg: apache
includeを使って、新しく書く必要がなくて、stateファイルがあります。include:
apache
extedextedとincludeは共同で使用して、作用は修正して、あるいは拡張して引用するstateファイルのあるフィールド/srv/salt/apaache.ssです。
apache:
pkg:
- installed
service:
- running
- require:
- pkg: apache
extedデフォルトは、参照ファイルのあるフィールドの属性を置き換えるものです。簡単に言えば、先にロードして、部分フィールドを変更します。例/srv/salt/apaache-change.slas。include:
- apache
extend:
apache
pkg:
- name: vim
- installed
extedとwatch、またはrequireを結合して使うと、あるフィールドの属性が拡張されます。例:/srv/salt/apaache-custom.ssinclude:
- apache
extend:
apache
service:
- watch:
- file: /etc/redis.conf
stateの論理関係リストmatch: , match: grain match: nodegroup
require: state, state , state,
watch: state
order: require watch , order state order
stateの論理関係例require:あるstateに依存して、このstateを実行する前に、先に依存のstateを実行して、依存は複数あります。まず依存を確認して、他のものを実行します。
httpd: # maps to "name"
pkg:
- installed
file: # maps to State module filename
- managed: # maps to the managed function in the file State module
- name: /etc/httpd/conf/httpd.conf # one of many options passed to the manage function
- source: salt://httpd/httpd.conf
- require:
- pkg: httpd
ウォッチ:あるstateが変化した時にこのモジュールを実行します。ウォッチはrequire機能を備えているほか、状態に注目する機能が追加されました。前提条件に変化があるかどうかを確認します。redis:
pkg:
- latest
file.managed:
- source: salt://redis/redis.conf
- name: /etc/redis.conf
- require:
- pkg: redis
service.running:
- enable: True
- watch:
- file: /etc/redis.conf
- pkg: redis
order:requireとwatchより優先度が低いです。orderが指定しているstateはorderが指定していないより優先度が高いです。vim:
pkg.installed:
- order: 1
あるstateの最後の運行をしたいですが、lastを使ってもいいです。環境変数
例:
file_roots:
base:
- /srv/salt/
dev:
- /srv/salt/dev/services
- /srv/salt/dev/states
prod:
- /srv/salt/prod/services
- /srv/salt/prod/states
state.slasのデフォルトの動作環境はbase環境ですが、top.slas(top.slasは運転環境と運転が必要なslasを定義しています)は読み込まれていません。state.smsの公式文書については以下のように説明します。salt.modules.state.sls(mods, saltenv='base', test=None, exclude=None, queue=False, env=None,**kwargs)
ここでsaltenvとは運行環境を指し、デフォルトはベース環境です。state.highstate:これは全体のすべての環境であり、すべての状態が有効です。各環境のtop.slasを読み取り、すべてのsmsに有効です。
state.smsはどの環境を読み込むかを指定できます。
state.sls salt_env='prod' xxxx.sls
このxxxxx.slasはtop.slasに記録しなくてもいいです。テンプレート
テンプレートを使用して、slasファイルをPythonのループ、判定などのロジックを使用できるように簡単にすることができます。例:
{% for item in ['tmp','test'] %}
/opt/{{ item }}:
file.directory:
- user: root
- group: root
- mode: 755
- makedirs: True
{% endfor %}
httpd:
pkg.managed:
{% if grains['os'] == 'Ubuntu' %}
- name: apache2
{% elif grains['os'] == 'CentOS' %}
- name: httpd
{% endif %}
- installed
使用する手順は簡単です。1.File状態はtemplateパラメータ-templateを使用します。テンプレートファイルの中で{名前}3.File状態モジュールを使って変数リストを指定します。- defaults:
PORT:8080
例:[root@linux-node1 base]# cd /srv/salt/base/
[root@linux-node1 base]# vim dns.sls
/etc/resolv.conf:
file.managed:
- source: salt://files/resolv.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
DNS_SERVER: 10.0.0.2
[root@linux-node1 base]# vim files/resolv.conf
###hehe
nameserver {{ DNS_SERVER }}
[root@linux-node1 base]# salt '*' state.highstate
構文YAML文法
ルール1:インデント
YAMLは固定的なインデントスタイルを使ってデータ層の構造関係を表しています。Saltstackは各インデントレベルは2つのスペースで構成されています。必ずtabキーを使用してはいけません。
ルール二:コロン
YAML:mykey:mymyvalueは各コロンの後ろに必ずスペースがあります。(コロンで終わるとスペースがいらないです。ファイルのパスを示すテンプレートはスペースが必要ではありません。)
ルール三:短横線
リスト項目を表示するには、短いバーを使ってスペースを追加します。複数の項目は同じインデントレベルを使って同じリストの一部として使用します。
my_dictionary:
- list_value_one
- list_value_two
- list_value_three
詳細な注意:http://www.mknight.cn/