自動化運維工具——ansible命令使用(二)


一、Ansible系列命令使用

ansible命令執行過程

  • 1 . 加載自己的配置文件 默認/etc/ansible/ansible.cfg
  • 2 . 加載自己對應的模塊文件,如command
  • 3 . 通過ansible將模塊或命令生成對應的臨時py文件,並將該文件傳輸至遠程服務器的對應執行用戶$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY文件
  • 4 . 給文件+x執行
  • 5 . 執行並返回結果
  • 6 . 刪除臨時py文件,sleep 0退出

執行狀態:

  • 綠色:執行成功並且不需要做改變的操作
  • 黃色:執行成功並且對目標主機做變更
  • 紅色:執行失敗

1. ansible命令

    ansible <host-pattern> [-m module_name] [-a args]
        -a                       //后面跟參數
        --version            //顯示版本
        --m module        //指定模塊,默認使用command模塊
        -v                       //顯示詳細過程  -vv  -vvv 顯示更詳細
        --list-hosts          //顯示主機列表,可簡寫-list
        -k,--ask-pass   //提示連接密碼,默認key驗證
        -K,--ask-become-pass       //提示輸入sudo
        -C,--check          //檢查命令,並不執行
        -T,--timeout=TIMEOUT     //執行命令的超時時間,默認10s
        -u,--user=REMOTE_USER    //執行遠程操作的 執行的用戶
        -b,--become     //代替舊版的sudo切換
示例:
        ansible all  -m command -u yunwei  --become-user=root -a 'ls /root' -b -k -K
                //以yunwei用戶 sudo 到root用戶 執行 ls /root
  • ansible的host-pattern

         //匹配主機的列表
    
all :表示所有inventory中的所有主機
    ansible all -m  ping //ping一下主機清單中的所有主機是否能正常登陸,但是不是icmp協議的ping命令

       ansible all  --list-hosts

*:通配符
    ansible "*"   -m ping
    ansible  172.16.1.* -m ping
    ansible  "*Server"  -m  ping
    //或關系:
        ansible "webServer:appServer" -m ping
        ansible "192.168.1.10:192.168.1.20" -m ping	
    //邏輯與:
        ansible "webServer:&mysqlServer" –m ping
        在webServer組並且在mysqlServer組中的主機
    //邏輯非:
        ansible webServer:!mysqlServer' –m ping
        在websrvs組,但不在mysqlServer組中的主機
    //綜合邏輯:
        ansible 'webServer:mysqlServer:&appServer:!ftpServer' –m ping
    //正則表達式:
        ansible "webServer:&mysqlServer" –m ping
        ansible "~(web|wj).*\.bigboss\.com" –m ping

2. ansible常用模塊

1. command 模塊,默認模塊

    在遠程主機執行命令,默認模塊,可忽略-m選項
    ansible  mysqlServer -m command -a 'systemctl restart mysqld'

    ansible webServer -m command -a 'echo 123456 |passwd --stdin yunwei' 
    ansible webServer -m command -a 'echo "123456" >f1'
    //顯示已經執行成功,但是遠程主機並沒有產生操作



注意command模塊不支持 變量$VarName > < | ; & 等,可以使用shell模塊實現

2. shell模塊 支持通配符

    和command模塊類似,在遠程主機執行命令,支持通配符
    ansible webServer -m shell -a 'echo 123456 |passwd --stdin yunwei' 
       //調用bash執行命令
       //類似 cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt 
       //這些復雜命令,即使使用shell也可能會失敗,解決辦法:寫到腳本時,copy到遠程,執行,再把需要的結果拉回執行命令的機器


密碼設置成功

3. script模塊

    把腳本復制到遠程節點后,在遠程節點本地運行腳本
    ansible webServer -m script -a  restart.sh
    //如果有返回的內容也會返回 stdout;下圖我cat 一個文件 

