Ansible4:Ad-hoc與命令執行模塊

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

一、Ad-hoc 

1、命令說明

一個ad-hoc命令的執行,需要按以下格式進行執行:

    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

二、命令執行模塊

命令執行模塊包含如下 四個模塊:

  • command模塊:該模塊通過-a跟上要執行的命令可以直接執行,不過命令裏如果有帶有如下字符部分則執行不成功 “  "<", ">", "|",  "&" ;

  • shell 模塊:用法基本和command一樣,不過其是通過/bin/sh進行執行,所以shell 模塊可以執行任何命令,就像在本機執行一樣;

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

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

注:raw模塊和comand、shell 模塊不同的是其沒有chdir、creates、removes參數,chdir參數的作用就是先切到chdir指定的目錄後,再執行後面的命令,這在後面很多模塊裏都會有該參數 

command模塊包含如下選項: 

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

  • free_form:要執行的linux指令 

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

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

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


使用chdir的示例:

ansible 192.168.1.1 -m command -a 'chdir=/tmp/test.txt touch test.file'
ansible 192.168.1.1 -m shell -a 'chdir=/tmp/test.txt touch test2.file'
ansible 192.168.1.1 -m raw -a 'chdir=/tmp/text.txt touch test3.file'

三個命令都會返回執行成功的狀態。不過實際上只有前兩個文件會被創建成功。使用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指令


script模塊示例:

要執行的腳本文件script.sh內容如下:
#/bin/bash
ifconfig
df -hT
執行ansible指令:ansible 10.212.52.252 -m script -a 'script.sh' |egrep '>>|stdout'

本文出自 “無名小卒” 博客,請務必保留此出處http://breezey.blog.51cto.com/2400275/1757588

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章