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