Ansible安裝部署及常用模塊詳解

Ansible命令使用

Ansible語法使用ansible <pattern_goes_here> -m <module_name> -a <arguments>

-m NAME,–module-name=NAME:指定執行使用的模塊

-u USERNAME,–user=USERNAME:指定遠程主機以USERNAME運行命令

-s,–sudo:相當于Linux系統下的sudo命令

-USUDO_USERNAME,–sudo-user=SUDO_USERNAME:使用sudo,相當于Linux下的sudo命令

-C -check只檢查不實際執行

-e EXTRA_VARS,引用外部參數

-i INVENTORY,指定倉庫列表,默認/etc/ansible/hosts

–list-hosts,列出執行主機列

==========================================================================================

實驗架構:

Master:

Ansible 172.16.250.149

Slave:

node1 172.16.252.245

node2 172.16.251.163

node3 172.16.250.217

Ansible安裝部署及常用模塊詳解 

==========================================================================================

Ansible的安裝部署

Ansible在epel的yum中有提供,所以配置好epel源,直接使用yum命令安裝即可

yum install ansible

安裝目錄

配置文件目錄:/etc/ansible/

執行文件目錄:/usr/bin/

Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible/

Help文檔目錄:/usr/share/doc/ansible-X.X.X/

Man文檔目錄:/usr/share/man/man1/

#yum install ansible -y

配置和被管理的主機直接建立基于ssh的密鑰認證

[root@Ansible~]#ssh-keygen #生成密碼
Generatingpublic/privatersakeypair.
Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):
Createddirectory'/root/.ssh'.
Enterpassphrase(emptyfornopassphrase):
Entersamepassphraseagain:
Youridentificationhasbeensavedin/root/.ssh/id_rsa.
Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.
Thekeyfingerprintis:
2c:b0:df:16:26:8e:c7:e6:b4:c6:6a:22:e1:18:89:e9root@Ansible
Thekey'srandomartimageis:
+--[RSA2048]----+
||
||
|.|
|o.|
|.o.oS|
|*==.|
|+o..Bo|
|oE..=oo|
|.o.oo|
+-----------------+

==========================================================================================

添加認證

[root@Ansible~]#ssh-copy-id root@172.16.250.149
ssh-copy-id root@172.16.252.245
ssh-copy-id root@172.16.251.163
ssh-copy-id root@172.16.250.217
[root@Ansible~]#sshroot@172.16.250.149  #驗證
sshroot@172.16.252.245
sshroot@172.16.251.163
sshroot@172.16.250.217

==========================================================================================

定義主機,將所有被管理的主機加入到/etc/ansible/hosts中,否則無法管理

[root@Ansible~]#vim /etc/ansible/hosts
[web]
172.16.250.149
172.16.252.245
172.16.251.163
172.16.250.217

==========================================================================================

#執行ping存活檢測

[root@Ansible~]#ansible web -m ping
172.16.250.217|SUCCESS=>{
"changed":false,
"ping":"pong"
}
172.16.251.163|SUCCESS=>{
"changed":false,
"ping":"pong"
}
172.16.250.149|SUCCESS=>{
"changed":false,
"ping":"pong"
}
172.16.252.245|SUCCESS=>{
"changed":false,
"ping":"pong"
}

#列出執行主機列表

[root@Ansible /etc/ansible]#ansible web --list-hosts 
  hosts (4):
    172.16.250.149
    172.16.252.245
    172.16.251.163
    172.16.250.217

==========================================================================================

[root@Ansible /etc/ansible]#vim ansible.cfg
host_key_checking = False
[root@Ansible /etc/ansible]#useradd locy    #新建用戶
[locy@Ansible ~]$ ssh-keygen
[root@node1 ~]#echo "******" | passwd --stdin locy
[locy@Ansible ~]$ ssh locy@172.16.252.245
[locy@node1 ~]$
[root@Ansible ~]#su locy
[locy@Ansible ~]$ ssh locy@172.16.252.245
Last login: Sat Jul  8 10:29:22 2017 from 172.16.250.149
[locy@node1 ~]$ logout
Connection to 172.16.252.245 closed.
[locy@Ansible ~]$ ansible 172.16.252.245 -m ping
172.16.252.245 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

==========================================================================================

#做免密sodu

[root@node1 ~]#visudo 
%wheel  ALL=(ALL)       NOPASSWD: ALL
[root@node1 ~]#usermod -G wheel locy

