第三十八節(jié)課綜合架構(gòu)批量管理 ansible(自動(dòng)化軟件)

  1. ansible應(yīng)用配置說明

    1. 掌握功能模塊
      · 第一個(gè)模塊: command 命令模塊 批量執(zhí)行命令 默認(rèn)模塊
      ansible oldboy -m command -a "hostname"

    · 第二個(gè)模塊: shell 命令模塊 批量執(zhí)行命令 萬能模塊
    ansible oldboy -m shell -a "yum install -y htop"
    ansible oldboy -m shell -a "cd /tmp;pwd"

    用法問題:

    1. 不如專業(yè)模塊執(zhí)行批量管理功能效率更高
    2. 不像專業(yè)模塊具有冪等性(一個(gè)命令可以反復(fù)操作執(zhí)行)

    第一個(gè)里程: 編寫腳本
    第二個(gè)里程: 將腳本進(jìn)行分發(fā)
    ansible oldboy -m copy -a "src=/server/scripts/create_user.sh dest=/server/scripts/"
    第三個(gè)里程: 修改腳本權(quán)限
    ansible oldboy -m file -a "path=/server/scripts/create_user.sh mode=755"
    第四個(gè)里程: 批量執(zhí)行腳本
    ansible oldboy -m shell -a "/server/scripts/create_user.sh"

    · 第三個(gè)模塊: script 命令模塊 批量運(yùn)行腳本
    第一個(gè)里程: 編寫腳本
    第二個(gè)里程: 批量執(zhí)行腳本
    ansible oldboy -m script -a "/server/scripts/create_user.sh"

    · 第四個(gè)模塊: copy 文件模塊 可以將管理端數(shù)據(jù)進(jìn)行批量分發(fā)/可以移動(dòng)調(diào)整被管理端數(shù)據(jù)位置
    重要模塊參數(shù):
    src: 指定管理端要分發(fā)的數(shù)據(jù)路徑信息
    dest: 指定數(shù)據(jù)傳輸?shù)奖还芾矶耸裁茨夸浿?br> mode: 數(shù)據(jù)傳輸完畢后,設(shè)置數(shù)據(jù)權(quán)限信息
    owner: 數(shù)據(jù)傳輸完畢后,設(shè)置數(shù)據(jù)屬主信息
    group: 數(shù)據(jù)傳輸完畢后,設(shè)置數(shù)據(jù)屬組信息
    backup: 是否開啟數(shù)據(jù)分發(fā)備份功能 了解
    remote_src: 指定源的路徑信息,從被管理端進(jìn)行讀取
    content: 可以直接不在管理端創(chuàng)建文件,對(duì)文件進(jìn)行分發(fā),并且可以編輯文件簡單內(nèi)容信息
    validate: ???

    模塊參數(shù)用法一:
    ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ mode=600 owner=oldboy group=oldboy"
    說明: 對(duì)目錄進(jìn)行分發(fā)

    1. 修改文件權(quán)限信息 和 文件屬主屬組信息
    2. 可以在被管理端創(chuàng)建指定目錄信息

    ansible oldboy -m copy -a "src=/oldboy/ dest=/oldboy/"
    說明: 對(duì)目錄進(jìn)行分發(fā)
    src指定目錄后面有斜線 oldboy/ xxxxxx
    src指定目錄后面沒斜線 oldboy xxxxxx

    模塊參數(shù)用法二: 備份數(shù)據(jù)/還原數(shù)據(jù)方法
    傳輸備份文件數(shù)據(jù)方法一:
    ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ backup=yes"

    傳輸備份文件數(shù)據(jù)方法二:
    ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy.txt.bak remote_src=yes"
    還原數(shù)據(jù)
    ansible oldboy -m copy -a "src=/oldboy/oldboy.txt.bak dest=/oldboy/oldboy.txt remote_src=yes"

    ============================================================================
    參數(shù)說明
    ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/ remote_src=yes"
    == 相應(yīng)被管理端 mv /oldboy/oldboy.txt /opt/
    ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/"
    == 相應(yīng)管理端 scp -rp /oldboy/oldboy.txt xx.xx.xx.xx:/opt/
    ============================================================================

    · 第五個(gè)模塊: fetch 文件模塊 進(jìn)行數(shù)據(jù)拉取操作
    重要參數(shù):
    src : 指定遠(yuǎn)程主機(jī)需要拉取數(shù)據(jù)信息
    dest : 將數(shù)據(jù)保存到本地管理主機(jī)什么路徑中

    拉取數(shù)據(jù)方法:
    ansible oldboy -m fetch -a "src=/opt/password.txt dest=/oldboy"

    拉取后數(shù)據(jù)信息
    [root@m01 ~]# tree /tmp/172.16.1.41/
    /tmp/172.16.1.41/
    └── etc
    └── httpd
    └── conf
    └── httpd.conf

    3 directories, 1 file

    第六個(gè)模塊: file 文件模型 可以修改文件數(shù)據(jù)屬性信息(直接修改數(shù)據(jù)屬性)/創(chuàng)建或刪除數(shù)據(jù)信息
    重要參數(shù):
    path: 指定要操作的遠(yuǎn)程主機(jī)數(shù)據(jù)路徑信息
    mode: 修改文件權(quán)限信息
    owner: 修改文件屬主信息
    group: 修改文件屬組信息
    state: 狀態(tài)參數(shù)信息
    創(chuàng)建目錄(directory) 創(chuàng)建文件(touch) 創(chuàng)建軟連接(link) 創(chuàng)建硬鏈接(hard) 刪除文件(absent) 查看文件是否存在(file)

    模塊參數(shù)用法一: 修改文件屬性信息
    修改文件權(quán)限屬性信息:
    ansible 172.16.1.41 -m file -a "path=/etc/hosts mode=666 owner=oldboy group=oldboy"
    修改目錄權(quán)限屬性信息: 問題* 如何遞歸修改目錄權(quán)限???
    ansible 172.16.1.41 -m file -a "path=/oldboy/ mode=666 owner=oldgirl group=oldgirl"
    說明: 只是修改目錄本身權(quán)限,不會(huì)進(jìn)行遞歸修改權(quán)限信息(沒有-R功能)

    模塊參數(shù)用法二: 創(chuàng)建或刪除文件數(shù)據(jù)
    創(chuàng)建目錄:
    ansible 172.16.1.41 -m file -a "path=/oldboy/ state=directory"
    創(chuàng)建文件:
    ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=touch"
    創(chuàng)建鏈接:
    ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt path=/oldboy/oldboy_soft_link state=link" --- 創(chuàng)建軟鏈接
    ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt path=/oldboy/oldboy_hard_link state=hard" --- 創(chuàng)建硬鏈接
    刪除數(shù)據(jù):
    ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=absent"
    檢查普通文件是否存在
    ansible 172.16.1.41 -m file -a "path=/etc/hosts state=file"

    第七個(gè)模塊: user 用戶模塊 創(chuàng)建或刪除用戶信息
    name: 指定創(chuàng)建用戶名稱信息
    create_home: 創(chuàng)建用戶是否有家目錄
    shell: 指定用是否能夠登陸系統(tǒng) 虛擬用戶 /sbin/nologin
    uid: 指定用戶uid數(shù)值
    password 指定用戶密碼信息*** 使用密文信息設(shè)置密碼
    state: 默認(rèn)present表示創(chuàng)建用戶 使用absent刪除用戶信息
    group: 指定用戶屬于哪個(gè)用戶組 (主要組) == useradd -g
    groups: 指定用戶屬于哪個(gè)用戶組 (附屬組) == useradd -G

    模塊參數(shù)用法一: 創(chuàng)建用戶
    ansible 172.16.1.41 -m user -a "name=rsync uid=2000 create_home=no shell=/sbin/nologin" --- 創(chuàng)建虛擬用戶
    ansible 172.16.1.41 -m user -a "name=oldboy uid=2001" --- 創(chuàng)建普通用戶

    模塊參數(shù)用法二: 給創(chuàng)建用戶設(shè)置密碼
    ansible 172.16.1.41 -m user -a 'name=oldboy password=6123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1'

    模塊參數(shù)用法三: 刪除用戶信息
    ansible 172.16.1.41 -m user -a 'name=oldboy state=absent'
    說明: 在刪除用戶是不會(huì)刪除用戶家目錄. 問題* 如何將用戶家目錄刪除 == userdel -r
    [root@backup oldboy]# ll /home/oldboy -d
    drwx------ 2 2001 2001 83 Aug 23 11:33 /home/oldboy

    ================================================================================================
    補(bǔ)充: 利用user模塊創(chuàng)建密文密碼信息
    方法一:
    ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
    mypassword: 指定明文密碼信息
    mysecretsalt: 密碼加密方式
    生成密文密碼
    [root@m01 ~]# ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', '123456') }}"
    localhost | SUCCESS => {
    "msg": "6123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1"
    }

    方法二: 利用python命令生成密文信息
    第一個(gè)歷程: 安裝pip下載工具
    yum install -y python-pip
    第二個(gè)歷程: 利用pip工具下載python程序包
    pip install passlib
    第三個(gè)歷程: 生成密文信息
    [root@m01 ~]# python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
    Password:
    6IQhh.egT4ow2dzmd$fk9W1.J4q1ArQ8nykkhh5A0waFbgU1Qa4sUdNm42.oYSpSMmIIl0262cSDg1Q6Ph8p3rnqHOs372A.GzD11.w/
    ================================================================================================

    第八個(gè)模塊: group 用戶模塊 創(chuàng)建或刪除用戶組信息
    重要參數(shù)信息
    name: 指定創(chuàng)建用戶組名稱信息
    gid: 指定創(chuàng)建用戶組id編號(hào)信息
    state: 默認(rèn)present 指定absent表示刪除用戶組

    模塊參數(shù)用法一: 創(chuàng)建指定用戶組
    ansible 172.16.1.41 -m group -a "name=oldboy gid=3000"

    模塊參數(shù)用法二: 刪除指定用戶組
    ansible 172.16.1.41 -m group -a "name=oldboy state=absent"

    第九個(gè)模塊: yum 安裝軟件模塊 安裝軟件/卸載軟件
    name: 指定需要安裝軟件名稱
    state: 指定狀態(tài)信息
    安裝軟件(installed latest present) 卸載軟件(absent removed)

    模塊參數(shù)用法一: 安裝軟件程序
    ansible 172.16.1.41 -m yum -a "name=telnet-server state=installed"

    模塊參數(shù)用法二: 卸載軟件程序
    ansible 172.16.1.41 -m yum -a "name=telnet-server state=absent"

    第十個(gè)模塊: service 系統(tǒng)模塊 控制服務(wù)運(yùn)行狀態(tài)
    重要參數(shù):
    name: 指定要管理的服務(wù)名稱
    state: 指定服務(wù)運(yùn)行狀態(tài)
    停止(stopped) 啟動(dòng)(started) 重啟(restarted) 平滑重啟(reloaded)
    enabled: 指定服務(wù)是否開機(jī)自動(dòng)啟動(dòng) yes開機(jī)自啟 no開機(jī)不要運(yùn)行

    模塊參數(shù)用法一: 控制服務(wù)運(yùn)行狀態(tài):
    ansible 172.16.1.41 -m service -a "name=rsyncd state=started"
    ansible 172.16.1.41 -m service -a "name=rsyncd state=stopped"
    ansible 172.16.1.41 -m service -a "name=rsyncd state=restarted"
    ansible 172.16.1.41 -m service -a "name=rsyncd state=reloaded"

    模塊參數(shù)用法二: 設(shè)置服務(wù)開機(jī)運(yùn)行狀態(tài):
    ansible 172.16.1.41 -m service -a "name=rsyncd enabled=no"
    ansible 172.16.1.41 -m service -a "name=rsyncd enabled=yes"

    第十一個(gè)模塊: cron 系統(tǒng)模塊 批量設(shè)置定時(shí)任務(wù)
    name : 定義定時(shí)任務(wù)注釋信息/避免出現(xiàn)重復(fù)的定時(shí)任務(wù)
    minute : 指定時(shí)間信息中分鐘信息 (0-59 */5 0,10)
    hour : 指定時(shí)間信息中小時(shí)信息 (0-23 *)
    day : 指定時(shí)間信息中日期信息 (1-31)
    month : 指定時(shí)間信息中月份信息 (1-12)
    weekday : 指定時(shí)間信息中星期信息 (0-6)
    job : 指定定時(shí)任務(wù)命令信息

    crontab -e

            • 執(zhí)行定時(shí)任務(wù) &>/dev/null

    模塊參數(shù)用法一: 批量設(shè)置定時(shí)任務(wù)
    ansible 172.16.1.41 -m cron -a "name=crond-id-02 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"

    模塊參數(shù)用法二: 刪除定時(shí)任務(wù)
    ansible 172.16.1.41 -m cron -a "name=crond-id-02 state=absent"

    模塊參數(shù)用法三: 注釋定時(shí)任務(wù)
    ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
    ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=
    /5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"

    第十二個(gè)模塊: mount 系統(tǒng)模塊 進(jìn)行批量掛載操作
    src: 掛載存儲(chǔ)設(shè)備信息
    path: 掛載點(diǎn)目錄信息
    fstype: 掛載的文件系統(tǒng)類型
    state: 指定掛載或是卸載
    掛載: mounted present
    mounted: 臨時(shí)掛載存儲(chǔ)目錄信息 永久也掛載了存儲(chǔ)目錄信息 推薦
    present: 只是實(shí)現(xiàn)永久掛載

           卸載: unmounted absent            
           unmounted: 只是實(shí)現(xiàn)臨時(shí)卸載
           absent:    臨時(shí)實(shí)現(xiàn)卸載    永久也實(shí)現(xiàn)卸載操作
    

    參數(shù)操作方法一: 進(jìn)行掛載操作
    ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
    ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=present"

    參數(shù)操作方法二: 進(jìn)行卸載操作
    ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=unmounted"
    ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=absent"

