Ansible 即席命令概述


在我之前的文章中, ansible 庫存和配置文件 這為學習ansible奠定了基礎。本文通過一些示例描述了 ansible ad-hoc 命令。

內容

  1. 介紹
  2. 了解目標
  3. 庫存文件
  4. 模塊
  5. 即席命令語法
  6. 使用 Ping 模塊檢查連接
  7. 通過 shell 模塊執行命令
  8. 通過腳本模塊運行腳本
  9. 包管理模塊
  10. 輸出顏色
    1. 紅色 – 失敗
    2. 黃色 – 更改成功
    3. 綠色——成功但沒有改變
  11. 結論是

介紹

Ansible ad hoc 命令對於執行快速或不經常重複的任務很有用。這些臨時命令通常是可以直接從終端或 shell 腳本運行的單行命令。

在了解如何使用 ad-hoc 命令之前,您需要了解什麼是冪等性。Ansible 是 相同的 本質上,這意味著如果對象的狀態發生變化,無論您執行多少次相同的任務,ansible 都不會嘗試對對象進行相同的更改。

臨時命令已通過 /usr/bin/ansible 程序。您可以通過運行以下命令獲取 ansible 命令支持的選項列表:

$ ansible --help

如果您沒有可使用的 ansible 實驗室,您可以查看我們的指南,了解如何手動設置 ansible 並使用 Vagrant 和 Virtualbox。

  • 在 Linux 上安裝和配置 Ansible
  • 在 Linux 上使用 Vagrant 和 Virtualbox 自動化 Ansible Lab 設置

了解目標

在使用臨時命令或創建劇本之前,您應該清楚地了解您的業務需求和目標環境。

目標環境可以是ansible支持的任何服務器、網絡設備、容器、雲解決方案等。這裡我們有兩個運行 Ubuntu 20.04 的託管節點。

您可以通過運行以下命令查看在運行 ad-hoc 命令或 playbook 時將使用的主機列表:

#SYNTAX
$ ansible --list-hosts

組名是 默認(全部, 未分類) 還 用戶定義組.

如果您想了解更多關於該組的信息,請參閱下面的鏈接。

  • Ansible 庫存和配置文件

獲取所有組中的主機列表。

$ ansible all --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

獲取用戶定義組中的主機列表。這裡我的組名是 Ubuntu.

$ ansible ubuntu --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

庫存文件

清單文件包含受管節點的列表。庫存文件的位置是 ansible.cfg 文檔。你可以使用它 -i--inventory 運行臨時命令時的標誌。

我有兩個清單文件,默認文件名是主機。要使用文件 host2,你應該使用 -i 標記並將文件作為參數傳遞。

$ ansible all -i host2 --list-hosts
hosts (1):
  managed2.anslab.com

當心: 如果清單文件位於其他位置,則必須指定絕對路徑。有關清單文件優先級,請參閱下面的鏈接。

  • Ansible 庫存和配置文件

模塊

Ansible 是一種電池供電的工具。這意味著它帶有大量模塊。模塊是編寫的程序 Python Ansible 使用它在託管節點上運行並執行任務。 Ansible 遵循即插即用的方法。這意味著您可以編寫自己的模塊並使用 ansible 運行它。

Ansible 支持開源社區和各種產品供應商創建的許多包。要獲取計算機上安裝的所有模塊的列表,請運行以下命令:

$ ansible-doc -l                    # LIST ALL MODULES AVAILABLE
$ ansible-doc -l | grep -i -w ^apt  # GREP PARTICULAR MODULE(APT) MODULE

要查看模塊文檔,您可以運行以下命令:在這裡,我們正在查看 apt 模塊的文檔,這是一個用於基於 Debian/Ubuntu 的發行版的包管理器模塊。

$ ansible-doc apt

下圖顯示了 ansible apt 模塊文檔。

Ansible – Doc Apt 模塊

即席命令語法

當您運行臨時命令時,您必須提供一些輸入。

  • 必須指定目標(受管節點)。您可以使用默認的“All/Ungrouped”組或用戶定義的組。
  • 您必須將模塊名稱作為參數傳遞 -m 橫幅。
  • 每個模塊接受一組選項。這些選項必須作為參數傳遞給 -a 標誌。如果有多個選項,它們必須用引號引起來。
$ ansible [group] -m [module] -a [module arguments]

您可以將在上一節中看到的其他參數組合到您的 ad-hoc 命令中。

使用 Ping 模塊檢查連接

設置 ansible 後,要運行的第一個模塊是: “平坦的” 模塊。 ping 模塊用於驗證與控制器和受管節點的正確連接。成功的連接將返回類似於以下內容的響應: “乒乓球”.

$ ansible all -m ping
ping 模塊輸出

你也可以使用 -o 橫幅。

$ ansible all -m ping -o
壓縮輸出 壓縮輸出

通過 shell 模塊執行命令

這個 外殼模塊 用於運行可以在終端中運行的任何命令。 這就像在 Linux 終端中運行命令一樣。