4. copy模塊

    復制文件或目錄到遠程節點;如果目標存在,默認會覆蓋,用此模塊應指定先備份。
    ansible webServer -m copy -a "src=/etc/hosts  dest=/root/hosts  owner=root mode=660 backup=yes"
    
    src  //指定源文件在本地主機的地址,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞歸復制。在這種情況下,如果路徑使用"/"來結尾,則只復制目錄里的內容,如果沒有使用"/"來結尾,則包含目錄在內的整個內容全部復制,類似於rsync。
    dest  //必選項。要將源文件復制到的遠程主機的絕對路徑,如果源文件是一個目錄,那么該路徑也必須是個目錄 
    ownr   //更改文件所有者
    mode   //權限更改
    directory_mode  //遞歸的設定目錄的權限,默認為系統默認權限
    backup   //再覆蓋之前將源文件備份,備份文件包含時間信息。backup = yes|no  ,不使用默認不備份
    content   //可以編寫 content="xxxxxdfasafsafasfasf" 指定dest文件后,將類似`echo $content   >  $dest  ` 生成指定文件包含指定內容;

5. fetch模塊

    從客戶端拖去文件到本地主機,與copy相反,只能抓取文件,抓取目錄可以先 `tar` 打包
    默認會以主機清單中的主機名為目錄存放獲取到的文件
    ansible all -m fetch -a 'src=/etc/hosts  dest=/data/test'