====================================================================
補(bǔ)充: 如何學(xué)習(xí)模塊使用方法:
01. 簡單了解模塊作用
    command – Execute commands on targets  在目標(biāo)主機(jī)上執(zhí)行命令模塊
02. 模塊詳細(xì)說明
03. 掌握模塊參數(shù)用法
    根據(jù)樣例學(xué)習(xí)參數(shù)信息
    
補(bǔ)充: 學(xué)習(xí)ansible會(huì)有不同顏色提示
01. 綠色: 對(duì)主機(jī)信息進(jìn)行查看, 操作執(zhí)行成功
02. 黃色: 對(duì)主機(jī)信息進(jìn)行查看, 對(duì)主機(jī)中信息有調(diào)整修改
03. 紫色: 錯(cuò)誤提示信息, 建議忠告信息
04. 紅色: 報(bào)錯(cuò)提示信息  
====================================================================




需求: 如何利用ansible模塊, 進(jìn)行rsync服務(wù)部署
考察: 所學(xué)習(xí)模塊是否能夠靈活應(yīng)用
思路:
第一個(gè)歷程: 確認(rèn)好管理主機(jī)信息
管理服務(wù)端主機(jī): 172.16.1.41 
管理客戶端主機(jī): 172.16.1.31 172.16.1.7 