==========================================================================================

172.16.252.245做ping操作,連接用戶locy,以sodu方式運行

[locy@Ansible ~]$ ansible 172.16.252.245 -m ping -u locy -b
172.16.252.245 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
或使用root方式   (不建議)
[locy@Ansible ~]$ ansible 172.16.252.245 -m ping -u locy -b --become-user=root

==========================================================================================

Ansible常用模塊詳解

ansible <host-pattern>     [-m module_name]    [-a args] [options] #ansible命令格式

指定主機組或ip地址        指定調用模塊        傳遞給模塊的參數  

ansible-doc -l 查看所有模塊

ansible-doc command 查看command模塊詳細信息

ansible-doc -s command 查看command模塊詳細用法

==========================================================================================

Command

命令模塊接受命令名稱,后面是空格分隔的列表參數。給定的命令將在所有選定的節點上執行。它不會通過shell進行處理,比如$HOME和操作如”小于”<“,”>”, “|”, “;”,”&”‘ 工作(需要使用(shell)模塊實現這些功能)。

action: command

chdir               # 在執行命令之前,先切換到該目錄

creates           # 一個文件名,當這個文件存在,則該命令不執行,可以用來做判斷

executable      # 切換shell來執行命令,需要使用命令的絕對路徑

free_form       # 要執行的Linux指令,一般使用Ansible的-a參數代替。

removes         # 一個文件名,這個文件不存在,則該命令不執行,與creates相反的判斷

==========================================================================================

對所有機器使用pwd命令

#-m 指定使用的模塊command   -a 傳遞給模塊的參數

[root@Ansible ~]#ansible web -m command -a 'pwd'
172.16.250.217 | SUCCESS | rc=0 >>
/root
172.16.252.245 | SUCCESS | rc=0 >>
/root
172.16.251.163 | SUCCESS | rc=0 >>
/root
172.16.250.149 | SUCCESS | rc=0 >>
/root

==========================================================================================

查看磁盤使用情況并將內容傳輸到/tmp/df.txt中

[root@Ansible ~]#ansible web -m shell -a 'df -h > /tmp/df.txt'

/tmp/df.txt進行查看

[root@Ansible ~]#ansible web -m command -a 'cat /tmp/df.txt'

批量添加用戶

[root@Ansible ~]#ansible web -m command -a 'useradd Tom'

==========================================================================================

shell

執行的命令中有管道或者變量,就需要使用shell

action: shell

chdir           # 執行之前,先cd到指定目錄在執行命令

creates       # 一個文件名,當這個文件存在,則該命令不執行

executable  # 切換shell來執行命令,需要使用命令的絕對路徑

free_form   # 執行的命令

removes     # 一個文件名,這個文件不存在,則該命令不執行

==========================================================================================

/tmp/df.txt進行查看

[root@Ansible ~]#ansible web -m shell -a 'cat /tmp/df.txt'

給上步添加的用戶設定密碼

[root@Ansible ~]#ansible web -m shell -a 'echo rookie | passwd --stdin Tom'

==========================================================================================

copy

復制模塊,將文件復制到被管理主機

action: copy

backup           # 創建一個備份文件包括時間戳信息,如果以某種方式重創錯了,還可以拿回原始文件

content         # 取代src=,表示直接用此處指定的信息生成為目標文件內容

dest              # 遠程節點存放文件的路徑,必須是絕對路徑

directory_mode  # 遞歸復制設置目錄權限,默認為系統默認權限

force             # 如果目標主機包含該文件,但內容不同,如果設置為yes,則強制覆蓋,如果設置為no,則只有當目標主機的目標位置不存在該文件時,才復制。默認為yes

group            # 復制到遠程主機后,指定文件或目錄的屬組

mode            # 復制到遠程主機后,指定文件或目錄權限,類似與chmod指明如 0644

owner           # 復制到遠程主機后,指定文件或目錄屬主

src                # 要復制到遠程主機的文件在本地的地址,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞歸復制。在這種情況下,如果路徑使用”/”來結尾,則只復制目錄里的內容,如果沒有使用”/”來結尾,則包含目錄在內的整個內容全部復制,類似于rsync。

==========================================================================================

將本地的/etc/fatab文件復制到目標主機的/tmp/ansible.log,屬主為roo,屬組為locy,權限為640,并備份

