Ansible介紹

第一章 ansible服務介紹

1.1 ansible批量管理服務概述

是基於python語言開發的自動化軟件工具node

是基於SSH遠程管理服務實現遠程主機批量管理python

1.2 ansible批量管理服務意義

1) 提升工做的效率linux

2) 提升工做準確度web

3) 減小維護的成本正則表達式

4) 減小重複性工做shell

1.3 ansible批量管理服務功能

1) 能夠實現批量系統操做配置vim

2) 能夠實現批量軟件服務部署windows

3) 能夠實現批量文件數據分發bash

4) 能夠實現批量系統信息收集服務器

1.4 ansible批量管理服務特色

管理端不須要啓動服務程序(no server)

管理端不須要編寫配置文件(/etc/ansible/ansible.cfg)

受控端不須要安裝軟件程序(libselinux-python)

被管理端selinux服務沒有關閉---影響ansible軟件的管理

libselinux-python讓selinux開啓的狀態也可使用ansible程序

受控端不須要啓動服務程序(no agent)

服務程序管理操做模塊衆多(module)

利用劇本編寫來實現自動化(playbook)

第二章 Ansible安裝部署

1.第一個歷程:安裝部署軟件

[root@m01 ~]#  yum -y install ansible
[root@m01 ~]# rpm -qc ansible
/etc/ansible/ansible.cfg    --ansible服務配置文件
/etc/ansible/hosts          --主機清單文件
/etc/ansible/roles          ---角色目錄

2. 第二個歷程:須要編寫主機清單文件

[root@m01 ansible]# vim /etc/ansible/hosts
[all]
172.16.1.31
172.16.1.41
172.16.1.7
[backup]
172.16.1.41
[nfs]
172.16.1.31
[web]
172.16.1.7

3 第三個歷程:測試是否能夠管理多個主機

[root@m01 ansible]# ansible all -a "hostname"
172.16.1.41 | CHANGED | rc=0 >>
backup

172.16.1.7 | CHANGED | rc=0 >>
web01

172.16.1.31 | CHANGED | rc=0 >>
nfs

[root@m01 ansible]#

第三章 Ansible主機清單

1.主機支持主機名通配以及正則表達式,例如 web[1:3].oldboy.com 表明三臺主機
2.主機支持基於非標準的 ssh 端口,例如 web1.oldboy.com:6666
3.主機支持指定變量,可對個別主機的特殊配置,如登錄用戶,密碼
4.主機組支持指定變量[group_name:vars],同時支持嵌套組[game:children]

1.指定主機組相關配置

#主機組
[root@m01 ~]# cat /etc/ansible/hosts
[all]
172.16.1.31 
172.16.1.41
#主機+端口+密碼
[all]
172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
172.16.1.41 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
#對整個主機組都生效的變量
[all:vars]
ansible_ssh_pass='123456'

第四章 Ansible經常使用模塊

1. command(默認模塊)

command – Execute commands on targets
            在一個遠程主機上執行一個命令

應用場景:
相似shell,可是隻能執行簡單的命令,複雜的命令和有些符號並不能識別,用的比較少

01.查看主機名,能夠執行成功

[root@m01 ~]# ansible all -m ping       
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
172.16.1.31 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

02.使用awk拼接查看主機IP執行失敗

[root@m01 ansible]# ansible all -m command -a "ifconfig eth0|grep 172"     
172.16.1.7 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code

172.16.1.41 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code

172.16.1.31 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code

[root@m01 ansible]#

2. shell(萬能模塊)

command – Execute shell commands on targets
            在節點上執行操做

萬能模塊,全部命令均可以執行,和本地執行效果同樣
01.使用管道查詢IP地址

[root@m01 ~]# ansible all -m shell -a "ifconfig eth0|grep 10.0.1"
172.16.1.41 | CHANGED | rc=0 >>
        inet 10.0.1.41  netmask 255.255.255.0  broadcast 10.0.1.255

172.16.1.31 | CHANGED | rc=0 >>
        inet 10.0.1.31  netmask 255.255.255.0  broadcast 10.0.1.255

3. copy 模塊

copy – Copy files to remote locations
        將數據信息進行批量分發

01.拷貝m01的hostsname文件到其餘主機的/opt目錄下

[root@m01 ~]# ansible 172.16.1.31 -m copy -a "src=/etc/hostname dest=/opt"
172.16.1.31 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "f434396716e2c9aed47cfde87c491cce5a2c08fa", 
    "dest": "/opt/hostname", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "318d7defb693a2eb0d4f1a7a96575a57", 
    "mode": "0644", 
    "owner": "root", 
    "size": 4, 
    "src": "/root/.ansible/tmp/ansible-tmp-1563780990.63-144254987732501/source", 
    "state": "file", 
    "uid": 0
}

02.在傳輸文件時修改文件屬主和屬組信息及權限信息

ansible 172.16.1.31 -m copy -a "src=/root/rsync.password dest=/etc/ owner=opesn group=opesn mode=0600"

03.建立文件並直接寫入內容

ansible 172.16.1.31 -m copy -a "content='opesn' dest=/etc/rsync.password mode=0600"

05.複製目錄
src後面目錄沒有/: 將目錄自己以及目錄下面的內容都進行遠程傳輸複製

ansible 172.16.1.31 -m copy -a "src=/data dest=/data"

src後面目錄有/: 只將目錄下面的內容都進行遠程傳輸複製

ansible 172.16.1.31 -m copy -a "src=/data/ dest=/data"

參數說明:

src #推送數據的源文件信息
dest #推送數據的目標路徑
backup #對推送傳輸過去的文件,進行備份
content #直接批量在被管理端文件中添加內容
group #將本地文件推送到遠端,指定文件屬組信息
owner #將本地文件推送到遠端,指定文件屬主信息
mode #將本地文件推送到遠端,指定文件權限信息

4. file 模塊

01.建立文件夾

ansible all -m file -a "path=/root/test state=directory"

02.建立文件並更改屬性

ansible all -m file -a "path=/root/test.txt state=touch mode=777 owner=root group=root"

03.建立軟連接

ansible all -m file -a "src=/root/abc path=/root/abc_link state=link"

參數說明:

path #指定遠程主機目錄或文件信息
recurse #遞歸受權
state
directory #在遠端建立目錄
touch #在遠端建立文件
link #link 或 hard 表示建立連接文件
absent #表示刪除文件或目錄
mode #設置文件或目錄權限
owner #設置文件或目錄屬主信息
group #設置文件或目錄屬組信息

5.script(腳本模塊)

script – Runs a local script on a remote node after transferring it
        在傳輸遠程節點以後,在遠程節點上運行一個本地腳本
# 編寫腳本
[root@m01 ~]# mkdir -p /server/scripts
[root@m01 ~]# cat /server/scripts/yum.sh
#!/usr/bin/bash
yum install -y iotop
#在本地運行模塊,等同於在遠程執行,不須要將腳本文件進行推送目標主機執行
[root@m01 ~]# ansible oldboy -m script -a "/server/scripts/yum.sh"

6.cron 模塊

01.建立一條定時任務

ansible all -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/sh
/server/scripts/test.sh'"

02.添加定時任務名字信息,防止重複

ansible all-m cron -a "name='cron01' job='/bin/sh /server/scripts/test.sh'"

03.刪除相應定時任務

ansible all -m cron -a "name='ansible cron02' minute=0 hour=0 job='/bin/sh
/server/scripts/test.sh' state=absent"

04.註釋相應定時任務,使定時任務失效

ansible all -m cron -a "name='ansible cron01' minute=0 hour=0 job='/bin/sh
/server/scripts/test.sh' disabled=no"

mount模塊

