自動化工具-ansible服務部署與使用

1.前言

1.1ansible軟件介紹

python 語言是運維人員必須會的語言
ansible 是一個基於python 開發的自動化運維工具
其功能實現基於ssh遠程鏈接服務
ansible 能夠實現批量系統配置,批量軟件部署,批量文件拷貝,批量運行命令等功能
除了ansible以外,還有 saltstack 等批量管理軟件

1.2ansible軟件特色:

不須要單獨安裝客戶端(no agents),基於系統自帶的sshd服務,sshd就至關於ansible的客戶端
不須要服務端(no sever)
須要依靠大量的模塊實現批量管理
配置文件 /etc/ansible/ansible.cfg (前期不用配置)

1.3ansible服務端和被控端環境:

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
ansible被控端:
192.168.10.144:
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)
192.168.10.143:
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)

2.實現基於祕鑰鏈接:

生成ssh公鑰祕鑰對:
ssh-keygen -t rsa -P ''
拷貝公鑰到被控端的服務器:
ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.10.144
基於祕鑰登陸測試:
[root@localhost ~]# ssh root@192.168.10.144
Last login: Sat May 19 15:44:50 2018 from 192.168.10.143

3.安裝ansible和配置主機組

3.1安裝:

使用epel的源安裝,epel源安裝:yum install -y epel-release
yum install -y ansible --enablerepo=epel

3.2配置ansible主機組

vim /etc/ansible/hosts
[web] #主機組
192.168.10.144 ansible_ssh_user=root ansible_ssh_pass=123 #主機的用戶名和密碼,若是不是公鑰驗證,也能夠嘗試密碼鏈接
192.168.10.145
[mysql]
47.94.20.198

4.ansible軟件使用/參數

語法:
ansible clsn -a "uptime"
ansible clsn -m command -a "uptime"
ansible 定義的組/單個ip/域名/all  -m command -a "uptime"
說明:-m 指定使用的模塊
      -a 指定使用模塊中相應的命令參數  命令參數只能是基本命令,並不支持管道操做
      all   爲hosts文件中的組所有管理

5.ansible經常使用模塊

5.1 command模塊

經常使用選項:
creates:判斷,當該文件存在時,則該命令不執行
free_form:須要執行的Linux指令
chdir:在執行命令以前,先切換到該指定的目錄
removes:判斷,當該文件不存在時,則該選項不執行
executable:切換shell來執行命令,該執行路徑必須是一個絕對路徑
[root@localhost ansible]# ansible web -a 'chdir=/home ls'
192.168.10.145 | SUCCESS | rc=0 >>
192.168.10.144 | SUCCESS | rc=0 >>
abc1
abc2
abc3

 

5.2File模塊

經常使用選項:
force:在兩種狀況下強制建立軟連接。一、源文件不存在但以後會創建的狀況;二、目標軟件已存在,須要先取消以前的軟連接,而後建立新的軟連接。選項:yes|no
group:定義文件/目錄的屬組
mode:定義文件/目錄的權限
path:必選項,定義文件/目錄的路徑
recurse:遞歸的設置文件的屬性,只對目錄有效
src:要被連接到的路徑,只應用於state=link的狀況
dest:被連接到的路徑,只應用於state=link的狀況
state:
  • directory:若是目錄不存在,建立目錄
  • file:即便文件不存在,也不會被建立
  • link:建立軟連接;hard:建立硬連接
  • touch:若是文件不存在,則會建立一個新的文件,若是已存在,則更新其最後修改時間
  • absent:刪除目錄/文件或者取消連接文件
[root@localhost ~]# ansible web -m file -a 'path=/tmp/test.txt state=touch'
192.168.10.145 | SUCCESS => {
"changed": true,
"dest": "/tmp/test.txt",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
192.168.10.144 | SUCCESS => {
"changed": true,
"dest": "/tmp/test.txt",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:user_tmp_t:s0",
"size": 0,
"state": "file",
"uid": 0
 
[root@localhost ~]# ansible web -m file -a 'path=/tmp/test_dir state=directory owner=root group=root mode=777'
192.168.10.145 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "0777",
"owner": "root",
"path": "/tmp/test_dir",
"size": 6,
"state": "directory",
"uid": 0
}
192.168.10.144 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "0777",
"owner": "root",
"path": "/tmp/test_dir",
"secontext": "unconfined_u:object_r:user_tmp_t:s0",
"size": 6,
"state": "directory",
"uid": 0
}
 
5.3 Service模塊用於管理服務
經常使用選項:
arguments:爲命令提供一些附加參數
enabled:是否開機啓動,選項 yes|no
name:必選項,服務名稱
pattern:定義一個模式,若是經過status指令來查看服務狀態時,沒有響應,它會經過ps命令在進程中根據該模式進行查找,若是匹配到,則認爲該服務依然運行
runlevel:運行級別
sleep:若是執行了restarted,則在stop和start之間等待幾秒鐘
state:對當前服務執行啓動/中止/重啓/從新加載等操做(started/stopped/restarted/reloaded)
root@localhost ~]# ansible web -m service -a "name=postfix state=started enabled=yes"

5.4 cron模塊 用於管理計劃任務

經常使用參數:
backup:對遠程主機上的原計劃任務內容修改以前作備份
cron_file:若是指定該選項,則用該文件替換遠程主機上cron.d目錄下的用戶的任務計劃
day:日(1-31,*,*/2,…)
hour:小時(0-23,*,*/2,…)
minute:分鐘(0-59,*,*/2,…)
month:月(0-12,*,…)
weekday:周(0-7,*,…)
job:要執行的任務,依賴於state=present
name:該任務的描述
special_time:指定何時執行,參數:reboot,yearly,annually,monthly,weekly,daily,hourly
state:確認該任務計劃是建立仍是刪除
user:以哪一個用戶身份執行
 
添加定時任務:
ansible web -s cron -a "minute=0 hour=3 job='/bin/sh /mnt/shell/hostname.sh' name=check hostname"

5.5 yum模塊 使用yum包管理器來管理軟件包

選項:
conf_file:yum的配置文件
disable_gpg_check:關閉gpg_check
disablerepo:不啓用某個源
enablerepo:啓用某個源
list:查看yum列表
name:要進行操做的軟件包名字,也能夠傳遞一個url或者一個本地的rpm包的路徑
state:狀態(present/installed/absent/removed/latest)
yum安裝軟件:
 ansible web -m yum -a 'name=libselinux-python state=installed'

yum卸載軟件:python

[root@localhost ~]# ansible web -m yum -a 'name=lrzsz state=removed'
192.168.10.145 | SUCCESS => {
"changed": false,
"msg": "",
"rc": 0,
"results": [
"lrzsz is not installed"
]
}
192.168.10.144 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"已加載插件:fastestmirror, langpacks\n正在解決依賴關係\n--> 正在檢查事務\n---> 軟件包 lrzsz.x86_64.0.0.12.20-36.el7 將被 刪除\n--> 解決依賴關係完成\n\n依賴關係解決\n\n================================================================================\n Package 架構 版本 源 大小\n================================================================================\n正在刪除:\n lrzsz x86_64 0.12.20-36.el7 @base 181 k\n\n事務概要\n================================================================================\n移除 1 軟件包\n\n安裝大小:181 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n 正在刪除 : lrzsz-0.12.20-36.el7.x86_64 1/1 \n 驗證中 : lrzsz-0.12.20-36.el7.x86_64 1/1 \n\n刪除:\n lrzsz.x86_64 0:0.12.20-36.el7 \n\n完畢!\n"
]
}

 5.6 script模塊

在遠程主機上執行腳本mysql

[root@www ansible]# ansible mailserver -m script -a '/bin/bash /tmp/po2.sh'

linux

相關文章
相關標籤/搜索