自動化運維工具Ansible實戰(三)經常使用的配置和相關命令

     Ansible默認安裝好後有一個配置文件/etc/ansible/ansible.cfg,該配置文件中定義了ansible的主機的默認配置部分,如默認是否須要輸入密碼、是否開啓sudo認證、action_plugins插件的位置、hosts主機組的位置、是否開啓log功能、默認端口、key文件位置等等。html

具體以下:linux

 

    [defaults]
    # some basic default values...
    #inventory      = /etc/ansible/hosts
    hostfile       = /etc/ansible/conf/hosts   \\指定默認hosts配置的位置
    # library_path = /usr/share/my_modules/
    remote_tmp     = $HOME/.ansible/tmp
    pattern        = *
    forks          = 5
    poll_interval  = 15
    sudo_user      = root  \\遠程sudo用戶
    #ask_sudo_pass = True  \\每次執行ansible命令是否詢問ssh密碼
    #ask_pass      = True  \\每次執行ansible命令時是否詢問sudo密碼
    transport      = smart
    remote_port    = 22
    module_lang    = C
    gathering = implicit
    host_key_checking = False    \\關閉第一次使用ansible鏈接客戶端是輸入命令提示
    log_path    = /var/log/ansible.log \\須要時能夠自行添加。chown -R root:root ansible.log
    system_warnings = False    \\關閉運行ansible時系統的提示信息,通常爲提示升級
    # set plugin path directories here, separate with colons
    #action_plugins     = /usr/share/ansible/plugins/action
    #cache_plugins      = /usr/share/ansible/plugins/cache
    #callback_plugins   = /usr/share/ansible/plugins/callback
    #connection_plugins = /usr/share/ansible/plugins/connection
    #lookup_plugins     = /usr/share/ansible/plugins/lookup
    #inventory_plugins  = /usr/share/ansible/plugins/inventory
    #vars_plugins       = /usr/share/ansible/plugins/vars
    #filter_plugins     = /usr/share/ansible/plugins/filter
    #test_plugins       = /usr/share/ansible/plugins/test
    #strategy_plugins   = /usr/share/ansible/plugins/strategy
    fact_caching = memory
    [accelerate]
    accelerate_port = 5099
    accelerate_timeout = 30
    accelerate_connect_timeout = 5.0
    # The daemon timeout is measured in minutes. This time is measured
    # from the last activity to the accelerate daemon.
    accelerate_daemon_timeout = 30

  ansible默認的配置都是註釋掉的(#),能夠經過去掉#來進行開啓相應的配置服務,好比啓用日誌,更改相應的hosts文件的路徑等等。  如查看日誌,當再次操做ansible的時候就能夠查看生成的日誌了 shell

[root@Monitor .ssh]# tail -f /var/log/ansible.log 
192.168.180.4
^ here
Attempted to read "/etc/ansible/conf/hosts" as ini file: /etc/ansible/conf/hosts:7: Expected key=value host variable assignment, got: ansible_ssh_port 
2017-09-01 11:09:44,012 p=58662 u=root |  192.168.180.10 | SUCCESS | rc=0 >>
 11:07:42 up 46 days, 19:50,  3 users,  load average: 0.08, 0.02, 0.01
2017-09-01 11:10:16,229 p=58662 u=root |  192.168.180.2 | SUCCESS | rc=0 >>
 11:04:53 up 46 days, 19:52,  3 users,  load average: 0.37, 0.41, 0.37

                 

(二)Ansible命令參數vim

(1)命令格式: ansible <host-pattern> [options]bash

[root@Monitor ansible]# ansible --help
Usage: ansible <host-pattern> [options]
Options:
-m MODULE_NAME, --module-name=MODULE_NAME 要執行的模塊,默認爲command
-a MODULE_ARGS, --args=MODULE_ARGS 模塊的參數
-u REMOTE_USER, --user=REMOTE_USER ssh 鏈接的用戶名,默認用root,ansible.cfg 中能夠配置
-k, --ask-pass 提示輸入ssh 登陸密碼,當使用密碼驗證登陸的時候用
-s, --sudo sudo 運行
-U SUDO_USER, --sudo-user=SUDO_USER sudo 到哪一個用戶,默認爲root
-K, --ask-sudo-pass 提示輸入sudo 密碼,當不是NOPASSWD 模式時使用
-B SECONDS, --background=SECONDS run asynchronously, failing after X seconds(default=N/A)
-P POLL_INTERVAL, --poll=POLL_INTERVAL set the poll interval if using
-B (default=15)
-C, --check 只是測試一下會改變什麼內容,不會真正去執行
-c CONNECTION 鏈接類型(default=smart)
-f FORKS, --forks=FORKS fork 多少個進程併發處理,默認5
-i INVENTORY, --inventory-file=INVENTORY 指定hosts 文件路徑,默認default=/etc/ansible/hosts
-l SUBSET, --limit=SUBSET 指定一個pattern,對<host_pattern>已經匹配的主機中再過濾一次
--list-hosts 只打印有哪些主機會執行這個playbook 文件,不是實際執行該playboo
-M MODULE_PATH, --module-path=MODULE_PATH 要執行的模塊的路徑,默認爲/usr/share/ansible/
-o, --one-line 壓縮輸出,摘要輸出
--private-key=PRIVATE_KEY_FILE 私鑰路徑
-T TIMEOUT, --timeout=TIMEOUT ssh 鏈接超時時間,默認10 秒
-t TREE, --tree=TREE 日誌輸出到該目錄,日誌文件名會以主機名命名
-v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging)

