[root@Ansible-server ~]# rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@Ansible-server ~]# ansible web -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k #使用ansible推送公鑰,免密管理
【Ansible-ping模塊】
[root@Ansible-server ~]# ansible web -m ping
【Ansible-command模塊】
為ansible默認模塊。主要用於執行linux基礎命令,可以執行遠程服務器命令執行,任務執行等操作 【參數詳解】
chdir #執行命令前,切換到目錄
creates #當該文件存在時,則不執行該步驟
executable #當切換shell環境執行命令
free_form #需要自行的腳本
removes #當該文件不存在時,則不執行該步驟
warn #如果在ansible.cfg中存在告警,如果設定了false,不會警告此行
[root@Ansible-server ~]# ansible web -m command -a "date "
[root@Ansible-server ~]# ansible web -m command -a "ping -c 2 baidu.com"
[root@Ansible-server ~]# ansible web -m command -a "mkdir xiaoyu.txt" #通過command模塊批量創建目錄
【Ansible-copy模塊】
主要用於文件或者目錄拷貝,支持文件,目錄,權限,用戶組功能,參數詳解如下
src #Ansible端源文件或者目錄,空文件不拷貝
content #用來替代src,用於將指定的文件內容,拷貝到遠程文件內
dest #客戶端目錄或文件,需要絕對路徑
backup #拷貝之前,先備份遠程節點上的原始文件;
directory_mode 用於拷貝文件夾,新建的文件會拷貝,而老舊的不會拷貝
follow #支持link文件拷貝
force #覆蓋遠程主機文件夾的組名
group #設定遠程主機文件及文件夾的權限
owner #設定遠程主機文件的用戶名
root@Ansible-server ~]# ansible web -m copy -a 'src=/etc/passwd dest=/tmp/ mode=755 owner=root'
[root@Ansible-server ~]# ansible web -m copy -a 'content="This homeway" dest=/tmp/passwd mode=755 owner=root'
【Ansible-yum模塊實戰】
Ansible yum模塊主要用於軟件的安裝,升級,卸載,支持紅帽.rpm軟件的管理,使用詳解如下:
conf_file #設定遠程yum執行所以來的yum配置文件
disable_gpg_check #安裝軟件報之前是夠堅持gpg,key;
name #需要安裝的軟件名稱
update_cache #安裝軟件錢更新緩存
enablerepo #指定repo源名稱
skip_broken #跳過異常軟件節點
state #軟件包狀態,包括:install,present,latest,removed
1)Ansible yum模塊操作,name表示需安裝的軟件名稱,state表示狀態,常見state= installed表示安裝軟件,
[root@Ansible-server ~]# ansible web -m yum -a "name=pcre-devel state=installed"
[root@Ansible-server ~]# rpm -qa pcre-devel
pcre-devel-7.8-7.el6.x86_64
2)name表示安裝軟件名稱,state表示狀態,常見state=installed表示安裝軟件,disable_gpg_check=no表示不檢查key;
[root@Ansible-server ~]# ansible web -m yum -a "name=popt-devel state=installed disable_gpg_check=no"
【Ansible file模塊實戰】
主要用於文件的創建,刪除,修改,權限,屬性的維護和管理
src Ansible端源文件或者目錄;
follow 支持link文件拷貝;
force 覆蓋遠程主機不一致的內容;
group 設定遠程主機文件夾的組名;
mode 指定遠程主機文件及文件及的權限;
owner 設定遠程主機文件夾的用戶名;
path 目標路徑,也可以用dest,name代替;
state 狀態包括:file、link、directory、hard、touch、absent;
attributes 文件或者目錄特殊屬性。
[root@Ansible-server tmp]# ansible web -m file -a "path=/tmp/`date +%F` state=directory mode=755" #在/tmp/目錄下創建時間目錄
[root@Ansible-server tmp]# ansible web -m file -a "path=/tmp/hexun.com state=touch mode=755" #創建“hexun.com”文件,權限為755
【Ansible user模塊實戰】
主要用於操作系統用戶,組,權限,密碼等操作;
system 默認創建為普通用戶,為yes則創建系統用戶;
append 添加一個新的組;
comment 新增描述信息;
createhome 給用戶創建家目錄;
force 用於刪除強制刪除用戶;
group 創建用戶主組;
groups 將用戶加入組或者附屬組添加;
home 指定用戶的家目錄;
name 表示狀態,是否create、remove、modify;
password 指定用戶的密碼,此處為加密密碼;
remove 刪除用戶;
shell 設置用戶的shell登錄環境;
uid 設置用戶id;
update_password 修改用戶密碼;
state 用戶狀態,默認為present表示新建用戶
[root@Ansible-server ~]# ansible web -m user -a "name=xiaoyu home=/tmp"
[root@Ansible-server ~]# tail -1 /etc/passwd
xiaoyu:x:500:500::/tmp:/bin/bash
[root@Ansible-server ~]# ansible web -m user -a "name=user1 home=/tmp shell=/sbin/nologin"
[root@Ansible-server ~]# tail -1 /etc/passwd
user1:x:501:501::/tmp:/sbin/nologin
[root@Ansible-server ~]# ansible web -m user -a "name=xiaoyu state=absent"
【Ansible-cron模塊實戰】
主要用於添加,刪除,更新操作系統crontab任務計划
name 任務計划名稱;
cron_file 替換客戶端該用戶的任務計划的文件;
minute 分( 0-59 ,* ,*/2 );
hour 時( 0-23 ,* ,*/2 );
day 日( 1-31 ,* ,*/2 );
month 月( 1-12 ,* ,*/2 );
weekday 周( 0-6 或 1-7 ,* );
job 任何計划執行的命令,state要等於present;
backup 是否備份之前的任務計划;
user 新建任務計划的用戶;
state 指定任務計划present、absent。
[root@Ansible-server ~]# ansible web -m cron -a "minute=* hour=* day=* month=* weekday=* name='This is chrontab' job='/usr/sbin/ntpdate 192.168.2.138'" #設置時間同步計划任務
【Ansible synchronize模塊實戰】
compress 開啟壓縮,默認為開啟;
archive 是否采用歸檔模式同步,保證源和目標文件屬性一致;
checksum 是否效驗;
dirs 以非遞歸的方式傳輸目錄;
links 同步鏈接文件;
recursive 是否遞歸yes/no;
rsync_opts 使用rsync 的參數;
copy_links 同步的時候是否復制連接;
delete 刪除源中沒有而目標存在的文件;
src 源目錄及文件;
dest 目標目錄及文件;
dest_port 目標接受的端口;
rsync_path 服務的路徑,指定 rsync 命令來在遠程服務器上運行;
rsync_timeout 指定rsync操作的IP超時時間;
set_remote_user 設置遠程用戶名;
--exclude=.log 忽略同步.log結尾的文件;
mode 同步的模式,rsync同步的方式PUSH、PULL,默認都是推送push。
[root@localhost hexun]# ansible web -m synchronize -a 'src=/root/hexun/ dest=/root/hexunback/'
【Ansible-service模塊實戰】
主要用於遠程客戶端各種服務端的管理
enabled 是否開啟啟動服務;
name 服務名稱;
runlevel 服務啟動級別;
arguments 服務命令行參數傳遞;
state 服務操作狀態,狀態包括started, stopped, restarted, reloaded
[root@localhost ~]# ansible web -m service -a "name=httpd state=restarted"
遠程開機啟動nfs服務,設置3,5級別自動啟動
【Ansible-Playbook應用】
使用Ad-hoc方式點對點命令執行,可以管理遠程主機,如果服務器數量很多,配置信息比較多,還可以利用Ansible-Playbook便攜腳本,從而以非常簡單的方式事先任務樹立的自動化與流程化,
Playbook由一個或多個“play”組成的列表,play的主要功能ansible中的Task定義好的角色,指定劇本對應的服務器組
從根本上說,Task是一個任務,Task調用ansible各種模塊module,將多個paly組織在一個playbook劇本中,然后組成一個非常完整的流程控制集合
基於Ansible Playbook還可以收集命令,易於閱讀,方便管理
YAML是一個直觀的能夠背電腦識別的數據據序列化格式,是一個可讀性高並容易被人閱讀,容易和奇偶按本語言交互,用來表達資料序列的編程語言,
它參考了其它多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822,是類似於標准通用標記語言的子集XML的數據描述語言,語法比XML簡單很多。
YAML使用空白字符和分行來分隔資料,適合用 grep、Python、Perl、Ruby 操作。
(1)YAML語言特性如下:
可讀性強;
和腳本語言的交互性好;
使用實現語言的數據類型;
一致的信息模型;
易於實現;
可以基於流來處理;
可擴展性強。
(2) Playbooks組件包括如下:
Target 定義playbook的遠程主機組; Variable 定義playbook使用的變量; Task 定義遠程主機上執行的任務列表; Handler 定義task執行完成以后需要調用的任務,例如配置文件被改動,則啟動handler任務重啟相關聯的服務。 |
(1) Target常用參數如下:
hosts 定義遠程主機組; user 執行該任務的用戶; sudo 設置為yes的時候,執行任務的時候使用root權限; sudo_user 指定sudo普通用戶; connection 默認基於SSH連接客戶端; gather_facks 獲取遠程主機facts基礎信息。 |
(2) Variable常用參數如下:
vars 定義格式,變量名:變量值; vars_files 指定變量文件; vars_prompt 用戶交互模式自定義變量; setup 模塊去遠程主機的值; |
(3) Task常用參數如下:
name 任務顯示名稱也即屏幕顯示信息; action 定義執行的動作; copy 復制本地文件到遠程主機; template 復制本地文件到遠程主機,可以引用本地變量; service 定義服務的狀態。 |
Ansible playbook案例演示如下:
(1) 遠程主機安裝Nginx WEB服務,playbook代碼如下,執行結果如圖21-33所示:
- hosts: all remote_user: root tasks: - name: Jfedu Pcre-devel and Zlib LIB Install. yum: name=pcre-devel,pcre,zlib-devel state=installed - name: Jfedu Nginx WEB Server Install Process. shell: cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx;make;make install |
(1) 檢測遠程主機Nginx目錄是否存在,不存在則安裝Nginx WEB服務,安裝完並啟動Nginx,playbook代碼如下,執行結果如圖21-34所示:
- hosts: all remote_user: root tasks: - name: Nginx server Install 2017 file: path=/usr/local/nginx/ state=directory notify: - nginx install - nginx start handlers: - name: nginx install shell: cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf nginx-1.12.0 .tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx;make;make install - name: nginx start shell: /usr/local/nginx/sbin/nginx |