src:須要掛載的存儲設備或文件信息
path:指定目標掛載點目錄
fstype:指定掛載時的文件系統類型
state:presnet/mounted   --- 進行掛載
            present:不會實現當即掛載修改fstab文件,實際開機自動掛載
            mounted:會實現當即掛載,而且會修改fstab文件,實際開機自動掛載
      absent/umounted   --- 進行卸載
            absent:會實現當即卸載,而且會刪除fstab文件信息,禁止開機自動掛載
            unmounted:會實現當即卸載,但不會刪除fstab文件信息
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=present"
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=mounted"
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=unmounted"
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=absent"

user模塊

01.建立用戶指定uid,gid,不建立家目錄也不容許登錄

ansible all -m user -a "name=test uid=888 group=888 shell=/sbin/nologin create_home=no"
name #指定建立的用戶名
uid #指定用戶的 uid
group #指定用戶組名稱
groups #指定附加組名稱
password #給用戶添加密碼
shell #指定用戶登陸 shell
create_home #是否建立家目錄

group模塊

01.建立用戶組

ansible test -m group -a "name=test gid=888 state=present"
name #指定建立的組名
gid #指定組的 gid
state
absent #移除遠端主機的組
present #建立遠端主機的組(默認)

yum模塊

name       #指定要安裝的軟件包名稱
state      #指定使用 yum 的方法
installed, present #安裝軟件包
removed, absent #移除軟件包
latest     #安裝最新軟件包
ansible test -m yum -a "name=httpd state=installed"

service模塊:管理服務器的運行狀態:中止、開啓、重啓

name # 定義要啓動服務的名稱
state # 指定服務狀態
started #啓動服務
stopped #中止服務
restarted #重啓服務
reloaded #重載服務
enabled #開機自啓
ansible oldboy -m service -a "name=nfs state=stopped enabled=yes"

unarchive(解壓模塊)

01.解壓遠程服務器的壓縮包到指定目錄
建立壓縮包:
cd /etc && tar zxvf /opt/sys.tar.gz etc/fstab etc/hosts  
執行命令:
ansible 172.16.1.31 -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/ remote_src=yes"
02.把本地文件解壓到目標機器指定目錄
建立命令
cd / && tar zcvf /opt/log.tar.gz var/log/messages
ansible 172.16.1.31 -m unarchive -a "src=/opt/log.tar.gz dest=/opt/"

archive(解壓單個文件)

01.壓縮單個文件

ansible 172.16.1.31 -m archive -a "path=/var/log/message dest=/tmp/log.tar.gz format=gz force_archive=true"

setup 獲取主機信息

01.直接執行獲取主機信息

ansible 172.16.1.31 -m setup

02.只將主機某個信息打印出來

[root@m01 /server/scripts/test]# ansible 172.16.1.41 -m setup -a "filter=ansible_all_ipv4_addresses"              
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.16.1.41", 
            "10.0.1.41"
        ], 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

查看幫助

[root@mo1 ~]# ansible-doc -l            --- 列出ansible簡介
[root@mo1 ~]# ansible-doc -s fetch  --- 指定一個模塊詳細說明
[root@mo1 ~]# ansible-doc fetch     --- 查詢模塊在劇本中應用方法

Ansible輸出信息顏色解釋

01. 綠色信息:  查看主機信息/對主機未作改動
02. 黃色信息:  對主機數據信息作了修改
03. 紅色信息:  命令執行出錯了
04. 粉色信息:  忠告信息
05. 藍色信息:  顯示ansible命令執行的過程

遠程主機沒法管理問題分析

1)  管理端沒有分發好主機的公鑰
2)  被管理端遠程服務出現問題SSH
3)  被管理端進程出現僵死狀況
    /usr/sbin/sshd -D       --- 負責創建遠程鏈接
    sshd: root@pts/0        --- 用於維護遠程鏈接(windows---linux)
    sshd: root@notty        --- 用戶維護遠程鏈接(ansible---被管理端)
相關文章
相關標籤/搜索