Linux下ansible使用

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劇本的編寫

 

 

 

 

相關文章
相關標籤/搜索