全部めんどいけんAnsibleで自動化しよ?❤️

IT

みなさま、こんばんわ。梶松です。

タスクに追われ、更新が不定期ですが、梶松は元気です。

最近は7payの1件などで世間は大騒ぎですね。

この件に限ったことではありませんが、セキュリティは仕事もプライベートも意識していきたいものです。

さて、前回の”pythonでsambaにアクセス!”の記事から24時間も立ってませんが、今回はansibleという構成管理ツールを使用して自動化を実施していきます。

Ansibleについて

Ansibleとは?

なんてググれば星の数ほど記事が出てきますが、簡単にどんなものか記載します

突然ですが、大量のサーバ群に対して多量の作業を短時間で実施する必要が出た場合、どうしますか?

量も時間的制約も関係ねぇ、気合いで乗り切るぜ!と人力で実施します?

その場合オペミスはもちろん、作業にかける時間等も懸念点としてあげられます。

もちろん、俺はエンジニアだぜ?スクリプトをサクッと書いて終わらせるぜ〜!ってのも良いかと思います

しかし、人によって記載方法がまちまちで見にくかったり、書き方によっては2度目以降の実施時にエラーが出たりなどが考えられます。

今回取り上げているAnsibleは、インフラ構築、運用などで膨大な作業や複雑な作業を自動で実施してくれる超絶便利で且つオープンソースな自動化のためのツールなんです。

同様の構成管理ツールではChef,Itamaeなどなど有名なツールも数多くありますが、Rubyの知識が必要であったりエージェントのインストールが必要となったり、と少し取っ付きにくいのが個人的な印象でした。それ故にシンプルで取っ付きやすそうなAnsibleを使用してみたいなぁと思った次第です。

環境

OS: MacOS Mojave 10.14.5

Virtual box: 6.0.8

Vagrant: 2.2.5

手順

先ずはAnsibleを使用する仮想マシンを作成します。今回は以下の3台を使用していきたいと思います。(記載はホスト名です)

  •   Ansible実行: ansible-master
  •   Ansible実行対象: CentOS7_1,CentOS7_2

virtualboxインストール

https://www.virtualbox.org/wiki/Download

から最新版をダウンロードしてインストーラーを実行します

 

vagrantインストール

仮想マシン作成にあたりvagrantを使用します

https://www.vagrantup.com/downloads.html

