Ansible實戰演練


[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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM