ansibleベース(1)

私の名前彼張、貪欲な欲望。資格LINUXの運用・保守エンジニアは、LINUXの勉強と研究に焦点を当て、仏教を愛し、実行している、中小企業のウェブサイトの運用・保守を担当していました。
個人ブログ:チュアンSongzhenの
作者マイクロ手紙:zhanghe15069028807、あなたは一つです。

まず、基本的な概念

それは何ansible?

ansibleは、一括設定および管理ソフトウェアを呼び出すことにより、SSHプロトコルです。

なぜansible?

我々は2つのだけのホストを持っている場合は、ansible使用する必要はありませんが、私たちは統一された構成を変更するために、50台の以上のホストを持っている場合は、駅のワークロードを変更あまりにも素晴らしいですが、我々は統一され、ansibleツールを使用することができます50台のホストが同時に接続し、設定を変更大幅に操作および保守要員の効率を向上させる、繰り返し動作を減少させる、唯一の操作を必要とします。

何をansibleを行うことができますか?

  • バッチコマンド
  • バッチ同期プロファイル
  • バッチコードの展開

ansible機能と利点

  • ただ、サービスの使用を開始していない、SSHの正常な動作を保証するために、制御ターミナルansible、制御最後にソフトウェアをインストールします。

  • 再読み込みせずに設定を変更した後、直ちに有効になります。

  • コマンドモジュールは、同等のansibleで、同等のスクリプトをプレイブック。

ansible建築の構図

  • ホストインベントリ:ホストのリスト

  • 脚本:タスクスクリプト

  • コアモジュール:コアモジュール

  • プラグ接続:プラグインcommection

ansible実装プロセス

  1. ansibleスクリプトで脚本を読んで、このスクリプトは、タスクがそのホスト上で実行されるものを記録します。
  2. ansibleホストリストが実行するホストを見つけ、その後、(異なる機能をコマンドに相当)は、特定のモジュールを呼び出します
  3. 次に、接続プラグによって接続されたホストを、対応するタスクリストを送ります。
  4. 最後に、制御エンドホストは、シェルコマンドの実行コストを解析するタスクに発行されます。

どのようにansibleを使用するには?

ansible使用方法については、それは、このセクションの嘘の主な内容です。

salstackのとツールのansible同じタイプの、より多くの有名なケース

第二に、基本的な操作

インストール

インストールする前に準備ができてEPELソース:

yum -y install ansible
ansible --version
ansible 2.9.1

公開キーを押します

ansibleデフォルトの制御端子接続されているの公開鍵を使用することで、最初の使用前にansible ansible公開鍵は、三の制御端子を押し込みます。

制御側の数が少ない場合には、制御終了の大きな量は、公開鍵をプッシュするスクリプトを使用する場合は、手動で、公開キーを押すことができます。エンド制御される3つのホストが現在ありません

  • 192.168.80.62
  • 192.168.80.63
  • 192.168.80.64

ステップ手動プッシュ公開鍵:

  1. よるマスターansible ssh-keygen鍵のペアを生成するための.ssh / authorized_keysファイルの下には、自動的にホームディレクトリに保存されます

  2. その後はssh-コピー-idには、公開鍵が自動的に宛先ユーザのホームディレクトリの.sshの下に保存されますホストにアップロード/

//生成公钥,一路回车
[root@ansible ~]# ssh-keygen   
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GS0Cof8VpoMGy9QfS9ICN1ZFrpwWHo5ED9zrPYBSZlo root@ansible
The key's randomart image is:
+---[RSA 2048]----+
|  ..O+.oo        |
|   BE*.. .       |
|  +*=.O.* .      |
| oo=.@o@ =       |
|  o.=.%oS        |
|   . o.oo        |
|      .  .       |
|                 |
|                 |
+----[SHA256]-----+

//发现有两个密钥
[root@ansible .ssh]# ls
id_rsa  id_rsa.pub

//这样就可以推送了,交互式输入yes和被控端的密码
[root@ansible ~]# ssh-copy-id 192.168.80.62 

スクリプトは、公開鍵の手順を押します:

//找个文件把受控端IP和密码写好,中间用空格隔开
[root@ansible ~]# cat host
192.168.80.62 cba-123
192.168.80.63 cba-123
192.168.80.64 cba-123

[root@ansible ~]# vim push_pub_key.sh 
#!/bin/bash
#先定义一个函数expect
expect () {
/usr/bin/expect <<-EOF
spawn ssh-copy-id root@$ADDR
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send $PASSWD\r }
}
expect eof
EOF
}           #函数在此结束

SERVERHOST=./host

for ADDR in `cut -d" " -f1 $SERVERHOST`;do  #这一cut把所有的ip全都列出来了
PASSWD=$(grep $ADDR $SERVERHOST | cut -d" " -f2)
test -f ~/.ssh/id_rsa
    if [ $? -ne 0 ];then
        ssh-keygen -P "" -f ~/.ssh/id_rsa &>/dev/null
        expect
        echo "key already send!"
    else
        expect
        echo "key already send!!"
    fi