你應該使用 -a 標記命令並將其作為參數傳遞給 shell 模塊。

$ ansible all -m shell -a "arguments"

下面是我在 ansible shell 模塊中運行的一些命令。

$ ansible all -m shell -a "echo $USER"
$ ansible all -m shell -a "uptime"
$ ansible all -m shell -a "cat /etc/os-release | grep -i PRETTY_NAME"
$ ansible all -m shell -a "touch /tmp/abc.txt"
$ ansible all -m shell -a "ls -l /tmp/abc.txt"
外殼模塊輸出 外殼模塊輸出

除了 shell 模塊,還可以使用 ansible 的默認模塊 command 模塊。可以直接使用 -a 由於命令模塊是默認模塊,因此標記命令並將其作為參數傳遞。

$ ansible all -m command -a "uptime"       # EXCLUSIVELY PASSING COMMAND MODULE
$ ansible all -a "uptime"                  # NOT USING -m TO PASS MODULE
命令模塊輸出 命令模塊輸出

shell 和命令模塊之間的區別在於命令模塊可以訪問一些特殊的變量,並且不能使用管道、重定向和邏輯與運算符。

運行以下命令時出現錯誤:

$ ansible all -m command -a "test -f /etc/hosts && echo 'hosts file present'"

當我通過 shell 模塊運行相同的命令時,它工作正常。

$ ansible all -m shell -a "test -f /etc/hosts && echo 'hosts file present'"
shell 和命令輸出 shell 和命令輸出

通過腳本模塊運行腳本

如果您想運行任意腳本(python、shell 等),您可以使用腳本模塊。該模塊將腳本從控制器機器複製到所有被管節點,然後執行該腳本。

我有以下python代碼 /tmp 目錄。

import sys,os

print("CURRENT PYTHON VERSION = ", sys.version_info)
print("HOSTNAME               = ", os.uname()[1])
print("CURRENT DIRECTORY      = ", os.getcwd())

通過運行以下命令,使用腳本模塊運行腳本:腳本模塊支持附加參數,具體取決於腳本的運行方式。在我的情況下,我正在運行一個 python 腳本,所以我試圖傳遞額外的參數 “可執行文件 = python3” 連同腳本路徑。

$ ansible all -m script -a "/tmp/get_host_details.py executable=python3"
腳本模塊輸出 腳本模塊輸出

包管理模塊

您的操作系統包管理器有幾個模塊可用。 dnf, apt, pacman等待。我在這裡使用 apt 因為我正在運行 Ubuntu。但是,儘管所有包管理器的語法相同,但參數卻不同。查看相應的文檔以獲取更多詳細信息。

要安裝軟件包,請運行以下命令並檢查狀態 “節目”. 你應該選擇 -b-become 運行模塊的標誌 sudo 受管節點權限。如果你設置密碼 sudo 用戶你需要通過 -K 一起 -b 提示標誌 變得 密碼。

$ ansible all -m apt -a "name=cowsay,vim,cmatrix state=present" -b -K
使用 Apt 模塊安裝軟件包 使用 Apt 模塊安裝軟件包

使用下面的鏈接閱讀有關權限提升如何工作的文章。

  • Ansible SSH 身份驗證和權限提升

要刪除軟件包,請運行以下命令並檢查狀態 “缺席”.

$ ansible all -m apt -a "name=cowsay,vim,cmatrix state=absent" -b -K
使用 Apt 模塊刪除一個包 使用 Apt 模塊刪除一個包

到目前為止,我們已經展示瞭如何為不同的任務使用不同的模塊。這可能會讓您對運行臨時命令時的行為方式有一個很好的了解。

還有很多其他的模塊,本文不足以全部閱讀。因此,我們建議您根據自己的用例選擇模塊並開始練習 ad-hoc 命令。

輸出顏色

運行 ad-hoc 命令後,您應該已經看到了三種不同顏色的輸出。所有顏色都有其含義。

RED    - Failure
YELLOW - Success With Changes happened
GREEN  - Success but no changes happened

紅色 – 失敗

如果任務失敗,它將以紅色打印。

紅色輸出 失敗 – 紅色輸出

黃色 – 更改成功

如果狀態設置為更改,則輸出將為黃色。

狀態變化 - 黃色 狀態變化 – 黃色

綠色——成功但沒有改變

如果對象的狀態沒有改變,輸出將為綠色。

無狀態變化 - 綠色 無狀態變化 – 綠色

結論是

本文解釋了什麼是 ad-hoc 命令以及如何在 Ansible 中使用它們。 Ad-hoc 命令是新手了解 ansible 如何使用模塊完成任務的好方法。在下一個級別,我們開始以 YAML 格式編寫劇本。更多關於這在另一篇文章中。

閱讀以下:

  • 使用 Ansible 劇本

資源:

  • https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
  • https://www.redhat.com/sysadmin/ansible-ad-hoc-commands

Ad Hoc 命令AnsibleAnsible Ad Hoc 命令Ansible 系列Ansible 教程DevOpsIT自動化LinuxLinux 管理開源