第二個(gè)歷程: 配置主機(jī)清單信息
vim /etc/ansible/hosts
[rsync_server]
172.16.1.41 
[rsync_client]
172.16.1.31
172.16.1.7

第三個(gè)歷程: 進(jìn)行rsync服務(wù)部署 
服務(wù)端:
1) 安裝軟件
   ansible rsync_server -m yum -a "name=rsync state=installed"
2) 編寫配置文件
   ansible rsync_server -m copy -a "src=/ansible_file/rsync/rsyncd.conf  dest=/etc/"
3) 創(chuàng)建虛擬用戶 
   ansible rsync_server -m user -a "name=rsync create_home=no shell=/sbin/nologin"
4) 創(chuàng)建密碼文件并授權(quán)
   ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password  mode=600"
5) 創(chuàng)建備份目錄并授權(quán)
   ansible rsync_server -m file -a "path=/backup/ state=directory owner=rsync group=rsync"
6) 啟動(dòng)服務(wù)程序   
   ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"
    
客戶端:
1) 創(chuàng)建密碼文件 
   ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
2) 進(jìn)行傳輸測(cè)試 擴(kuò)展研究:synchronize
   ansible rsync_client -m shell -a "rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password"



3) 掌握劇本編寫
   將多個(gè)模塊操作命令進(jìn)行整合
   模塊 === 命令 
   劇本 === shell腳本
   
   作用說明:
   01. 可以實(shí)現(xiàn)服務(wù)自動(dòng)部署
   02. 可以提高運(yùn)維工作效率
   03. 可以減少運(yùn)維工作問題
   04. 可以節(jié)省公司運(yùn)維成本

   劇本編寫組成:
   1. 劇本角色信息: hosts --主機(jī)信息
   2. 劇本任務(wù)信息: tasks --任務(wù)信息 

   劇本編寫規(guī)范:  遵循yaml語法規(guī)范 == python代碼語法規(guī)范
   01. 縮進(jìn)規(guī)范: 兩個(gè)空格表示一個(gè)縮進(jìn)關(guān)系
       標(biāo)題一
         標(biāo)題二           
           標(biāo)題三
       PS: 在縮進(jìn)時(shí)只能用空格表示縮進(jìn),不能用tab鍵代替縮進(jìn)
       
   02. 字典規(guī)范: 冒號(hào)后面要有空格
       oldboy: 123456  key: value
       PS: 冒號(hào)結(jié)尾時(shí)不需要有空格/冒號(hào)信息出現(xiàn)在注釋說明中不需要有空格
       
   03. 列表規(guī)范: 橫線后面要有空格
       name:
         - rsync 
         - nfs 
         - rpcbind 
         
   編寫測(cè)試劇本:
   [root@m01 ansible_playbook]# cat /ansible_playbook/test01.yml 
   - hosts: rsync_server
     tasks:
       - name: create user:alex
         user: name=alex uid=3000
       - name: install software:iftop
         yum: name=iftop state=installed
   
   - hosts: rsync_client
     tasks:
       - name: create user:alex
         user: name=alex uid=3000

   劇本測(cè)試執(zhí)行方法:
   1) 進(jìn)行劇本編寫檢查測(cè)試
      ansible-playbook --syntax-check /ansible_playbook/test01.yml
   2) 劇本運(yùn)行方式
      模擬執(zhí)行:
      ansible-playbook -C test01.yml
      
      =================================================================================
      補(bǔ)充: 取消cowsay小牛圖案出現(xiàn)
      vim /etc/ansible/ansible.cfg   --- 編寫修改ansible配置文件
      217 # set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
      218 nocows = 1    --- 禁止調(diào)取遠(yuǎn)程主機(jī)cowsay程序
      =================================================================================  
      
      真實(shí)執(zhí)行:
      ansible-playbook -C test01.yml

   測(cè)驗(yàn): 編寫劇本完成nfs服務(wù)一鍵自動(dòng)部署
   第一個(gè)歷程: 定義主機(jī)清單信息
   [nfs_server]
   172.16.1.31
   [nfs_client]
   172.16.1.41
   172.16.1.7
   
   第二個(gè)歷程: 編寫劇本信息
   服務(wù)端:
   1) 安裝軟件程序
   2) 編寫配置文件 
   3) 創(chuàng)建存儲(chǔ)目錄
   4) 啟動(dòng)服務(wù)程序 
   
   客戶端:
   1) 安裝軟件程序
   2) 進(jìn)行掛載操作
   
   
   劇本編寫方法:
   01: 采用變量格式編寫劇本
   02: 采用字典格式編寫劇本
   03: 采用json語法格式編寫劇本 ???
   
   劇本信息: 方法一 變量格式編寫劇本
   - hosts: nfs_server
     tasks:
       - name: 01:install software
         yum: name=nfs-utils state=installed
         yum: name=rpcbind   state=installed
       - name: 02:push conf_file to server
         copy: src=./nfs/exports dest=/etc/
       - name: 03:create data dir
         file: path=/data  state=directory owner=nfsnobody group=nfsnobody
       - name: 04:boot server
         service: name=rpcbind state=started enabled=yes
         service: name=nfs state=started enabled=yes
  
  - hosts: nfs_client
    tasks:
      - name: 01:install software
        yum: name=nfs-utils state=installed
      - name: 02:mount data dir
        shell: mount -t nfs 172.16.1.31:/data /mnt
   
   劇本信息: 方法二 字典格式編寫劇本   
   - hosts: nfs_server
     tasks:
       - name: 01:install software
         yum:
           name:
             - nfs-utils 
             - rpcbind
           state: installed
       - name: 02:push conf_file to server
         copy:
           src: ./nfs/exports
           dest: /etc/
       - name: 03:create data dir
         file:
           path: /data
           state: directory
           owner: nfsnobody
           group: nfsnobody
       - name: 04:boot server rpc
         service:
           name: rpcbind
           state: started
           enabled: yes
       - name: 05:boot server nfs
         service:
           name: nfs
           state: started
           enabled: yes

   - hosts: nfs_client
     tasks:
       - name: 01:install software
         yum:
           name: nfs-utils
           state: installed
       - name: 02:mount data dir
         shell: mount -t nfs 172.16.1.31:/data /mnt 
   