[root@Ansible ~]#ansible web -m copy -a 'src=/etc/fstab dest=/tmp/ansible.log owner=root group=locy mode=640 backup=yes'

對上一步的操作結果進行查看

[root@Ansible ~]#ansible web -m shell -a 'ls -l /tmp/ansible.log'
172.16.250.217 | SUCCESS | rc=0 >>
-rw-r-----. 1 root locy 541 7月   9 20:10 /tmp/ansible.log
172.16.250.149 | SUCCESS | rc=0 >>
-rw-r-----. 1 root locy 541 7月   9 20:10 /tmp/ansible.log
172.16.252.245 | SUCCESS | rc=0 >>
-rw-r-----  1 root locy 541 7月   9 08:10 /tmp/ansible.log
172.16.251.163 | SUCCESS | rc=0 >>
-rw-r-----  1 root locy 541 7月   9 20:10 /tmp/ansible.log

==========================================================================================

cron

定時任務模塊,設置管理節點生成定時任務

action: cron

backup              # 如果設置,創建一個crontab備份

cron_file            # 如果指定, 使用這個文件cron.d,而不是單個用戶crontab

day                   # 日應該運行的工作( 1-31, *, */2, etc )

hour                 # 小時( 0-23, *, */2, etc )

job                  # 指明運行的命令是什么

minute             # 分鐘( 0-59, *, */2, etc )

month              # 月( 1-12, *, */2, etc )

name               # 定時任務描述

reboot              # 任務在重啟時運行,不建議使用,建議使用special_time

special_time       # 特殊的時間范圍,參數:reboot(重啟時),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小時)

state                # 指定狀態,prsent表示添加定時任務,也是默認設置,absent表示刪除定時任務

user                 # 以哪個用戶的身份執行

weekday           # 周( 0-6 for Sunday-Saturday, *, etc )

==========================================================================================

每天凌晨三點、四點、五點、六點將磁盤使用情況保存在/tmp/df.log

[root@Ansible ~]#ansible web -m cron -a 'name="harddrive check" minute="15" hour="3,4,5,6" job="df -lh >> /tmp/df.log"'

每十分鐘將磁盤使用情況保存在/tmp/df.log

[root@Ansible ~]#ansible web -m cron -a 'name="harddrive check2" minute="*/10" job="df -lh >> /tmp/df.log"'
[root@Ansible ~]#crontab -l
#Ansible: harddrive check
15 3,4,5,6 * * * df -lh >> /tmp/df.log
#Ansible: harddrive check2
*/10 * * * * df -lh >> /tmp/df.log

harddrive check刪除

[root@Ansible ~]#ansible web -m cron -a 'name="harddrive check" state=absent'

======================================================================================

fetch

遠程文件復制到本地

dest                           #保存文件的目錄

fail_on_missing             #當設置為yes時,如果源文件丟失,任務將會失敗

flat                            #允許覆蓋將主機名/路徑/文件/文件附加到目的地的默認行為

src                            #獲取遠程系統上的文件。這必須是一個文件,而不是一個文件目錄

validate_checksum      #在獲取文件之后驗證源和目標校驗和

==========================================================================================

將遠程文件/tmp/df.txt復制到本地/root/下

[root@Ansible ~]#ansible web -m fetch -a 'src=/tmp/df.txt dest=/root/'

==========================================================================================

file

文件操作模塊,設置文件屬性

action: file

force          # 需要在兩種情況下強制創建軟連接,一種是源文件不存在但之后會建立的情況下;另一種是目標連接已存在,需要先取消之前的軟連接,有兩個選項:yes|no

group          # 設置文件或目錄的屬組

mode          # 設置文件或目錄的權限

owner         # 設置文件或目錄的屬主

path           # 必選項,定義文件或目錄的路徑

recurse       # 遞歸設置文件的屬性,只對目錄有效

src             # 要被鏈接到的路徑,只應用與state=link的情況

state          # directory:如果目錄不存在,創建目錄

==========================================================================================

查看web組下的所有主機的/tmp/df.txt

[root@Ansible ~]#ansible web -m shell -a 'ls -l /tmp/df.txt'
172.16.250.217 | SUCCESS | rc=0 >>
-rw-r--r--. 1 root root 562 7月   9 19:18 /tmp/df.txt
172.16.250.149 | SUCCESS | rc=0 >>
-rw-r--r--. 1 root root 535 7月   9 19:18 /tmp/df.txt
172.16.251.163 | SUCCESS | rc=0 >>
-rw-r--r--  1 root root 615 7月   9 19:18 /tmp/df.txt
172.16.252.245 | SUCCESS | rc=0 >>
-rw-r--r--  1 root root 535 7月   9 07:18 /tmp/df.txt

