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來查看該模塊更詳細的信息。
html

1、Ad-hoc 

一、命令說明

一個ad-hoc命令的執行,須要按如下格式進行執行:python

    ansible 主機或組-m 模塊名-a '模塊參數'  ansible參數
  • 主機和組,是在/etc/ansible/hosts 裏進行指定的部分,固然動態Inventory 使用的是腳本從外部應用裏獲取的主機;linux

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

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

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

二、後臺執行

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

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

2、命令執行模塊

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

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

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

  • 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

相關文章
相關標籤/搜索