5) 劇本編寫擴(kuò)展功能    
a 在劇本中設(shè)置變量信息  OK
b 在劇本中設(shè)置注冊(cè)信息  OK
c 在劇本中設(shè)置判斷信息
d 在劇本中設(shè)置循環(huán)信息
e 在劇本中設(shè)置錯(cuò)誤忽略
f 在劇本中設(shè)置標(biāo)簽信息
g 在劇本中設(shè)置觸發(fā)信息
   
   
a 在劇本中設(shè)置變量信息     
設(shè)置變量方法一: 在劇本中設(shè)置變量 
- hosts: 172.16.1.41
  vars:
    data_dir: /oldboy
  tasks:
    - name: copy file 01
      copy: src={{ data_dir }}/oldboy01.txt  dest=/tmp
    - name: copy file 02
      copy: src={{ data_dir }}/oldboy02.txt  dest=/opt
    - name: copy file 03
      copy: src={{ data_dir }}/oldboy03.txt  dest=/usr/local/

設(shè)置變量方法二: 在命令中設(shè)置變量
ansible-playbook -e data_dir=/oldboy test_變量配置功能.yml

設(shè)置變量方法三: 在主機(jī)清單中設(shè)置
a: 單個(gè)主機(jī)設(shè)置變量
172.16.1.41 data_dir=/oldboy

