1、ansible的功能和意義python
一、功能linux
ansible批量功能 ----------------------> 並行
01. 能夠實現批量系統操做配置 02. 能夠實現批量軟件服務部署 03. 能夠實現批量文件數據分發 04. 能夠實現批量系統信息收集
二、意義web
01. 提升工做的效率 02. 提升工做準確度 03. 減小維護的成本 04. 減小重複性工做
2、ansible的特色shell
1. 沒有配置文件(不須要配置) 2. 不須要啓動服務 3. 客戶端不須要部署任務
3、ansible和類似的軟件對比vim
和ansible類似的軟件:saltstackbash
saltstack也是自動化批量管理軟件。ssh
可是saltstack比較複雜,軟件服務比較重。fetch
4、ansible安裝ui
yum安裝(須要epel源):spa
yum -y install epel-release
yum install -y ansible
5、ansible基本使用(默認是以root用戶執行,可是基於ssh鏈接操做要屢次輸入密碼,爲方即可以使用基於ssh密鑰方式進行認證)
一、ansible主要配置文件
(1) ansible應用程序的主配置文件:/etc/ansible/ansible.cfg (2) Host Inventory定義管控主機:/etc/ansible/hosts
二、ansible應用程序命令
ansible-doc 命令:獲取模塊列表,及模塊使用格式; ansible-doc -l:獲取模塊列表 ansible-doc -s module_name:獲取指定模塊的使用信息
ansible的命令格式能夠理解爲(ansible還有不少參數):
ansible 主機信息(IP 主機組 all ...) -m (模塊名)command -a "操做動做"
三、ansible執行命令返回信息的顏色的含義
(1)綠色:執行成功
(2)黃色:執行成功而且狀態發生了改變
(3)紅色:執行失敗
提示:能夠在ansible.cfg中進行定製顏色的設定
6、ansible主機清單功能模塊(指定能夠管理哪些主機)
一、主機清單配置方式:
方式1:直接把IP寫在配置文件中
方式2:指定分組
[oldboy] 172.16.1.41 172.16.1.31 [oldgirl] 172.16.1.7
方式3:支持主機名符號匹配配置
[oldboy] 172.16.1.[1:50] web[01:03]
方式4:支持內置變量信息配置
[oldboy] 172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22 [oldboy] 172.16.1.7 ansible_user=root ansible_password=123456 ansible_port=22
方式5:支持特殊變量信息配置 (劇本)
[oldboy] 172.16.1.7 [oldboy:vars] ansible_user=root ansible_password=123456 ansible_port=22
方式6:嵌入式配置方法
[backup:children] backupclient backupserver [backupclient] 172.16.1.7 ansible_user=root ansible_password=123456 172.16.1.31 [backupserver] 172.16.1.41
二、ansible命令指定管理的主機方式
ansible命令後面指定要管理的主機,all表示主機清單裏面的所有主機,也可指定主機清單裏面的分組名等。
7、ansible的模塊使用(如下列舉的是一些經常使用的模塊)
一、ping模塊
二、command模塊 :命令模塊=========在目標主機執行命令
參數:
chdir: 在執行命令前,先切換目錄信息 creates: 判斷一個文件是否存在,若是存在,後面命令被跳過(不執行) removes: 判斷一個文件是否存在,若是存在,後面命令就執行 free_form:在使用command模塊時候必須輸入一個合法的linux命令
基本用法:
[root@m01 ansible]# ansible backup -m command -a "hostname" 172.16.1.31 | CHANGED | rc=0 >> nfs01 172.16.1.41 | CHANGED | rc=0 >> backup 172.16.1.7 | CHANGED | rc=0 >> web01
特殊用法:
chdir 參數: [root@m01 ansible]# ansible backup -m command -a "chdir=/tmp pwd" 172.16.1.31 | CHANGED | rc=0 >> /tmp 172.16.1.7 | CHANGED | rc=0 >> /tmp 172.16.1.41 | CHANGED | rc=0 >> /tmp
creates 參數: [root@m01 tmp]# ansible backup -m command -a "creates=/etc/oldboy.txt touch /opt/oldboy.txt" 172.16.1.41 | CHANGED | rc=0 >> 172.16.1.7 | SUCCESS | rc=0 >> skipped, since /etc/oldboy.txt exists 172.16.1.31 | CHANGED | rc=0 >>
三、shell模塊:萬能模塊==========在目標主機執行命令
chdir: 在執行命令前,先切換目錄信息 creates: 判斷一個文件是否存在,若是存在,後面命令被跳過(不執行) removes: 判斷一個文件是否存在,若是存在,後面命令就執行 free_form:在使用command模塊時候必須輸入一個合法的linux命令 能夠識別一些特殊字符 < > | ; $
提示:shell模塊雖然是萬能模塊,但最好選擇專業的模塊完成專業事情
例如:
ansible backup -m shell -a "rpm -qa iftop"
四、script模塊:命令模塊==========執行腳本
例如:
ansible backup -m script -a "/server/scripts/yum.sh"
五、copy模塊:=============批量分發文件
做用:
01. 分發文件數據信息 從管理端 -- 被管理端 02. 修改文件權限屬性信息 03. 移動遠程主機數據信息 被管理端 -- /tmp/oldboy.txt --- /opt/
參數: src: 指定要推送的數據信息 dest:指定數據保存在遠程主機什麼目錄中 mode:修改文件權限信息 owner:修改文件屬主信息 group:修改文件屬組信息 backup: 分發文件數據時,會對源文件進行備份 remote_src: 複製遠程主機文件到其餘路徑,或者進行遠程主機數據備份 content: 直接編輯文件內容
基本用法:
ansible backup -m copy -a "src=/etc/hosts dest=/etc/"
特殊用法:
傳輸文件時,修改文件權限:
ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.bak mode=600 owner=oldboy666 group=oldboy666"
分發文件時,對源文件進行備份:
ansible backup -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"
遠程主機文件進行復製備份(便於批量還原):
ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.backup remote_src=yes"
批量還原:
ansible backup -m copy -a "src=/etc/hosts.backup dest=/etc/hosts remote_src=yes"
直接編輯文件信息,而且進行批量分發:
ansible backupclient -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
六、fetch模塊:===================批量拉取文件
ansible 172.16.1.7 -m fetch -a "src=/etc/oldgirl.txt dest=/tmp"
七、file模塊:
做用:
01. 修改文件權限信息
02. 建立數據信息/刪除數據信息
基本用法:修改文件權限
ansible 172.16.1.7 -m file -a "path=/etc/oldgirl.txt mode=666 owner=oldboy666 group=oldboy666"
特殊用法:建立數據信息
參數:state absent -- 刪除數據信息 directory -- 建立目錄 file ← hard -- 建立硬連接 link -- 建立軟連接 touch -- 建立文件
建立文件:
ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy.txt state=touch"
建立目錄:
ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir state=directory"
刪除文件數據:
ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir/oldboy_soft_link state=absent"
八、cron模塊:定時任務模塊=========批量添加設置定時任務信息
參數: minute hour day month weekday --- 時間參數 job -- 指定定時任務信息 name -- 添加註釋信息 state -- absent 刪除定時任務 present 添加定時任務 disabled -- 註釋定時任務 yes 取消定時任務註釋 no
每隔5分鐘,時間同步:
ansible backup -m cron -a "name='date ntpdate crond02' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"
批量刪除定時任務信息:
ansible backup -m cron -a "name='date ntpdate crond' state=absent"
批量註釋定時任務信息:
ansible backup -m cron -a "name='date ntpdate crond' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
九、yum模塊:批量下載安裝軟件
參數: name: 指定軟件名稱 state: 指定動做信息 installed
ansible backup -m yum -a "name=nmap state=installed"
十、service模塊:管理服務狀態模塊
做用:批量啓動/中止服務程序 設置服務是否開機自動啓動
參數: name: 定義服務名稱 state: 是否啓動 started 中止 stopped 重啓 restarted 平滑重啓 reloaded enabled:設置服務是否開機自動啓動
ansible backup -m service -a "name=firewalld state=started enabled=yes" ansible backup -m service -a "name=firewalld state=stopped enabled=no"
十一、user模塊:用戶管理
參數 name 建立的用戶名稱 uid 指定用戶的uid信息 group 指定屬於主要組 groups 指定屬於哪一個附屬組 password 設置用戶密碼信息??? shell 指定登陸方式 /bin/bash /sbin/nologin create_home:
建立虛擬用戶:
ansible backup -m user -a "name=Alex uid=250 group=root groups=oldboy shell=/sbin/nologin create_home=no"
十二、mount模塊:掛載
參數: src:須要掛載存儲設備信息 path: 掛載點路徑信息 fstype:掛載類型信息 state:掛載操做(mounted present)/卸載操做(unmounted absent) mounted:能夠實現當即掛載 永久開機自動掛載 present:永久開機自動掛載 unmounted:能夠實現當即卸載 absent:能夠實現當即卸載 永久卸載
批量掛載:
ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
8、ansible劇本
一、具體的編寫規範
(1)python yaml 語法規範
(2)規範位置
mkdir /etc/ansible/ansible_playbook vim /etc/ansible/ansible_playbook/test.yaml
(3)語法規範
規則一:縮進 yaml使用一個固定的縮進風格表示數據層結構關係,Saltstack須要每一個縮進級別由兩個空格組成。必定不能使用tab鍵 規則二:冒號 CMD="echo" yaml: mykey: 每一個冒號後面必定要有一個空格(以冒號結尾不須要空格,表示文件路徑的模版能夠不須要空格) 規則三:短橫線 想要表示列表項,使用一個短橫槓加一個空格。多個項使用一樣的縮進級別做爲同一個列表的一部分
核心規則:有效的利用空格進行劇本的編寫,劇本編寫是不支持tab的
二、劇本的執行方式
(1)檢查劇本的語法
ansible-playbook --syntax-check test.yaml
(2)劇本模擬執行
ansible-playbook -C test.yaml
(3)正式執行劇本
ansible-playbook test.yaml
三、ansible劇本的編寫