web組下的所有主機的/tmp/df.txt權限改為600屬主屬組為locy

[root@Ansible ~]#ansible web -m file -a 'path=/tmp/df.txt state=touch mode="600" owner=locy group=locy'
172.16.250.217 | SUCCESS | rc=0 >>
-rw-------. 1 locy locy 562 7月   9 21:41 /tmp/df.txt
172.16.250.149 | SUCCESS | rc=0 >>
-rw-------. 1 locy locy 535 7月   9 21:41 /tmp/df.txt
172.16.252.245 | SUCCESS | rc=0 >>
-rw------- 1 locy locy 535 7月   9 09:41 /tmp/df.txt
172.16.251.163 | SUCCESS | rc=0 >>
-rw------- 1 locy locy 615 7月   9 21:41 /tmp/df.txt

==========================================================================================

root下創建file目錄

[root@Ansible ~]#ansible web -m file -a 'path=/root/file state=directory'
[root@Ansible ~]#ls
file

==========================================================================================

hostname

設置系統的主機名

172.16.250.149主機名改為master

[root@Ansible ~]#ansible 172.16.250.149 -m hostname -a 'name=master'
[root@Ansible ~]#hostname
master

==========================================================================================

yum

基于yum源安裝程序

action: yum

conf_file                # yum的配置文件

disable_gpg_check  # 關閉gpg_check

disablerepo            # 不啟用某個源

enablerepo            # 啟用某個源

name=                 # 指定要安裝的包,如果有多個版本需要指定版本,否則安裝最新的包

state                    # 安裝(present),安裝最新版(latest),卸載程序包(absent)

==========================================================================================

web組所有主機安裝nginx 且為最新版本

[root@Ansible ~]#ansible web -m yum -a 'name=nginx state=latest'

==========================================================================================

service

服務管理模塊

action: service

arguments     # 向服務傳遞的命令行參數

enabled       # 設置服務開機自動啟動,參數為yes|no

name          # 控制服務的名稱

pattern       # 定義一個模式,如果通過status指令來查看服務的狀態時,沒有響應,就會通過ps指令在進程中根據該模式進行查找,如果匹配到,則認為該服務依然在運行

runlevel      # 設置服務自啟動級別

sleep         # 如果執行了restarted,則在stop和start之間沉睡幾秒鐘

state         # 啟動started  關閉stopped  重新啟動restarted  重載reloaded

==========================================================================================

web組所有主機啟動nginx

[root@Ansible ~]#ansible web -m service -a 'name=nginx state=started'

web組所有主機關閉nginx

[root@Ansible ~]#ansible web -m service -a 'name=nginx state=stopped'

web組所有主機重啟nginx

[root@Ansible ~]#ansible web -m service -a 'name=nginx state=restarted'

web組所有主機重載nginx配置文件

[root@Ansible ~]#ansible web -m service -a 'name=nginx state=reloaded'

web組所有主機啟動nginx,并開機啟動/不啟動

[root@Ansible ~]#ansible web -m service -a 'name=nginx state=started enabled=yes/no'

==========================================================================================

group

用戶組模塊,添加或刪除組

action: group

gid           # 設置組的GID號

name=     # 管理組的名稱

state        # 指定組狀態,默認為創建,設置值為absent為刪除

system     # 設置值為yes,表示為創建系統組

==========================================================================================

創建名為tom的組

[root@Ansible ~]#ansible web -m group -a 'name=tom state=present'

==========================================================================================

user

用戶模塊,管理用戶帳號

action: user

comment           # 用戶的描述信息

createhome       # 是否創建家目錄

force                 # 在使用state=absent是, 行為與userdel –force一致.

group               # 指定基本組

groups              # 指定附加組,如果指定為(groups=)表示刪除所有組

home               # 指定用戶家目錄

login_class        # 可以設置用戶的登錄類 FreeBSD, OpenBSD and NetBSD系統.

move_home       # 如果設置為home=時, 試圖將用戶主目錄移動到指定的目錄

name                # 指定用戶名

non_unique       # 該選項允許改變非唯一的用戶ID值

password         # 指定用戶密碼