以上就是ansible經常使用的命令格式及參數,在接下來的學習中會逐步運用的。
服務器

(2)Ad-Hoc併發

    ansible任務:ad hoc任務就是執行shell命令、或shell腳本。能夠執行一些簡單的命令,不須要將這些執行的命令特別保存下來。 app

適合執行簡單的命令。ssh

ansible playbook:能夠解決比較複雜的任務,能夠將命令保存下來。async

適合執行配置管理或部署客戶機。


    Ad-Hoc 是指Ansible下臨時執行的一條命令,而且不須要保存的命令,對於複雜的命令會使用playbook。Ad-hoc的執行依賴於模塊,ansible官方提供了大量的模塊。 如:command、raw、shell、file、cron等,具體能夠經過ansible-doc -l 進行查看 。可使用ansible-doc -s module來查看某個模塊的參數,也可使用ansible-doc help module來查看該模塊更詳細的信息。接下來咱們詳細講解該命令的用法:

    1.命令說明: ansible 主機或組-m 模塊名-a '模塊參數'  ansible參數            

  • 主機和組,是在/etc/ansible/hosts 裏進行指定的部分,固然動態Inventory 使用的是腳本從外部應用裏獲取的主機;

  • 模塊名,能夠經過ansible-doc -l 查看目前安裝的模塊,默認不指定時,使用的是command模塊,具體能夠查看/etc/ansible/ansible.cfg 的「#module_name = command 」 部分,默認模塊能夠在該配置文件中進行修改;

  • 模塊參數,能夠經過 「ansible-doc -s 模塊名」 查看具體的用法及後面的參數;

  • ansible參數,能夠經過ansible命令的幫助信息裏查看到,這裏有不少參數能夠供選擇,如是否須要輸入密碼、是否sudo等。

    2.後臺執行。當命令執行時間比較長時,也能夠放到後臺執行,使用-B、-P參數,以下:

ansible all -B 3600-a "/usr/bin/long_running_operation --do-stuff" #後臺執行命令3600s,-B 表示後臺執行的時間
ansible all -m async_status -a "jid=123456789"  #檢查任務的狀態
ansible all -B 1800-P 60-a "/usr/bin/long_running_operation --do-stuff" #後臺執行命令最大時間是1800s即30分鐘,-P 每60s檢查下狀態,默認15s

(3)命令執行模塊。命令執行模塊包含以下 四個模塊:

  • command模塊:該模塊經過-a跟上要執行的命令能夠直接執行,不過命令裏若是有帶有以下字符部分則執行不成功 「  "<", ">", "|",  "&" ;

  • shell 模塊:用法基本和command同樣,不過其是經過/bin/sh進行執行,因此shell 模塊能夠執行任何命令,就像在本機執行同樣;

  • raw模塊:用法和shell 模塊同樣 ,其也能夠執行任意命令,就像在本機執行同樣;

  • script模塊:其是將管理端的shell 在被管理主機上執行,其原理是先將shell 複製到遠程主機,再在遠程主機上執行,原理相似於raw模塊。

注:raw模塊和comand、shell 模塊不一樣的是其沒有chdir、creates、removes參數,chdir參數的做用就是先切到chdir指定的目錄後,再執行後面的命令,這在後面不少模塊裏都會有該參數 。接下來進行詳細的介紹:


1,command模塊包含以下選項: 

  •  creates:建立一個文件名,當該文件存在,則該命令不執行 

  •  free_form:要執行的linux指令 

  •  chdir:在執行指令以前,先切換到該指定的目錄 

  •  removes:一個文件名,當該文件不存在,則該選項不執行

  •  executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

一下是使用的例子

   使用chdir的實例:

[root@Monitor ansible]# ansible 192.168.180.6 -m command -a  'chdir=/tmp/test.txt touch test.file'  
[root@Monitor ansible]# ansible 192.168.180.5 -m command -a 'creates=/tmp/lqb.txt touch test.file'
192.168.180.5 | SUCCESS | rc=0 >>
[root@Monitor ansible]# ansible 192.168.180.6 -m command -a  'chdir=/tmp/test.txt touch test.file'
192.168.180.6 | FAILED | rc=0 >>
MODULE FAILURE
[root@Monitor ansible]# ansible 192.168.180.6 -m shell -a  'chdir=/tmp/test.txt touch test.file'       
192.168.180.6 | FAILED | rc=0 >>
MODULE FAILURE
[root@Monitor ansible]# ansible 192.168.180.6 -m raw -a  'chdir=/tmp/test.txt touch test.file'     
192.168.180.6 | SUCCESS | rc=0 >>
Shared connection to 192.168.180.6 closed.

三個命令都會返回執行成功的狀態。不過實際上只有前兩個文件會被建立成功。使用raw模塊的執行的結果文件事實上也被正常建立了,不過不是在chdir指定的目錄,而是在當前執行用戶的家目錄。

creates與removes示例:

ansible 192.168.1.1 -a 'creates=/tmp/server.txt uptime'  ###當/tmp/server.txt文件存在時,則不執行uptime指令
ansible 192.168.1.1 -a 'removes=/tmp/server.txt uptime'  ###當/tmp/server.txt文件不存在時,則不執行uptime指令


2.script模塊實例。首先在ansible服務器上建立一個腳本並賦予可執行權限

[root@Monitor ansible]# vim script.sh
#/bin/bash
ifconfig -a;
df -h
~  
[root@Monitor ansible]# chmod +x script.sh 
[root@Monitor ansible]# ansible 192.168.180.5 -m script -a 'script.sh' 
192.168.180.5 | SUCCESS => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.180.5 closed.\r\n", 
    "stdout": "eth0      Link encap:Ethernet  HWaddr 00:15:5D:6E:28:0F  \r\n          inet addr:192.168.180.5  Bcast:192.168.180.255  Mask:255.255.255.0\r\n          inet6 addr: fe80::215:5dff:fe6e:280f/64 Scope:Link\r\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\r\n          RX packets:8629 errors:0 dropped:0 overruns:0 frame:0\r\n          TX packets:2576 errors:0 dropped:0 overruns:0 carrier:0\r\n          collisions:0 txqueuelen:1000 \r\n          RX bytes:1868783 (1.7 MiB)  TX bytes:299303 (292.2 KiB)\r\n\r\nlo        Link encap:Local Loopback  \r\n          inet addr:127.0.0.1  Mask:255.0.0.0\r\n          inet6 addr: ::1/128 Scope:Host\r\n          UP LOOPBACK RUNNING  MTU:16436  Metric:1\r\n          RX packets:0 errors:0 dropped:0 overruns:0 frame:0\r\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\r\n          collisions:0 txqueuelen:0 \r\n          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)\r\n\r\n文件系統\t      容量  已用  可用 已用%% 掛載點\r\n/dev/mapper/VolGroup-lv_root\r\n                       50G  4.6G   43G  10% /\r\ntmpfs                 935M     0  935M   0% /dev/shm\r\n/dev/sda1             485M   32M  429M   7% /boot\r\n/dev/mapper/VolGroup-lv_home\r\n                       72G  180M   68G   1% /home\r\n", 
    "stdout_lines": [
        "eth0      Link encap:Ethernet  HWaddr 00:15:5D:6E:28:0F  ", 
        "          inet addr:192.168.180.5  Bcast:192.168.180.255  Mask:255.255.255.0", 
        "          inet6 addr: fe80::215:5dff:fe6e:280f/64 Scope:Link", 
        "          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1", 
        "          RX packets:8629 errors:0 dropped:0 overruns:0 frame:0", 
        "          TX packets:2576 errors:0 dropped:0 overruns:0 carrier:0", 
        "          collisions:0 txqueuelen:1000 ", 
        "          RX bytes:1868783 (1.7 MiB)  TX bytes:299303 (292.2 KiB)", 
        "", 
        "lo        Link encap:Local Loopback  ", 
        "          inet addr:127.0.0.1  Mask:255.0.0.0", 
        "          inet6 addr: ::1/128 Scope:Host", 
        "          UP LOOPBACK RUNNING  MTU:16436  Metric:1", 
        "          RX packets:0 errors:0 dropped:0 overruns:0 frame:0", 
        "          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0", 
        "          collisions:0 txqueuelen:0 ", 
        "          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)", 
        "", 
        "文件系統\t      容量  已用  可用 已用%% 掛載點", 
        "/dev/mapper/VolGroup-lv_root", 
        "                       50G  4.6G   43G  10% /", 
        "tmpfs                 935M     0  935M   0% /dev/shm", 
        "/dev/sda1             485M   32M  429M   7% /boot", 
        "/dev/mapper/VolGroup-lv_home", 
        "                       72G  180M   68G   1% /home"
    ]
}

  #########也能夠直接進行輸出以下圖

wKiom1mpLjawS8pNAAB8wZpk4Lk589.png

相關文章
相關標籤/搜索