172.16.1.2 | CHANGED => {
    "changed": true, 
    "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
    "dest": "/data/test/172.16.1.2/etc/hosts", 
    "md5sum": "54fb6627dbaa37721048e4549db3224d", 
    "remote_checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
    "remote_md5sum": null

6. archive模塊

    將遠程主機的指定文件或目錄,打包成指定壓縮格式的壓縮包,並放到遠程主機的指定位置
ansible all -m archive -a 'path=/etc/rpm dest=/root/rpm.tar  format=tar'

    path   //指定要打包的文件路徑  (Required必須條件)
    dest   //打包后要放的位置和 命名
    format    // 指定打包壓縮的格式  有:bz2 ,gz ,tar,xz,zip

可以anible-doc archive 查看模塊幫助

5. cron 計划任務

管理計划任務
//支持時間
day:日(1-31,*,*/2,……) 
hour:小時(0-23,*,*/2,……)  
minute:分鍾(0-59,*,*/2,……) 
month:月(1-12,*,*/2,……) 
weekday:周(0-7,*,……)

backup:對遠程主機上的原任務內容修改之前做備份
cron_file:如果指定該選項,則用該文件替換遠程主機的cron.d目錄下的用戶的任務計划
job:要執行的任務
name:該任務描述,任務名
special_time:指定什么時候執行,參數:reboot,yearly,annually,monthly,weekly,daily,hourly 
state:確認該任務計划是創建還是刪除  值為absent為刪除
user:執行任務的用戶

ansible all -m cron -a “minute=*/5  job=‘/usr/sbin/ntpdate 172.16.0.1 &>/dev/null’  name=Synctime” //創建任務
ansible all -m cron -a ‘state=absent  name=Synctime’   //刪除任務

6. file模塊

設置遠程主機的文件屬性
//參數屬性
    path:必選項,定義文件/目錄的路徑
    state:操作方法
        directory:如果目錄不存在,創建目錄
        absent:刪除目錄、文件或者取消鏈接文件。相當於rm -rf
        link:創建軟鏈接
        hard:創建硬鏈接
        file:即使文件不存在,也不會被創建
        touch:如果文件不存在,則會創建一個新的文件,如果文件或目錄已存在,則更新時間戳
    src:要被鏈接的源文件的路徑,只應用於state=link的情況
    dest:被鏈接到的路徑,只應用於state=link的情況 
    recurse:遞歸的設置文件的屬性,只對目錄有效
    owner:定義文件/目錄的屬主
    mode:定義文件/目錄的權限    
    group:定義文件/目錄的屬組
    force:需要在兩種情況下強制創建軟鏈接,一種是源文件不存在但之后會建立的情況下;另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然后創建新的軟鏈,有兩個選項:yes|no 

ansible all -m file -a 'name=/app/a.txt state=touch'     //創建或者刷新文件
ansible webServer -m file -a "path=/root/a.sh owner=wang mode=755"  //修改文件屬性
ansible webServer -m file -a 'src=/app/testfile dest=/app/testfile-link state=link'   //創建軟鏈接

7. hostnam模塊

管理遠程主機名
    ansible webServer -m hostname -a "web.server"

8. yum模塊

使用yum包管理器來管理軟件包
\\屬性參數
    config_file:yum的配置文件 
    disable_gpg_check:關閉gpg_check 
    disablerepo:不啟用某個源 
    enablerepo:啟用某個源
    name:要進行操作的軟件包的名字,也可以傳遞一個url或者一個本地的rpm包的路徑 
    state:安裝   (`present' or `installed', `latest'), 刪除 (`absent' or `removed') . (可選值: present, installed, latest, absent, removed) (默認值 present安裝)

ansible webServer -m yum  -a 'name=nginx   state=latest'          //安裝nginx
ansible webServer -m yum  -a 'name=mysql   state=absent'       //刪除mysql

9. yum_repositoy

配置yum源
reposdir: repo文件存放目錄
file:      repo文件名,默認為name的值
name:       唯一的repository ID
gpgkey:設置gpgkey
gpgcheck:設置gpg檢查
enabled:設置開啟關閉
bandwidth:控制帶寬,0為無限
state:狀態(present,absent
description:描述

ansible dns -m yum_repository -a  \
    'state=present                        \
    name=epel                             \
    enabled=yes                          \
    gpgcheck=yes                       \
    description="Aliyun EPEL"    \
    baseurl="http://mirrors.aliyun.com/epel/7/$basearch,http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/" \
    gpgkey="https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7Server"'

10.service模塊

管理服務
    name:服務名
    state:動作 started,stopped restarted,reloaded
    enabled: yes開機自啟,no不啟動
    runlevel:運行級別
    pattern:定義一個模式,如果通過status指令來查看服務的狀態時,沒有響應,就會通過ps指令在進程中根據該模式進行查找,如果匹配到,則認為該服務依然在運行

ansible webServer -m service  -a 'name=nginx state=started'   //一次只能操作一種服務

11.user 模塊

管理用戶
    name:用戶名
    system:yes是系統用戶,no不是系統用戶
    home:設置家目錄
    state:設置 創建用戶 還是刪除,present 創建,absent刪除,remove=yes 刪除家目錄數據
ansible mysqlServer -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 '
ansible srv -m user -a 'name=user1 state=absent remove=yes'    //刪除用戶及家目錄等數據

12.group模塊

添加組,刪除組
ansible webServer -m group -a "name=testgroup system=yes"  //創建組
ansible webServer -m group -a "name=testgroup state=absent"   //刪除組

13.setup

收集遠程主機的信息
    --tree:將所有主機的輸出信息保存到/tmp/目錄下,以/etc/ansible/hosts里的主機名為文件名
ansible all -m setup -a 'filter=ansible_distribution_version' --tree /tmp/
    filter :過濾關鍵字
ansible webServer -m setup -a 'filter=ansible_distribution_version'
關鍵字 說明
ansible_nodename 節點名
ansible_fqdn FQDN名
ansible_hostname 主機短名稱
ansible_domain 主機域名后綴
ansible_memtotal_mb 總物理內存
ansible_swaptotal_mb SWAP總大小
ansible_processor CPU信息
ansible_processor_cores CPU核心數量
ansible_processor_vcpus CPU邏輯核心數量
ansible_all_ipv4_addresses 有所IPV4地址
ansible_all_ipv6_addresses 所有IPV6地址
ansible_default_ipv4 默認網關的網卡配置信息
ansible_eth2 具體某張網卡信息
ansible_dns DNS設置信
ansible_architecture 系統架構
ansible_machine 主機類型
ansible_kernel 內核版本
ansible_distribution 發行版本
ansible_distribution_major_version 操作系統主版本號
ansible_distribution_release 發行版名稱
ansible_distribution_version 完整版本號
ansible_pkg_mgr 軟件包管理方式
ansible_service_mgr 進行服務方式
ansible_os_family 家族系列
ansible_cmdline 內核啟動參數
ansible_selinux SElinux狀態
ansible_env 當前環境變量參數
ansible_date_time 時間相關
ansible_python_version python版本
ansible_lvm LVM卷相關信息
ansible_mounts 所有掛載點
ansible_device_links 所有掛載的設備的UUID和卷標名
ansible_devices 所有/dev/下的正在使用的設備的信息
ansible_user_dir 執行用戶的家目錄
ansible_user_gecos 執行用戶的描述信息
ansible_user_gid 執行用戶的的GID
ansible_user_id 執行用戶的的用戶名
ansible_user_shell 執行用戶的shell類型
ansible_user_uid 執行用戶的UID

更多模塊了解 查看 https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html


免責聲明!

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



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