b: 多個(gè)主機(jī)設(shè)置變量
[oldboy]
172.16.1.41
[oldboy:vars]
data_dir=/oldboy    
   
問題: 三種變量設(shè)置方式, 之間優(yōu)先級(jí)關(guān)系是什么   
創(chuàng)建環(huán)境:
mkdir /oldboy/ -p
mkdir /oldgirl/ -p 
mkdir /olddog/ -p
結(jié)論:
命令配置變量  最優(yōu)先
劇本配置變量  其次優(yōu)先
主機(jī)清單配置  最后選擇    
   
b 在劇本中設(shè)置注冊(cè)信息       
[root@m01 ansible_playbook]# cat test_注冊(cè)功能配置.yml 
- hosts: nfs_client
  tasks:
    - name: mount dir
      mount: src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted
    - name: check mount
      shell: df -h
      register: oldboy
    - name: display mount info
      debug: msg={{ oldboy.stdout_lines }}     
   
   
c 在劇本中設(shè)置判斷信息
  常見主機(jī)信息:
  ansible_all_ipv4_addresses:               僅顯示ipv4的信息对室。
  ansible_devices:                          僅顯示磁盤設(shè)備信息黍聂。
  ansible_distribution:                 顯示是什么系統(tǒng)展运,例:centos,suse等。
  ansible_distribution_major_version:       顯示是系統(tǒng)主版本钧嘶。
  ansible_distribution_version:         僅顯示系統(tǒng)版本躁倒。
  ansible_machine:                          顯示系統(tǒng)類型幔亥,例:32位,還是64位察纯。
  ansible_eth0:                         僅顯示eth0的信息帕棉。
  ansible_hostname:                     僅顯示主機(jī)名。
  ansible_kernel:                           僅顯示內(nèi)核版本饼记。
  ansible_lvm:                              顯示lvm相關(guān)信息香伴。
  ansible_memtotal_mb:                      顯示系統(tǒng)總內(nèi)存。
  ansible_memfree_mb:                       顯示可用系統(tǒng)內(nèi)存具则。
  ansible_memory_mb:                        詳細(xì)顯示內(nèi)存情況即纲。
  ansible_swaptotal_mb:                 顯示總的swap內(nèi)存。
  ansible_swapfree_mb:                      顯示swap內(nèi)存的可用內(nèi)存博肋。
  ansible_mounts:                           顯示系統(tǒng)磁盤掛載情況低斋。
  ansible_processor:                        顯示cpu個(gè)數(shù)(具體顯示每個(gè)cpu的型號(hào))。
  ansible_processor_vcpus:                  顯示cpu個(gè)數(shù)(只顯示總的個(gè)數(shù))匪凡。   
  
  - hosts: all
    tasks:
      - name: install software
        yum: name=nfs-utils state=installed
      - name: create data dir
        file: path=/data/ state=directory
        when: (ansible_hostname == "nfs01")   
        
  判斷語法結(jié)構(gòu)信息:
  01. 匹配單個(gè)信息:
  when: (ansible_hostname == "nfs01")
  
  02. 匹配多個(gè)信息 ???
  when: (ansible_hostname == "nfs01") or  (ansible_hostname == "backup") 
  when: (ansible_hostname == "nfs01") and (ansible_eth0 == "10.0.0.31")
  
  03. 對(duì)匹配信息進(jìn)行取反
  when: (ansible_hostname != "nfs01")
  1. 課程知識(shí)總結(jié)
    1. ansible模塊進(jìn)行詳細(xì)說明
      command shell script
      copy fetch file
      user group
      yum service
      cron mount
    2. ansible劇本編寫說明
      劇本組成部分:
      1. play角色信息--hosts
      2. task任務(wù)信息--tasks
        劇本編寫規(guī)范:
      3. 縮進(jìn)規(guī)范: 兩個(gè)空格表示一個(gè)縮進(jìn)關(guān)系
      4. 字典規(guī)范: 冒號(hào)后面需要有空格
      5. 列表規(guī)范: 橫線后面需要有空格
    3. ansible劇本編寫擴(kuò)展方法
      a 劇本設(shè)置變量功能
      b 劇本設(shè)置注冊(cè)功能
      c 劇本設(shè)置判斷功能
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膊畴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子病游,更是在濱河造成了極大的恐慌唇跨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衬衬,死亡現(xiàn)場(chǎng)離奇詭異买猖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)滋尉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門玉控,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兼砖,你說我怎么就攤上這事奸远。” “怎么了讽挟?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵懒叛,是天一觀的道長。 經(jīng)常有香客問我耽梅,道長薛窥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮诅迷,結(jié)果婚禮上佩番,老公的妹妹穿的比我還像新娘。我一直安慰自己罢杉,他們只是感情好趟畏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滩租,像睡著了一般赋秀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上律想,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天猎莲,我揣著相機(jī)與錄音,去河邊找鬼技即。 笑死著洼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的而叼。 我是一名探鬼主播身笤,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼葵陵!你這毒婦竟也來了展鸡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤埃难,失蹤者是張志新(化名)和其女友劉穎莹弊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涡尘,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忍弛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考抄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片细疚。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖川梅,靈堂內(nèi)的尸體忽然破棺而出疯兼,到底是詐尸還是另有隱情,我是刑警寧澤贫途,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布吧彪,位于F島的核電站,受9級(jí)特大地震影響丢早,放射性物質(zhì)發(fā)生泄漏姨裸。R本人自食惡果不足惜秧倾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傀缩。 院中可真熱鬧那先,春花似錦、人聲如沸赡艰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慷垮。三九已至勋又,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間换帜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工鹤啡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惯驼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓递瑰,卻偏偏與公主長得像祟牲,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抖部,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355