Chpater2.3 执行AD HOC命令
2.3 執行AD HOC命令
2.3.1 目標
學完這一章節,學生能去執行一個單獨Ansible自動化任務通過ad hoc命令并且解釋一些 ad hoc命令案例。
2.3.2 執行AD HOC命令使用Ansible
一個ad hoc命令是一種方法快速執行Ansible任務,它們是簡單的,在線操作能被執行不需要寫一個playbook。
ad hoc命令非常有用對于快速測試和變更。例如,你能用一個ad hoc命令去確保一個特定的行存在于/etc/hosts文件中在一個主機組中,你能使用另一個ad hoc命令去高效的重啟一個服務在許多不同的目標主機中,或者確保一個特定的軟件包更新到最新版本。ad hoc命令是非常有用去執行簡單的任務
2.3.3 執行Ad Hoc命令
ansible host-pattern -m module [-a 'module arguments'] [-i inventory]- host-pattern指定在哪些受管主機上執行ad hoc命令,它能指定受管主機或主機組在清單文件中
- 你經常看到結合–list-hosts的用法,展示了哪些主機被匹配。
- 選項-i可以指定一個不同的inventory文件位置,而不是用配置文件中默認的清單文件
- 選項-m指定一個模塊的名稱,模塊是一個小的程序被執行去實現你的任務,一些模塊不需要附加的信息,但其他模塊需要附加的參數去指定操作的細節,-a選項增加了一些參數,放在單引號中。
2.3.4 使用Ad Hoc命令執行任務
模塊是ad hoc命令用來完成任務的工具,Ansible提供了數百個模塊執行不同的事情。
ansible-doc -l 命令列出了所有的模塊被安裝在系統中的,你能使用ansible-doc去查看指定模塊的文檔,并且找到模塊使用的一些參數。
下表中列出了一些常用的模塊
| Files modules |
| copy:拷貝一個本地文件到受管主機 |
| file:設定文件的權限和其他屬性 |
| lineinfile:確保指定的行在或不在文本中 |
| synchronize:使用rsync同步內容 |
| Software package modules |
| package:管理數據包使用操作系統自帶的包管理器 |
| yum:管理數據包使用YUM包管理器 |
| dnf:管理數據包使用dnf包管理器 |
| pip:python包管理器 |
| System modules |
| firewalld:使用firewalld管理任意的端口或服務 |
| reboot:重啟主機 |
| service:管理服務 |
| user:增加,移除,管理用戶賬號 |
| Net Tools modules |
| get_url:下載文件通過HTTP,HTTPS or FTP |
| nmcli:Manage networking |
| uri:與web服務交互 |
大多數模塊攜帶參數,在modules文檔中找到可用的參數列表。Ad hoc給模塊傳遞參數使用-a選項。如果多個參數需要被指定,把他們放在單引號中,通過空格隔開。
[sysadmin@ansible security]$ ansible 192.168.160.14 -m user -a 'name=newbie uid=4000 state=present' 192.168.160.14 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"comment": "","create_home": true,"group": 4000,"home": "/home/newbie","name": "newbie","shell": "/bin/bash","state": "present","system": false,"uid": 4000 }大多數模塊是冪等性的,這意味著模塊能被多次安全的執行,如果受管主機已經是正確的狀態,模塊將不執行任何操作。如果你再次執行了先前的ad hoc命令,它將不會報告任何改變。
[sysadmin@ansible security]$ ansible 192.168.160.14 -m user -a 'name=newbie uid=4000 state=present'192.168.160.14 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"append": false,"changed": false,"comment": "","group": 4000,"home": "/home/newbie","move_home": false,"name": "newbie","shell": "/bin/bash","state": "present","uid": 4000 }2.3.5 執行任意命令在受管主機上
command模塊允許管理員執行任意命令在受管主機上,執行的命令被指定作為一個參數通過-a選項,如下例:
[sysadmin@ansible security]$ ansible 192.168.160.14 -m command -a hostname192.168.160.14 | CHANGED | rc=0 >> rhel6-update-server上面的ad hoc命令返回了兩行輸出,第一行是一個狀態報告,展示了執行ad hoc命令的受管主機,以及這次操作的執行結果。第二行是遠程執行命令的輸出。
為了增加ad hoc命令輸出結果的可讀性及更容易解析,管理員發現每臺主機輸出為一個單獨的行是有用的,使用-o選項去展示輸出到一個單獨的行。
[sysadmin@ansible security]$ ansible 192.168.160.14 -m command -a hostname -o192.168.160.14 | CHANGED | rc=0 | (stdout) rhel6-update-servercommand模塊允許管理員快速執行遠程命令在受管主機上,這些命令不被處理通過受管主機的shell。同樣地,它們不能接入shell環境變量或執行shell操作,比如重定向和管道符。
對于命令需要shell處理的場景,管理員可以使用shell模塊。和command不同的是,shell模塊指定的命令被執行通過受管主機上的shell程序。因此,shell環境變量或執行shell操作,比如重定向和管道符都是可用的。
利用command和shell模塊分別執行系統內置的Bash命令set,它將執行成功通過shell模塊。
[sysadmin@ansible security]$ ansible localhost -m command -a set [WARNING]: log file at /var/log/ansible.log is not writeable and we cannot create it, abortinglocalhost | FAILED | rc=2 >> [Errno 2] No such file or directory [sysadmin@ansible security]$ ansible localhost -m shell -a set [WARNING]: log file at /var/log/ansible.log is not writeable and we cannot create it, abortinglocalhost | CHANGED | rc=0 >> BASH=/bin/sh ...output omitted...無論command或shell模塊都需要受管主機安裝python環境,第三個模塊raw,能執行命令直接使用遠程的shell,繞過模塊子系統。這是非常有用的,用來管理沒有python環境的設備,如網絡路由器。它也能被用作安裝python在目標主機。
大多數情況下,最佳實踐避免使用command,shell和raw模塊。
2.3.5 配置連接FOR AD HOC命令
管理主機連接和權限提升的指令能被配置都Ansible配置文件中,它們也被定義作為ad hoc的命令行選項。當定義了選項在ad hoc命令中,它們的優先級高于配置文件中的指令。下表中展示了相似的命令行選項對比配置文件中的指令
| inventory | -i |
| remote_user | -u |
| become | –become,-b |
| become_method | –become-method |
| become_user | –becom-user |
| become_ask_pass | –ask-become-pass,-K |
這些選項也可以通過ansible --help命令查詢
[sysadmin@ansible ~]$ ansible --help [WARNING]: log file at /var/log/ansible.log is not writeable and we cannot create it, abortingusage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD][--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts][-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k][--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER][-c CONNECTION] [-T TIMEOUT][--ssh-common-args SSH_COMMON_ARGS][--sftp-extra-args SFTP_EXTRA_ARGS][--scp-extra-args SCP_EXTRA_ARGS][--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D][-e EXTRA_VARS] [--vault-id VAULT_IDS][--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES][-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR][-a MODULE_ARGS] [-m MODULE_NAME]pattern總結
以上是生活随笔為你收集整理的Chpater2.3 执行AD HOC命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络 实验三 网络互联与路由协议配
- 下一篇: 每个初学JAVA者都应该搞懂的问题