ansible-palybookシナリオ
6621 ワード
1 ansible基礎知識部分補足
1.1 ansibleソフトウェアの特徴:
・ロット管理が可能
・一括導入が可能
・ad-hoc(一括実行コマンド)---一時的な操作
ansible clsn -m command -a "hostname"
・シナリオ作成-スクリプト(playbook)---重複操作
1.2 ansibleコア機能:
pyYAML-----ansibleシナリオ作成に使用する言語フォーマット(saltstack---python)
rsync-ini構文sersync-xml構文ansible-pyYAML構文
paramiko---リモート接続とデータ転送
Jinja 2-----ansibleを記述するためのテンプレート情報
2 ansibleシナリオ作成規則説明
2.1 pyYAML構文規則:
ルール1:インデント
yamlは固定的なインデントスタイルを使用してデータ層構造関係を表し、Saltstackは各インデントレベルが2つのスペースで構成される必要がある.必ずtabキーは使用できません
注意:yamlファイルを作成すると、キーボードにtabがあることを忘れます.
ルール2:コロン
CMD="echo"
yaml:
mykey:
各コロンの後ろには必ずスペースが必要です(コロンで終わるにはスペースは必要ありません.ファイルパスのテンプレートにスペースは必要ありません).
ルール3:短横線
リスト・アイテムを表すには、短い横棒にスペースを追加します.複数のアイテムは、同じリストの一部として同じインデントレベルを使用します.
コアルール:スペースを有効に利用してシナリオの作成を行い、シナリオの作成はtabをサポートしない
3シナリオ書式
### ,
- hosts: all ansible all -m command -a "echo hello clsn linux"
シナリオ作成コンテンツ拡張:シナリオタスク定義名
- hosts: 172.16.1.7
3.1シナリオ形式の例
[root@m01 ansible-playbook]# vim rsync_sever.yml
- hosts: 172.16.1.41
tasks:
- name: install rsync
yum: name=rsync state=installed
4シナリオ作成後のチェック方法
01:ansible-playbook --syntax-check 01.yml
---シナリオ構成情報の構文チェックを行う
02:ansible-playbook -C 01.yml
---シミュレーションシナリオ実行(リハーサル)
4.1文法検査
[root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml
playbook: 01.yml
4.2シミュレーションシナリオ実行
[root@m01 ansible-playbook]# ansible-playbook -C 01.yml
PLAY [all] ****************************************************************
TASK [Gathering Facts] ****************************************************
ok: [172.16.1.41]
ok: [172.16.1.8]
ok: [172.16.1.31]
TASK [cron] ***************************************************************
ok: [172.16.1.8]
ok: [172.16.1.41]
ok: [172.16.1.31]
PLAY RECAP ****************************************************************
172.16.1.31 : ok=2 changed=0 unreachable=0 failed=0
172.16.1.41 : ok=2 changed=0 unreachable=0 failed=0
172.16.1.8 : ok=2 changed=0 unreachable=0 failed=0
5シナリオ例
5.1シナリオ作成内容拡張:シナリオタスク作成複数タスク
- hosts: all
tasks:
- name: restart-network
cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
- name: sync time
cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
5.2シナリオ作成内容拡張:シナリオタスク作成複数ホスト
- hosts: 172.16.1.7
tasks:
- name: restart-network
cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
- name: sync time
cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
- hosts: 172.16.1.31
tasks:
- name: show ip addr to file
shell: echo $(hostname -i) >> /tmp/ip.txt
6シナリオ作成方式
01マルチホストシングルタスク作成方式
02マルチホストマルチタスク作成方式
03異なるホストマルチタスク作成方式
よくあるエラー
1 ansibleシナリオ作成の考え方を間違える
1.ansible-playbookの作成、文法検査と模擬テストの実行
2.シナリオを開き、異常問題の原因を特定し、シナリオ内のコンテンツ変換コマンドを1回実行する
1
2
cron
: name=clsn64 minute=ee hour=03 job=
'/bin/sh /server/scripts/test.sh &>/dev/null'
ansible clsn -m
cron
-a "name=clsn64 minute=00 hour=03 job='
/bin/sh
/server/scripts/test
.sh &>
/dev/null
3.パラメータのスクリプトファイルをリモート糞務器に送り、リモートサーバでローカルにスクリプトsh-x testを実行する.sh
説明:ansible実行時、1に-vvvを加えてansible詳細実行手順を表示し、異常原因を特定することもできます!
1.1エラーロジック
01.シナリオ実行中のエラー
02.シナリオの内容をansibleコマンドに変換して実行
ansible clsn -m yum -a "name=rsync state=installed"
03.ansibleサーバ上で実行するコマンドを管理対象ホスト上で実行する
yum install -y rsync
2 ansibleが正常に使用できない
2.1制御されたエンドroot@nottyプロセスは常に存在します
[root@backup ~]# ps -ef|grep sshd
root 35274 1 0 15:25 ? 00:00:00 /usr/sbin/sshd
root 37004 35274 0 16:23 ? 00:00:00 sshd: root@pts/2
root 37062 35274 0 16:55 ? 00:00:00 sshd: root@notty
root 37154 37006 0 16:55 pts/2 00:00:00 grep --color=auto sshd
2.2解決方法
まず、このプロセスを実行します.
kill pid
2.3次にansibleの-vvvvパラメータを使用して実行されたエラー情報を表示する
Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc
META: ran handlers
Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
<172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
<172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
……
どこでエラーが発生しましたか.
2.4可能なエラー
/etc/ssh/sshd_configファイルの132番目の動作が空で、sftpが接続できなくなり、エラーが発生しました.
1
133 Subsystem
sftp
/usr/libexec/openssh/sftp-server
3よくある質問2:
1
2
3
[root@m01 ~]
# ansible -k 172.16.1.51 -m ping
SSH password:
[WARNING]: No hosts matched, nothing to
do
原因分析:
ansibleのhostsファイルには、対応するホストアドレス情報が構成されていません.
3.1よくある質問3:
1
2
3
4
5
6
# ansible -k 172.16.1.51 -m ping
SSH password:
172.16.1.51|FAILED! => {
"failed"
:
true
,
"msg"
:
"Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}
原因分析:
制御側の指紋情報がないのでknown_hostsファイル
ブログリンクの転載:https://www.cnblogs.com/clsn/p/7743792.html#auto_id_69
転載先:https://www.cnblogs.com/cpw6/p/10569888.html