から最新版をダウンロードしてインストーラーを実行します`f

下記コマンドでインストール可否を確認(ついでに意図したバージョンであることを確認)


# vagrant --version

vagrant box追加

  • 仮想マシンのイメージ追加

今回はCentOS7のイメージを使用するため

https://app.vagrantup.com/centos/boxes/7

上記の公式のイメージを使用します

  • イメージ確認

# vagrant box list

There are no installed boxes! Use `vagrant box add` to add some.

boxのイメージがまだ存在しないことが確認できる

 

  • CentOS7のイメージを追加

# vagrant box add centos/7


==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3


“Enter your choice”では、環境に合わせて選択
今回はvirtualboxを用いているので”3″を選択

ここからちょっと時間がかかる…


==> box: Adding box 'centos/7' (v1902.01) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1902.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1902.01) for 'virtualbox'!

Successfullyと出ればOK

 

  • boxが追加されているか確認

# vagrant box list
centos/7 (virtualbox, 1902.01)

“centos/7 (virtualbox, 1902.01)”と表示されているので追加されている

 

作業用ディレクトリ作成


# mkdir -p vagrant/centos7

# cd vagrant/centos7

 

Vagrant初期設定


# vagrant init centos/7

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

# ls -l

“# vagrant init”の引数として先ほど追加したイメージ名を指定する。

完了後、どうディレクトリ内に”Vagrantfile”が存在すること

 

仮想マシン起動


# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos/7'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/7' version '1902.01' is up to date...
==> default: Setting the name of the VM: centos7_default_1561996091128_27776
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Rsyncing folder: /Users/***/***/vagrant/centos7/ => /vagrant

 

仮想マシンにSSH


# vagrant ssh
Last login: Mon Jul 1 15:49:16 2019 from 10.0.2.2
[vagrant@localhost ~]$

できてやがる。。。vagrant初めて使用したけどマジ便利

ほぼCLIで完結してるのがとても良き

GUI操作は蕁麻疹が出る

 

仮想マシン情報変更

  • Vagrantfile修正

# vi Vagrantfile

Vagrantfileに仮想マシンの設定を記載しているのでそちらをいじってあげれば変更できる

 


config.vm.hostname = "hogehoge"

をファイル内に追記(“hogehoge”箇所に設定したいホスト名を記載)

 

ここで問題発生。実は”_”を入れたホスト名を設定し仮想マシンを実行しようとすると


# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The hostname set for the VM should only contain letters, numbers,
hyphens or dots. It cannot start with a hyphen or dot.

と怒られる。そのため”_”を含まないホスト名に変更する必要あり

 

  • ホスト名確認

# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'centos/7' version '1902.01' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) p2p0
3) awdl0
4) en1: Thunderbolt 1
5) en2: Thunderbolt 2
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'centos/7' version '1902.01' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) p2p0
3) awdl0
4) en1: Thunderbolt 1
5) en2: Thunderbolt 2
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
    default: Which interface should the network bridge to? 1
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: bridged
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Rsyncing folder: /Users/***/***/vagrant/centos7/ => /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

bridge insterfaceは”1″を選択

 


[vagrant@ansible-master ~]$ hostname
ansible-master

 

  • IP確認

[vagrant@ansible-master ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:26:10:60 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 86388sec preferred_lft 86388sec
    inet6 fe80::5054:ff:fe26:1060/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:64:85:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.36/24 brd 192.168.11.255 scope global noprefixroute dynamic eth1
       valid_lft 172788sec preferred_lft 172788sec
    inet6 fe80::a00:27ff:fe64:8577/64 scope link
       valid_lft forever preferred_lft forever

意図したセグメント内から割り当たっていることを確認

 

 

今回は3台必要ですが、やり方は変わらないので割愛いたします。残り2台も同様に実施してください。

 

Ansibleインストール

本題のAnsibleのお出ましです

ここでもしAnsible実行ホストが上がっていなかった場合、上げてください

ここからは仮想マシンにログインしている想定で進めていきます

 

  • インストール済みパッケージのアップデート

# yum -y update

 

  • EPELインストール

# yum -y install epel-release

EPELリポジトリ: CentOS標準のリポジトリでは提供されていないパッケージをyumコマンドでインストールすることを可能にするリポジトリ

 

  • Ansbileインストール

# yum -y install ansible

 

  • Ansibleバージョン確認

# ansible --version
ansible 2.8.1
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

 

  • Ansibleディレクトリ確認

# ll /etc/ansible/
total 24
-rw-r--r--. 1 root root 19980 Jun 9 13:11 ansible.cfg
-rw-r--r--. 1 root root 1016 Jun 9 13:11 hosts
drwxr-xr-x. 2 root root 6 Jun 9 13:11 roles

各ファイルについて説明しますが、その前にAnsibleの構成要素について簡単に説明


 

  1. インベントリ
    1. ansbible実行対象ノード情報を記述する。インベントリをもとに対象を決定。実行時に”-i”オプションを付与することで、独自で作成した(/etc/ansible/hostsではないファイル)インベントリファイルを読み込むことができる。
  2. Playbook
    1. 何を実施するかをyamlで定義。Playbookをもとに実施内容を決定。Playbookを使用せずに実施するアドホックモードと言われるモードでも実行可能。
  3. モジュール
    1. Ansibleがよくある作業を部品化したもの。標準で2000くらいのモジュールがあるらしい…この部品を使用して対象ホストに対して作業実施する

 


各ファイルについて

  • ansible.cfg
    • ansible設定ファイル
  • hosts
    • インベントリファイル
  • roles
    • playbookで読み込むモジュール(MW単位で分割し読み込むのが一般的みたい)。playbookを再利用しやすくするための機能
      • 今回は使用しない

 

インベントリ記載

とりあえずlocalhostで実施するため、以下の内容を記載。(一番下に追記)


# vi hosts

[localhost]
127.0.0.1

 

playbook記載

処理したい内容をyamlファイルとして記載する

今回は試しに”sl”コマンドのインストールを実施する

  • 
    # sl
    -bash: sl: command not found
    
    

    今は存在しないこと確認

    # vi sl_install.yml
    # cat sl_install.yml
    - name: Ansible TEST
      hosts: localhost
      connection: local
      tasks:
        - name: install sl
          yum: name=sl
    
    

 

記載内容については以下

  • name: 任意の名前
  • host: 対象サーバを記載
  • connection: ローカルに対して実行する際に必須。記載がなければ対象サーバにsshするためローカルに対して実施する場合失敗する
  • tasks: 実施するタスクを記載する
  • name: タスクの名前
  • yum: yumモジュールを使用する

 

playbook実行

plyabook実行の際は”ansible-playbookコマンドを使用する。引数に先ほど作成したplaybookを記載

 

  • コマンド実行

# ansible-playbook sl_install.yml

PLAY [sl install] ***********************************************************************************

TASK [Gathering Facts] ******************************************************************************
ok: [127.0.0.1]

TASK [install sl] ***********************************************************************************
changed: [127.0.0.1]

PLAY RECAP ******************************************************************************************
127.0.0.1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

 

  • コマンド確認

# sl
                                                          (@@) (  ) (@)  ( )  @@    ()    @     O     @     O      @
                                                     (   )
                                                 (@@@@)
                                              (    )

                                            (@@@)
                                         ====        ________                ___________
                                     _D _|  |_______/        \__I_I_____===__|_________|
                                      |(_)---  |   H\________/ |   |        =|___ ___|      _________________
                                      /     |  |   H  |  |     |   |         ||_| |_||     _|                \_____A
                                     |      |  |   H  |__--------------------| [___] |   =|                        |
                                     | ________|___H__/__|_____/[][]~\_______|    	|   -|                        |
                                     |/ |   |-----------I_____I [][] []  D   |=======|____|________________________|_
                                   __/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__|__________________________|_
                                    |/-=|___|=   O=====O=====O=====O|_____/~\___/          |_D__D__D_|  |_D__D__D_|
                                     \_/      \__/  \__/  \__/  \__/      \_/               \_/   \_/    \_/   \_/

できた

 

他ホストへの実行

  • インベントリ記載

# vi hosts
[test]
192.168.11.33
192.168.11.35


  • パスワード認証許可

ask_pass部がコメントアウトされてるので外す


# sed -e "s/#ask_pass = True/ask_pass = True/g" *.cfg | grep ask_pass
ask_pass = True

# sed -i "s/#ask_pass = True/ask_pass = True/g" *.cfg

# grep ask_pass *.cfg
ask_pass = True

 

  • ping実行

# ansible all -m ping
SSH password:
192.168.11.33 | FAILED! => {
"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."
}
192.168.11.35 | FAILED! => {
"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."


“FAILED!” www
ということでansible.cfgに追加設定を入れてあげる

 

  • ansible.cfg修正
# vi ansible.cfg
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

 

  • 再度実行
# ansible test -m ping
SSH password:
192.168.11.35 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.11.33 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
}


“SUCCESS!”ということで成功致しました。

 

  • shellモジュールを使用して任意のコマンドを実行する

‘hostname’コマンドを使用してみます

# ansible test -m shell -a 'hostname'
SSH password:
192.168.11.35 | CHANGED | rc=0 >>
centos7_2

192.168.11.33 | CHANGED | rc=0 >>
centos7_1

hostnameコマンドの結果が返って来れば成功

 

  • playbook記載

次は他ホストに対してplyabookから実行していきます

yamlファイルの作成

# vi apache_install.yml
- hosts: test
  sudo: yes
  tasks:
    - name: yum install apache
      yum:
        name=httpd
        state=present
    - name: start apache & chkconfig on
      service:
        name=httpd
        state=started
        enabled=yes

hosts: 対象ホスト(今回、インベントリで記載しているグループ名を記載)
sudo: “sudo”をつけて実施するかどうか(yesであればsudoをつける)
tasks: モジュールを記載
name: 任意の名前
yum: OSにパッケージをインストール/アンインストールするモジュール
name: インストールするパッケージ名
state: present/パッケージインストール
latest/パッケージの最新版へのアップデート
absent/パッケージのアンインストール

 

  • playbook実行

# ansible-playbook apache_install.yml
SSH password:
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [test] ********************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************************************************************************************************************************************
ok: [192.168.11.35]
ok: [192.168.11.33]

TASK [yum install apache] ******************************************************************************************************************************************************************************************************************************************************
changed: [192.168.11.35]
changed: [192.168.11.33]

TASK [start apache & chkconfig on] *********************************************************************************************************************************************************************************************************************************************
changed: [192.168.11.33]
changed: [192.168.11.35]

PLAY RECAP *********************************************************************************************************************************************************************************************************************************************************************
192.168.11.33 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.11.35 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

成功したようです

 

  • playbook実行確認
# vi kajimatsu_host.list
192.168.11.33
192.168.11.35

# for i in `cat kajimatsu_host.list`;do ssh $i "yum list installed | grep httpd";done
root@192.168.11.33's password:
httpd.x86_64 2.4.6-89.el7.centos @updates
httpd-tools.x86_64 2.4.6-89.el7.centos @updates
root@192.168.11.35's password:
httpd.x86_64 2.4.6-89.el7.centos @updates
httpd-tools.x86_64 2.4.6-89.el7.centos @updates

# for i in `cat kajimatsu_host.list`;do ssh $i "systemctl status httpd";done
root@192.168.11.33's password:
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2019-07-07 01:16:58 JST; 5min ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 4525 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4525 /usr/sbin/httpd -DFOREGROUND
├─4526 /usr/sbin/httpd -DFOREGROUND
├─4527 /usr/sbin/httpd -DFOREGROUND
├─4528 /usr/sbin/httpd -DFOREGROUND
├─4529 /usr/sbin/httpd -DFOREGROUND
└─4530 /usr/sbin/httpd -DFOREGROUND

Jul 07 01:16:57 centos7_1 systemd[1]: Starting The Apache HTTP Server...
Jul 07 01:16:57 centos7_1 httpd[4525]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a00:27ff:fe23:4194. Set the 'ServerName' directive globally to suppress this message
Jul 07 01:16:58 centos7_1 systemd[1]: Started The Apache HTTP Server.
root@192.168.11.35's password:
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2019-07-07 01:18:19 JST; 5min ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 4632 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4632 /usr/sbin/httpd -DFOREGROUND
├─4633 /usr/sbin/httpd -DFOREGROUND
├─4634 /usr/sbin/httpd -DFOREGROUND
├─4635 /usr/sbin/httpd -DFOREGROUND
├─4636 /usr/sbin/httpd -DFOREGROUND
└─4637 /usr/sbin/httpd -DFOREGROUND

Jul 07 01:18:08 centos7_2 systemd[1]: Starting The Apache HTTP Server...
Jul 07 01:18:13 centos7_2 httpd[4632]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::4a5a:d1f2:c140:d0fc. Set the 'ServerName' directive globally to suppress this message
Jul 07 01:18:19 centos7_2 systemd[1]: Started The Apache HTTP Server.

“;”で繋げて実行すれば良かったw

apacheが入っており、プロセスが起動していることが確認できました!!

 

  • htmlファイル配布

最後にローカルで作成したhtmlファイルを配布し所定の位置に設置致します

適当に表示用のHTMLファイル作成します

# cat kajimatsu.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>
            タイトル
        </title>
    </head>
    <body>
        <h1>WELCOME TO KAJIMATSU.COM</h1>
        <p>Ansible TEST HTML</p>
    </body>
</html>

 

  • playbook追記

# vi apache_install.yml
- hosts: test
  sudo: yes
  tasks:
    - name: yum install apache
      yum:
        name=httpd
        state=present

    - name: start apache & chkconfig on
      service:
        name=httpd
        state=started
        enabled=yes

    - name: distribute file
      template:
        src: kajimatsu.html
        dest: /var/www/html/index.html

“name: distribute file”以下を追記

name: 任意の名前

templete: 指定したテンプレートのファイルを設置する

src: 対象ファイル

dest: 対象ファイルの設置場所

 

  • playbook実行

# ansible-playbook apache_install.yml
SSH password:
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [test] ********************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************************************************************************************************************************************
ok: [192.168.11.33]
ok: [192.168.11.35]

TASK [yum install apache] ******************************************************************************************************************************************************************************************************************************************************
ok: [192.168.11.35]
ok: [192.168.11.33]

TASK [start apache &amp;amp;amp; chkconfig on] *********************************************************************************************************************************************************************************************************************************************
ok: [192.168.11.33]
ok: [192.168.11.35]

TASK [distribute file] *********************************************************************************************************************************************************************************************************************************************************
changed: [192.168.11.35]
changed: [192.168.11.33]

PLAY RECAP *********************************************************************************************************************************************************************************************************************************************************************
192.168.11.33 : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.11.35 : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

 

  • htmlファイル設置確認

# for i in `cat kajimatsu_host.list`;do ssh $i "curl http://localhost:80";done
root@192.168.11.33's password:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>
            タイトル
        </title>
    </head>
    <body>
        <h1>WELCOME TO KAJIMATSU.COM</h1>
        <p>Ansible TEST HTML</p>
    </body>
</html>
100   220  100   220    0     0  15752      0 --:--:-- --:--:-- --:--:-- 18333
root@192.168.11.35's password:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>
            タイトル
        </title>
    </head>
    <body>
        <h1>WELCOME TO KAJIMATSU.COM</h1>
        <p>Ansible TEST HTML</p>
    </body>
</html>
100   220  100   220    0     0  21223      0 --:--:-- --:--:-- --:--:-- 24444

事前にローカルで作成したhtmlファイル設置されており、参照できることが確認できました
ここである疑問が

一度実行したyumなども実行されたのかな…?
ansibleは冪等性を担保しており、実行しようとしたものが既に実施済みであったり、既に存在すれば、そこはスキップしてくれます…なので数回同じものを実行しても問題なし!(めっちゃ便利やん)

 

 

ということで今回はAnsibleについて書いていきました。Ansibleはサーバに限らず、NW機器などにも利用でき、数台では有り難みが少ないものの、規模が大きく、複雑になるほど、活躍の場が広がるのではないかと思います。

皆様もAnsibleを使ってみてはいかがでしょうか。

今回も記事を読んでいただきありがとうございます。

よろしければ、本ページ下部のボタンよりはてなブックマークの登録お願いいたします!!!

また、Twitterもフォローしていただけたら嬉しいです(^^)

IT
[楽しようぜ!] pythonでsambaへアクセス!

こんにちは。 梶松です。 今回はpysmbについて書きます。 最近思ってしまったわけです。 samb …

Linux
[ちょっと一息] pdfのpasswordが分からない!

こんにちは。 梶松です。 今回はちょっと一息という事で、 この間遭遇した出来事で役に立ったものを紹介 …

IT
【一目惚れ】Prometheus + Grafanaを用いたサーバ監視 part.1

こんにちは 梶松でっす。   皆様、PCのステータスを確認したい時ってありませんか? 例え …