done

この章では、程度なのでansibleので、shellあなたは具体的な説明を参照したい場合は、スクリプトは、あまり説明することはありませんが、私のブログのリンク、をクリックしてくださいポータル

ホストリストを定義します。

ホストのいわゆるリストの定義はansibleプログラムを伝えることです、あなたが接続したいホストIPが、あなたはまた、ホスト名を使用することができ、サポートグループ、

[root@ansible ~]# vim /etc/ansible/hosts
[test]
192.168.80.62
192.168.80.63
192.168.80.64
//列出test组的主机
[root@ansible ~]# ansible test --list-host
  hosts (3):
    192.168.80.62
    192.168.80.63
    192.168.80.64
    
//列出所有主机
[root@ansible ~]# ansible all --list-host
  hosts (3):
    192.168.80.62
    192.168.80.63
    192.168.80.64

株式市場は、公共プッシュしている間、あなたはモジュールのpingで使用できるかどうかをテストするホストのリストを定義してきた、このモジュール間のpingは、ネットワークが、唯一ただ、接続テストansibleと制御側ではありません。

//ansible后面直接跟组名,-m是指定模块,这里我们使用ping模块,测试成功,全是绿色的。
[root@ansible ~]# ansible test -m ping
192.168.80.62 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.80.63 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.80.64 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
  • グリーンは、管理対象ホストが変更されていない表し
  • 黄色は変更検出された管理対象ホストを表し、
  • その理由を参照してくださいに失敗し、プロンプトの注意をレッド

アドホック(リモート・ラン)

アドホックとは何ですか?

実際には、一時的な実行、オーバーを実行すると、保存されませんされているホストコマンドのリモート実行ホストのリストの内部。

アドホック利用シナリオ

プロセスが複数のマシン上で起動されている場合たとえば、参照します

アドホックフォーマット

ansible <グループ名> -m <モジュール名> -a <特定のコマンド>

モジュールが書き込むことはできません、デフォルトではと、コマンドでansible test -m command -a 'hostname'次のような形式に省略することができます。

//ansible后面直接写组名,-a 后面加上单引号,把命令引起来就可以了
[root@ansible ~]# ansible test -a 'hostname'
192.168.80.64 | CHANGED | rc=0 >>
backup

192.168.80.63 | CHANGED | rc=0 >>
nfs

192.168.80.62 | CHANGED | rc=0 >>
nginx

欠点は、アドホック支持パイプではなく、アンパサンド、エラーで1したい場合は、以下のように、それは、パイプライン、利用シェルモジュールをサポートしています

//在command模块中使用管道会报错,红色
[root@ansible ~]# ansible test -a 'df -h | head -2'
192.168.80.64 | FAILED | rc=1 >>
df: invalid option -- '2'
Try 'df --help' for more information.non-zero return code

192.168.80.62 | FAILED | rc=1 >>
df: invalid option -- '2'
Try 'df --help' for more information.non-zero return code

192.168.80.63 | FAILED | rc=1 >>
df: invalid option -- '2'
Try 'df --help' for more information.non-zero return code

//使用shell模块就好了
[root@ansible ~]# ansible test -m shell -a 'df -h | head -2'
192.168.80.62 | CHANGED | rc=0 >>
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   45G  1.7G   44G   4% /

192.168.80.63 | CHANGED | rc=0 >>
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   45G  1.7G   44G   4% /

192.168.80.64 | CHANGED | rc=0 >>
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   45G  1.7G   44G   4% /

シェルモジュールは普遍的で、その結果、我々は単に、なぜ他のモジュールからそれを学ぶ必要があり、ライン上の唯一のシェルモジュールを学習することはありませんことを、実行することができますか?どのような他のシェルモジュールの状態に関係なく、コマンドは他のモジュールは、他の現在の状態が何であるかを決定するために判断する一方の状態の他の側面は、我々が望むものであるならば、それは実行されない、お互いに一度実行する必要があるので、そうでない場合は実装上、良いので、我々はのは、例を挙げてみましょう:

[root@ansible ~]# ansible test -m shell -a 'yum -y install vim'

他のために上記のコマンド、あなたは黄色の表示を行います回数に関係なく、そして黄色はなく、シェルモジュールによって、実際には、唯一の最初のバックが繰り返される変更は、ある、緑である必要があり、初めて間違いなく除き、変更されました互いの状態を判断し、我々は特別なモジュールのインストール結果を使用している場合、我々はなりたい、制御端末はVimをインストールされている場合は以下のように、緑に変更することはしないように、インストールを実行しません。

[root@web1 ~]# ansible-doc yum    #找到帮助示例学习一下yum模块的使用
EXAMPLES:

- name: install the latest version of Apache   #将这个安装apache的写法转换成临时命令的写法
  yum:
    name: httpd    #模块是httpd
    state: latest  #方法是latest(更新),absent(移除),present(安装)
    
[root@ansible ~]# ansible test -m yum -a 'name=vim state=present'

おすすめ

転載: www.cnblogs.com/yizhangheka/p/12111191.html
おすすめ