remove           # 在使用state=absent時, 行為是與userdel –remove一致

shell               # 指定默認shell

state            # 設置帳號狀態,不指定為創建,指定值為absent表示刪除

system           # 當創建一個用戶,設置這個用戶是系統用戶。這個設置不能更改現有用戶

uid              # 指定用戶的uid

update_password  # 更新用戶密碼

==========================================================================================

創建用戶tom,用戶信息為tom is tom,uid為1066,基本組為tom,附加組為wheel,shell類型為zshell,用戶家目錄為/home/tomhome

[root@Ansible ~]#ansible web -m user -a 'name=tom comment="tom is tom" uid=1066 group=tom groups=wheel shell=/bin/zshell home=/home/tomhome'
[root@Ansible ~]#getent passwd tom
tom:x:1066:1002:tom is tom:/home/tomhome:/bin/zshell

==========================================================================================

script

在指定節點運行服務端的腳本

[root@Ansible ~]#vim test.sh
#/bin/bash
touch /tmp/test.sh.log  #創建/tmp/test.sh.log
echo "hello" >> /tmp/test.sh.log  #將date命令結果輸出到/tmp/test.sh.log
在web組中所有主機執行/root/test.sh腳本
[root@Ansible ~]#ansible web -m script -a '/root/test.sh'
[root@Ansible ~]#cat /tmp/test.sh.log
hello
[root@node1 ~]#cat /tmp/test.sh.log
hello
查看172.16.251.163主機下的/tmp/test.sh.log
[root@Ansible ~]#ansible 172.16.251.163 -m shell -a ‘cat /tmp/test.sh.log’
172.16.251.163 | SUCCESS | rc=0 >>
hello

==========================================================================================

 

 

參考文檔:

http://www.ansible.com.cn/

http://docs.ansible.com/

https://www.ansible.com/

https://github.com/ansible/ansible

https://my.oschina.net/u/3413282/blog/876231

原創文章,作者:Linux.rookie,如若轉載,請注明出處:http://www.www58058.com/79792

(0)
Linux.rookieLinux.rookie
上一篇 2017-07-11
下一篇 2017-07-11

相關推薦

  • 如何學好C語言

    有人在酷殼的留言版上詢問下面的問題 keep_walker : 今天晚上我看到這篇文章。 http://programmers.stackexchange.com/questions/62502/small-c-projects 我也遇到了和提問的老外一樣的問題。。能給像遇到這樣煩惱的程序員一點建議嘛?謝謝! 我相信,這可能是很多朋友的問題,我以前…

    Linux干貨 2016-08-15
  • gzip壓縮算法

    gzip,zlib,以及圖形格式png,使用的是同一個壓縮算法deflate。我們通過對gzip源碼的分析來對deflate壓縮算法做一個詳細的說明: 第一,gzip壓縮算法基本原理的說明。 第二,gzip壓縮算法實現方法的說明。 第三,gzip實現源碼級的說明。 1. Gzip壓縮算法的原理      &n…

    Linux干貨 2015-07-30
  • find命令詳解

    find命令詳解 實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找; 一、工作特性: 查找速度略慢; 精確查找,只查找文件路徑的基名而非整個路徑; 實時查找; 可能只搜索用戶具備讀取和執行權限的目錄 二、 用法: find [查找起始路徑] [OPTIONS] [查找條件] [處理動作] 查找起始路徑:指定具體搜索目標起始路徑;默認為當前目錄…

    Linux干貨 2017-03-19
  • shell腳本之函數相關

       本節主要是作業和select 與case的相關 一、作業 1、斐波那契數列又稱黃金分割數列,因數學家列昂納多·斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……,斐波納契數列以如下被以遞歸的方法定義:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-…

    Linux干貨 2016-08-22
  • 第一周作業

    1. 描述計算機組成及其功能 說到計算機組成,就必須提及計算機之父馮洛伊曼先生。是他早年最先提出了計算機體系結構的設想,并沿用至今。 計算機由五大基本組件組成: 運算器 進行算術運算和邏輯運算的主要部件; 控制器 控制器從存儲器中逐條取出指令、分析指令,然后根據指令要求產生一系列命令,控制計算機各部件; 存儲器 分為內存和外存,…

    Linux干貨 2016-12-02
  • 第九周

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash for i in `cut -d':' -f7 /etc/passwd`;do &n…

    Linux干貨 2016-09-26
欧美性久久久久