運維自動化工具 ansible 知識點總結

1.Ansible 基礎

1.1 Ansible簡介

Ansible 是一個開源軟件,提供配置管理和應用程序部署等項目通用的管理功能。它主要運行在類 Unix 系統上,通過特性語言來描述各種資源對象,進而管理類 Unix 系統和 Microsoft Windows 系統等系統資源。
官網: https :// www.ansible.com /
官方文檔: https :// docs.ansible.com /
功能網站: https :// galaxy.ansible.com /
源碼網站: https :// github.com / ansible

1.2?Ansible的工作特性

基礎屬性
開發 基于 Python 語言實現
部署 基于 Python SSH agentless 實現簡單部署
安全 基于 OpenSSH 加密方式來傳輸,無序代理不依賴 PKI ,命令執行 冪等性(即 無論執行多少遍跟第一遍一樣)
功能屬性
設計 基于插件化方式實現定制的功能
關鍵 三大關鍵模塊: Paramiko PyYAML Jinja2
定制 支持自定義功能模塊,編程語言格式無所謂
注意: ansible 的每一個模塊的使用方法就類似于一條專用的命令
進階屬性
格式 YAML 格式,支持豐富的數據結構
編排 支持 playbook 自動化方式編排任務
分層 基于角色特性實現多層解決方案
劣勢
由于基于 ssh 方式來通信,所以受 ssh 的限制比較多,因為 ssh 不是專門為 ansible 做準備的,所以由于性能損耗方面的原因,特別是主機量比較多的場景,效率是相當的低,解決該辦法就是通過專用的代理或者客戶端的方式來解決這種大環境下的低效。

1.3 ansible架構描述

三層結構?? 用戶端、控制端、被控端
控制端 管理方式 如下
Ad-Hoc : 使用命令行方式來管理各種目標主機,適用于小中型、簡單的、臨時的業務場景。
playbook : 使用 playbook 方式來管理各種目標主機,適用于中大型、復雜的、規劃好的業務場景。
被控端 windows Linux 、路由器、交換機等

1.4 工作流程解析

1 用戶基于命令或者 playbook 方式,向 ansible 的控制端發起用戶請求
2 ansible 根據用戶請求目標,到控制端的主機列表中驗證目標是否存在
3 若目標主機存在,然后基于連接插件與被控端處于連接狀態
4 根據用戶請求指令,結合相應的功能模塊,指定目標主機執行相應的功能
5 目標主機執行完畢后,會將相應的狀態結果返回給控制端。
6 控制端在處理過程中,還會通過插件工具實現日志、郵件等輔助功能

2 軟件部署

通用環境需求 準備 ssh 環境
控制端專用需求:支持類 unix 系統,不支持 Windows系統 ,準備 python2 .7 + python3 .5 + 的環境
被控端專用需求: Python 版本小于 2.4 ,需要安裝 python-simplejson
? ? ? ? ? ? ? ? ? ? ? ? ? ? 如 開啟 SELinux 需要安裝 libselinux-python
? ? ? ? ? ? ? ? ? ? ? ? ? ??windows 只能做為被控制端
安裝方式 主要有四種: 官方軟件源、源碼方式、 Git 方式、 Pip 方式

2.1?工作環境準備

主機名定制? 每個主機上都得操作
編寫 / etc / hosts 文件
# vim /etc/hosts
10.0.0.12? ?rocky9-12
10.0.0.13? ?ubuntu24-13
10.0.0.15? ?rocky9-15
(1)ubuntu 安裝 ansible-二進制 (安裝的是最新的軟件源,若直接apt安裝可能版本過舊
apt update ? ? ? # 更新軟件源? ?
apt install -y software-properties-common ? ? ? #安裝soft...mon(用于管理軟件源)?
add-apt-repository --yes --update ppa:ansible/ansible ? ? ? # 安裝 ansible 的專用軟件源
apt-cache madison ansible? ? ? ? ? ? ? # 查看 ansible 的軟件版本信息
apt-cache madison ansible-core? ? ? # 查看 ansible-core 核心軟件版本
apt install -y ansible ? ? ?# 安裝 ansible 軟件
dpkg -l ansible? ? ?# 檢測安裝的軟件包
ansible --version? ? ? # 查看安裝的 ansible 的版本
安裝 ansible-pip 方式來安裝ansible
注意:默認情況下,無法在 root 用戶下,使用 pip 方式安裝 ansible ,需要借助于 python 虛擬環境才可以實現。
apt install python3 python3-venv python3-pip -y? ? ? ? ? ?? 準備 pip 環境
mkdir my_project && cd my_project? ?? 準備工作目錄
python3 -m venv venv? ? 創建 python 虛擬環境 venv
source venv/bin/activate? ?? 加載虛擬環境? ? ??注意: 結果中(venv) 表示進入到了虛擬環境
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ansible? ?? 使用 pip 安裝 ansible
ansible --version? ? ? ?# 查看安裝的 ansible 的版本
安裝 ansible-git方式來安裝ansible ?
mkdir / data / codes && cd / data / codes
git clone https :// githubfast.com / ansible / ansible.git
cd . / ansible
source . / hacking / env-setup
ll bin/? ? ?查看文件的樣式
python3 bin/ansible --version? ?? 使用 python3 檢測 ansible 的版本效果
注意: 這種方式受環境功能約束較多,需要定制安裝各種功能模塊
(2)Rocky 安裝 ansible- 二進制
yum install epel-release? ? ? ?# 安裝依賴軟件源
yum install ansible? ? ? ? ? ? ? ??# 安裝 ansible 軟件
rpm -q ansible? ? ? ? # 檢測軟件安裝包效果
ansible --version? ? # 檢測 ansible 的版本信息

2.2 軟件環境與文件解析

命令文件解析? ? ? ll /usr/bin/ | grep ansible
/ usr / bin / ansible # ansible 主命令
/ usr / bin / ansible-config # ansible 配置管理命令
/ usr / bin / ansible-console # ansible 交互式命令
/ usr / bin / ansible-doc # ansible 模塊幫助命令
/ usr / bin / ansible-galaxy # ansible 擴展命令,用于獲取別人的優秀的角色模板文件
/ usr / bin / ansible-playbook # ansible 任務管理工具
/ usr / bin / ansible-pull # ansible 反模式工作命令
/ usr / bin / ansible-vault # ansible 文件專用加密工具
利用 ansible 實現管理的主要方式:
Ad-Hoc 即利用 ansible 命令,主要用于臨時命令使用場景
Ansible-playbook 主要用于長期規劃好的,大型項目的場景,需要有前期的規劃過程
ansible -h? ?? 幫助命令
?
結果顯示:
通用格式: ansible < 目標主機 > 參數
專用格式: ansible < 目標主機 > - m 模塊 - a 模塊參數
命令方式:在命令行執行 ansible 的方式叫 "Ad-Hoc" , 肯定還有其他執行方式。
主要功能: ansible 的主要功能都是通過各種各樣的插件模塊來實現特有功能的。
拓展內容: ansible 的默認模塊叫 command
注意: Ansible 中的 Ad-Hoc 命令允許用戶快速地在遠程主機上執行單個任務或命令,而無需創建復雜的劇本( Playbook )。
配置文件解析
tree /etc/ansible/
/etc/ansible/ ansible.cfg
主配置文件,配置 ansible 工作特性 , 也可以在項目的目錄中創建此文件 , 當前目錄下如果也有
ansible.cfg, 則此文件優先生效 , 建議每個項目目錄下 , 創建獨有的 ansible.cfg 文件
/etc/ansible/ hosts? ? ? 主機清單文件
/etc/ansible/roles /? ? ? 存放角色的目錄
Ansible 的配置文件可以放在多個不同地方 , 表示作用范圍的不同,優先級從高到低順序如下
ANSIBLE_CONFIG 環境變量
. / ansible.cfg ? 當前目錄下的 ansible.cfg
~ / .ansible.cfg 當前用戶家目錄下的 .ansible.cfg
/ etc / ansible / ansible.cfg 系統默認配置文件
ansible --version | grep cfg? ? ? 查看默認生效的配置文件
主配置文件
Ansible 的配置文件 /etc/ansible/ansible.cfg ,從 ansible 2.12 開始,可以 用工具生成主配置文件
生成主配置文件
ansible-config init --help? ? 查看命令幫助文件
按照全格式方式生成配置文件
ansible-config init -t all --disabled > ansible_all.cfg?
ansible-config init --disabled > ansible_default.cfg

?2.3?簡單實踐 ?

command 模塊
ansible 的默認模塊叫 command??
由于是默認的,不需要 - m 來指定模塊,可以對目標主機使用 "-a" 傳入一個命令參數,來執行查看本機上的信息,命令格式如下: ansible < 目標主機 > - a 模塊參數
查看當前主機的網卡信息
apt install net-tools -y? ?# 否則沒有 ifconfig 命令??
ansible localhost -a "ifconfig ens33"
ansible 操作是通過一個 "provided hosts" 的形式來檢查的目標主機,只有找到主機后才執行
主機屬性:默認的主機列表有兩個屬性:
all 默認表示所有主機列表
localhost 默認表示本機
主機列表文件是 / etc / ansible / hosts
- 綠色:執行成功且不需要做改變的操作
- 黃色:執行成功且對目標主機做變更
?-紫色:執行出現報警warning
- 紅色:執行失敗
ping 模塊
ansible localhost - m ping? ? ?#測試當前主機的存活性
ansible localhost -m ping -o? ? ?# 單行顯示
ansible localhost -m ping -vv? ? # 顯示更多信息,? - vv 或者 - vvv
ansible-doc 命令
ansible-doc? -h? 查看幫助信息
常見參數
- a 顯示所有幫助信息,該參數已經被 -- metadata-dump 參數替代
- l 顯示所有模塊? ? ? ? ? ? 不常見的報錯: / bin / sh : 1 : less : not found ? ? ?解決方法: apt install - y less
- s 顯示簡單的幫助信息? ?#跟ansible-doc的命令顯示一模一樣
查看模塊幫助
查看 command 模塊幫助
查看完整幫助: ansible-doc command
查看簡單幫助: ansible-doc command - s
command 有一個 chdir 的參數,用于我們在執行命令之前先切換一下工作路徑,命令如下
ansible localhost -m command -a "chdir=/home ls -a"
ansible-config 命令
ansible-config? ? ? 用于專門管理 ansible 的配置信息
ansible-config - h? 幫助信息命令結果同上一樣

2.4?主機清單

主機清單簡介
ansible 的主要功用在于批量主機操作,為了便捷地使用其中的部分主機,可以在 inventory file 中將其分組命名 . 默認的 inventory file / etc / ansible / hosts
主機清單屬性樣式? ?這些樣式可以在/etc/ansible /hosts 里面進行查看
主機清單文件格式
文件風格
inventory 文件遵循 INI 文件風格,中括號中的字符為組名。可以將同一個主機同時歸并到多個不同的組中; 此外,當如若目標主機使用了非默認的 SSH 端口,還可以在主機名稱之后使用冒號加端口號來標明。
?all 表示所有主機? ? ? ? ?? ungrouped 所有沒有組的主機? ? ? ?? localhost 表示本機
相關參數
ssh認證級別
ansible_ssh_host? ?# 要連接的遠程主機名
ansible_ssh_port? ? #ssh 端口號? 非默認則例: ip : 端口 10.0.0.88 : 7878
ansible_ssh_user? ?# 默認的 ssh 用戶名
ansible_ssh_pass? ?#ssh 密碼 ( 這種方式并不安全 , 建議使用 -- ask-pass SSH 密鑰 )
ansible_sudo_pass? #sudo 密碼 ( 這種方式并不安全 , 建議使用 -- ask-sudo-pass)
ansible_sudo_exe? ? #sudo 命令路徑
ansible_ssh_private_key_file? ?#ssh 使用的私鑰文件 . 適用于有多個密鑰
ssh連接級別
ansible_connection
ansible_shell_type
ansible_python_interpreter
主機清單配置文件示例
[test]
10.0.0.12 ?ansible_connection = local ? # 指定本地連接 , 無需 ssh 配置
#ansible_connection=ssh 需要 StrictHostKeyChecking no
10.0.0.13 ?ansible_connection = ssh ?ansible_ssh_port = 22 ?ansible_ssh_user = root
ansible_ssh_password = 123456
10.0.0.15 ? ansible_connection = ssh ?ansible_ssh_user = root? ansible_ssh_password = 123456 ?
# 執行 ansible 命令時顯示別名 , web01
[websrvs]
web01 ansible_ssh_host = 10.0.0.21
web02 ansible_ssh_host = 10.0.0.22
[websrvs : vars]
ansible_ssh_password = 123456 passwd
組名只能有 字母、數據、下劃線組成,不能用其他符號,而且不能以數字開頭

2.5 主機列表

主機列表命名異常實踐
增加兩種樣式的主機列表
echo '10.0.0.13' >> / etc / ansible / hosts
echo - e "[ansible-server]\n10.0.0.13" >> / etc / ansible / hosts
tail -n3 /etc/ansible/hosts? ?主機列表效果樣式
使用主機列表來執行命令
ansible 10.0.0.13?-a "ls /root"
信息提示:主機組名字有問題
由于組名中包含了字母、數字、下劃線之外的符號。將 ansible-server 更改為 ansible_server
sed -i 's/-ser/_ser/' /etc/ansible/hosts
tail -n3 /etc/ansible/hosts
ansible 10.0.0.13 -a "ls /root"? ? 再次執行相同的命令 發現沒有問題了
主機列表認證操作實踐
ubuntu24-13 主機做 ssh 的免密認證
ssh-keygen
ssh-copy-id root@localhost
ssh-copy-id root@10.0.0.13
ansible 10.0.0.13 -a "ls /root"? ?? 再次執行相同的命令 則不需要輸入密碼?
結論如下
通信方式: ansible 連接目標主機主要是通過 ssh 協議的方式
認證列表: ansible 會將連接成功的主機列表信息,記錄到 ssh 的認證列表 ".ssh/known_hosts"
首次操作 WARNING 提示解決
原因分析:
這個警告信息來自 Ansible ,它指出在目標主機( IP 地址為 10.0.0.13 )上, Ansible 使用的是
位于 / usr / bin / python3 .12 Python 解釋器。警告中提到未來如果安裝了另一個 Python
釋器,這個路徑的含義可能會改變,這可能會導致 Ansible 腳本執行時出現問題。
解決這個問題,可以采取 指定 Python 解釋器路徑 的方法來解決
Ansible inventory 文件(通常是 / etc / ansible / hosts )中,為特定的主機或主機組指
定一個明確的 Python 解釋器路徑。
獲取當前的 python命令解釋器? 將/etc / ansible / hosts配置改成如下顯示
10.0.0.13 ansible_python_interpreter =/ usr / bin / python3 .12
[ansible_server]
10.0.0.13 ansible_python_interpreter =/ usr / bin / python3 .12
再次測試沒有warning提示? 或者?編輯 Ansible 的配置文件? /etc/ansible/ansible.cfg?(如果沒有則創建 ),在? [defaults]?部分添加如下配置:
[defaults]
interpreter_python = auto_silent

3 認證原理

ansible -h | grep '\-k,'? ? ? ? # 可以幫助我們來做通信的連接認
ansible 10.0.0.13 -a "ls /root" -k? ? ? ? ? ??# 通過參數實踐, 這次需要顯式輸入ssh 密碼進行認證
ansible ansible_server -a "ls /root" -k? ? # 驗證主機組方式, 這次需要顯式輸入ssh 密碼進行認證
結論:
命令格式:目標主機位置可以是主機名、主機 ip 、主機組,只不過目標范圍不一樣了
認證方式: ansible 操作目標主機認證方式本質上是 ssh known_hosts文件 ,主機列表只是中間人

3.1 主機清單屬性實踐

設定 hosts 文件的鏈接屬性信息
設置 ansible 連接主機的鏈接屬性
cp / etc / ansible / hosts{,.bak}
sed - i '0,/0.13/ s#0.13#0.13 ansible_connection=local#g' / etc / ansible / hosts
sed - i '0,/0.13/ s#0.13#0.13 ansible_ssh_pass=123456#g' / etc / ansible / hosts
tail -n3 /etc/ansible/hosts? #查看
rm -rf .ssh/*? 將之前的所有ssh 認證信息丟棄 , 以非免密認證的方式進行命令演示
使用同樣的 ansible 命令鏈接主機
ansible 10.0.0.13 -m ping
ansible ansible_server -m ping
結果顯示:可以通過屬性的方式, ansible 與目標主機的連通。

3.2 主機認證實踐

前提背景
鑒于命令行 ansible 采用 - k 參數的繁瑣,主機列表采用 ansible_ssh_pass 屬性容易造成安全隱患,所以安全的方式還是采用跨主機免密碼的方式來認證最好。
cp /etc/ansible/hosts.bak /etc/ansible/hosts? ? 將剛才做的操作還原
tail -n3 /etc/ansible/hosts? ?查看效果
跨主機免密碼認證
ssh-keygen - t rsa? ? ? ? ? ? ? ? ? ? ? ? ? 生成秘鑰對
ssh-copy-id root @10 .0.0.13? ? ? ? ? 傳遞秘鑰文件
集群主機免密碼認證? 根據需求進行修改? ?腳本名root-ssh.sh
#!/bin/bash
# 設置環境變量
USER_NAME='root'
USER_HOME="/${USER_NAME}/.ssh"
SSH_CONFIG_FILE='/etc/ssh/ssh_config'
USER_PASSWD='123456'
HOSTADDR_PRE='10.0.0'
HOST_LIST="${HOSTADDR_PRE}.12 ${HOSTADDR_PRE}.13 ${HOSTADDR_PRE}.15"
HOSTNAME_LIST='ubuntu24-13 rocky9-12 rocky9-15'
HOSTS_FILE='/etc/hosts'# 準備基本環境
base_env() {apt install expect -y[ -d "${USER_HOME}" ] && rm -rf "${USER_HOME}"mkdir -p "${USER_HOME}"ssh-keygen -t rsa -P "" -f "${USER_HOME}/id_rsa"sed -i '/StrictHostKeyChecking/{s/#//; s/ask/no/}' "${SSH_CONFIG_FILE}"
}# expect自動化交互過程
expect_auto() {remote_host=$1expect -c "spawn ssh-copy-id -i ${USER_HOME}/id_rsa.pub ${USER_NAME}@$remote_hostexpect {\"*yes/no*\" { send \"yes\r\"; exp_continue }\"*password*\" { send \"${USER_PASSWD}\r\"; exp_continue }\"*Password*\" { send \"${USER_PASSWD}\r\"; }}expect eof"
}# 跨主機免認證環境
auth_auto() {for i in ${HOST_LIST}; doexpect_auto "$i"scp -rp "${HOSTS_FILE}" "${USER_NAME}@$i:${HOSTS_FILE}"done
}# 設定主機名
hostname_set() {local i=0for host in ${HOST_LIST}; dohostname=$(echo ${HOSTNAME_LIST} | cut -d' ' -f$((i+1)))ssh ${USER_NAME}@$host "hostnamectl set-hostname $hostname"((i++))done
}# 主函數執行
main() {# 基本環境準備base_env# 跨主機免密認證auth_auto# 設定主機名hostname_set
}# 執行主函數
main    

4 目標主機匹配

匹配規則
匹配所有: all ? ?
正則匹配: * ( 通配符 ) ??
邏輯或: : ( 并集 ) ,一般用于主機組 ? ?
邏輯與: :& ( 交集 ) ,一般用于主機組 ? ?
邏輯非: :! ( 補集 ) ,一般用于主機組
以上所有的匹配方式,針對的對象僅限于 ansible 的主機列表里面的內容
在涉及到特殊字符 ( &!* ) 的時候,一定要采用雙引號或者單引號括住,但是有些特殊字符只能用單引號, 所以我們推薦直接采用單引號
準備測試環境
我們將三臺主機都加入到 ansible 的主機列表中,劃分為三個小組 web mysql storage ,效果如下
主機清單文件
root @ubuntu24-13: ~ # vim /etc/ansible/hosts
10.0.0.13
[web]
10.0.0.12
10.0.0.13
[mysql]
10.0.0.13
10.0.0.15
[storage]
10.0.0.12
10.0.0.15
跨主機免密碼認證
可以參考之前的 root-ssh.sh 腳本進行操作。
或執行如下命令
ssh-keygen - t rsa ? ?
for i in 12 13 15; do; ssh-copy-id - i ~ / .ssh / id_rsa.pub root @10 .0.0 . $i; done
ansible all -m ping?? 管理端主機執行如下測試命令 , 檢測所有主機的連通效果
過濾實踐
ansible all -m ping?? 測試所有主機的存活 all 關鍵字
ansible "*" -m ping #? ? ? 使用 "*" 通配符 效果同all
ansible "10.0.0.*" -m ping? ? # 使用網段 +"*" 通配符?
ansible web -m ping? ?# 測試 web 組所有主機存活情況
ansible all -m ping -l 10.0.0.13? # 測試所有主機中的主機,但是只顯示某一臺主機的效果
或與非實踐
ansible web:mysql -m ping? ?? 測試 web mysql 小組的全部主機存活情況
ansible web:10.0.0.15?-m ping? ? 測試 web 10.0.0.15 的主機存活情況
ansible 'web:&mysql' -m ping? ?? 測試 web mysql 小組的共有主機存活情況(與關系測試)
ansible ungrouped -m ping? ? 測試不在所有小組內的主機存活情況(非關系測試)
ansible 'web:!storage' -m ping? ? 測試所有在 web 小組,但不在 storage 小組主機的存活情況
ansible ':!web' -m ping? ? ? 測試所有非 web 小組的主機存活情況
ansible 'web:mysql:!storage' -m ping? ?測試 web mysql 共有的主機中,不在 storage 小組的主機
5 命令執行流程解讀
命令過程
1. 加載 ansible 配置文件 默認加載的是 / etc / ansible / ansible.cfg
2. 加載指定模塊: command
3. 獲取目標主機,與主機列表進行匹配認證 / etc / ansible / hosts
4. ansible 指揮目標主機執行命令
? ? 4.1 控制端生成臨時執行文件 ~ / .ansible / cp
? ? 4.2 通過連接插件,與目標主機建立連接 paramiko_ssh
? ? 4.3 通過插件功能將控制端的臨時執行文件傳輸至目標主機的臨時目錄 ~ / .ansible / tmp? ? ? ? ? ?? $HOME / .ansible / tmp / ansible-tmp - 數字 / XXX.PY 文件
? ? 4.4 指揮目標主機給臨時執行文件添加執行權限
? ? 4.5 目標主機執行臨時文件并將結果返回給控制主機
? ? 4.6 目標主機刪除臨時執行 py 文件,然后斷開連接
5. ansible 控制端顯示結果,并退出。

5?模塊實踐

日常命令操作模塊
所謂的日常模塊,其實指的就是指揮遠程目標主機執行相關命令的模塊,主要有以下三個:
command shel scripts 模塊

5.1 command模塊

command 功能實踐??
chdir :切換到指定目錄,再執行后序命令
ansible 10.0.0.12 -a "chdir=/tmp mkdir cmd_test"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test touch 815.txt"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test ls"
creates:如果指定的文件或目錄存在 ,則跳過命令執行;如果不存在,則執行命令 。
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test creates=815.txt ls"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test creates=816.txt ls"
removes:如果指定的文件或目錄存在,則執行命令;如果不存在,則跳過執行。
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test removes=816.txt ls"
ansible 10.0.0.12 -a "chdir=/tmp/cmd_test removes=815.txt ls"
command默認情況下,可執行命令中不允許出現命令別名 和管道符等特殊服務號
ansible 10.0.0.12 -a "echo $SHELL"? ?? 顯示系統默認的 shell 類型,基于 $ 符號
ansible 10.0.0.12 -a 'export HAHA=NIHAO;echo $HAHA'? ? 遠程設置自定義變量,查看效果
對于系統默認的環境變量, ansible 可以正常執行,但涉及到一些自定義變量和特殊符號就不行了

5.2 shell模塊

shell command 對于某些特殊的符號命令執行效果不好,專用的 shell 模塊可以滿足要求
shell 模塊實踐(略)
結論:shell模塊要比command模塊功能強大
shell模塊替代command,設為默認模塊
vim /etc/ansible/ansible.cfg
[defaults]
module_name = shell
可以看到默認模塊添加成功
5.3 scripts 模塊
專門用于執行復雜腳本場景的功能模塊
decrypt : ? ? ? ? ? ? ? # 使用 Vault 控制源文件的自動解密? ?
注意:
成功的標志 CHANGED
標準的輸出信息在 stdout_lines

5.3 系統管理模塊

(1)hostname 模塊? ?ansible-doc hostname -s 查看該模塊的信息
該模塊可以獲取主機名相關的信息
命令格式: ansible < 目標主機 > - m hostname - a 'name= 主機名 '
ansible 10.0.0.15?-m hostname -a "name=123"? ?? 設定主機名為 123
ansible 10.0.0.15?-a "hostname"? 查看效果
(2)user 模塊
該模塊 主要是用于對遠程主機的用戶進行干預操作
命令格式: ansible < 目標主機 > - m user - a ' 屬性 1= 1 屬性 2= 2 ... 屬性 n= n'
創建一個定制的系統用戶 webapp ,屬組是 root bin uid 123, 禁止登陸,家目錄在 /tmp/webapp
ansible 10.0.0.15 \ -m user \ -a "name=webapp \ system=yes \ groups=root,bin \ uid=123 \ comment='webapp' \ shell=/sbin/nologin \ home=/tmp/webapp \ state=present"
檢測效果
ansible 10.0.0.15?-a "id webapp"
ansible 10.0.0.15?-a "getent passwd webapp"
創建一個攜帶ssh認證的用戶
ansible 10.0.0.15 \ -m user \ -a "name=webapp1 \ home=/tmp/webapp1 \ generate_ssh_key=yes \ ssh_key_bits=2048 \ ssh_key_file=.ssh/id_rsa"
驗證效果
ansible 10.0.0.16 -a "getent passwd webapp1"
ansible 10.0.0.16 -a "ls /tmp/webapp1/.ssh"
注: getent 命令可以用來察看系統的數據庫中的相關記錄 經常使用 getent 查看用戶賬號
刪除用戶
ansible 10.0.0.15?-m user -a "name=webapp state=absent remove=yes"
ansible 10.0.0.16 -a "getent passwd webapp"
ansible 10.0.0.15?-m user -a "name=webapp1 state=absent remove=yes"
總而言之
# 創建用戶(默認會創建家目錄)
ansible 10.0.0.15?-m user -a "name=webapp state=present home=/home/webapp"
# 刪除用戶并清理家目錄
ansible 10.0.0.15?-m user -a "name=webapp state=absent remove=yes"
(3)group 模塊
該模塊應用于用戶組的管理
命令格式: ansible < 目標主機 > - m group - a ' 屬性 1= 1 屬性 2= 2 ... 屬性 n= n'
注意:主機名的設置一定要規范, gid 一定要唯一。
創建一個用戶組
ansible 10.0.0.15?-m group -a "name=wb1?system=yes gid=1150"
ansible 10.0.0.15?-a "getent group wb1"
刪除用戶組
ansible 10.0.0.15 -m group -a "name=wb1 state=absent"

(4)cron 模塊? ? ? ? cron 模塊主要做一些,類似于周期性任務相關的任務執行動作
(5)setup 模塊? ? ? setup 主要是用來收集目標主機的屬性信息的。
(6)selinux 模塊 ? ? selinux 模塊用作對遠程主機的 selinux 機制進行管理
(7)sysctl 模塊 ? ? ? sysctl 模塊用來修改遠程主機上的內核參數
(8)mount 模塊 ? ? ?mount 模塊用于管理遠程主機的掛載

5.4?文件管理模塊

copy模塊? ? copy 模塊主要涉及到文件的拷貝動作
fetch模塊? ? 該模塊的作用于 copy 的作用正好相反,它是從遠程主機拉取文件到本地目錄
file模塊? ?file 模塊,用于管理遠程主機的文件,操作遠程文件的各種動作。
stat模塊??stat 模塊主要作用的場景是 文件狀態查看等
壓縮包模塊
編輯模塊
軟件模塊
信息模塊
Playbook

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82617.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82617.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82617.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于python,html,flask,echart,ids/ips,VMware,mysql,在線sdn防御ddos系統

詳細視頻:【基于python,html,flask,echart,ids/ips,VMware,mysql,在線sdn防御ddos系統-嗶哩嗶哩】 https://b23.tv/azUqQXe

C語言進階--數據的存儲

1.數據類型介紹 內置類型 char //字符數據類型 1字節 short //短整型 2字節 int //整型 4字節 long //長整型 4/8字節 long long //更長的整型 8字節 (C99中引入的) float //單精度浮點數 4字節 double //雙精度浮點數 8字節sizeof(long…

C++學習細節回顧(匯總三)

一.多態概念 同樣是動物叫的?個?為(函數)&#xff0c;傳貓對象過去&#xff0c;就是”(>ω<)喵“&#xff0c;傳狗對象過去&#xff0c;就是"汪汪"。 1.根據對象不同類型&#xff0c;調用不同函數&#xff0c;這就叫做運行時多態(動態多態) 2.編譯時多態(靜態…

SpringAI+MCPServer+MCPClient快速入門

SpringAI MCPServer MCPClient 快速入門編寫大綱 源代碼地址&#xff1a;https://download.csdn.net/download/user_admin_god/90926893 1. 介紹 本文通過使用免費的智普AI的glm-4-flash模型&#xff0c;設計并實現了一個智能問答系統。在該系統中&#xff0c;我們編寫了一…

Linux `vi/vim` 編輯器深度解析與高階應用指南

Linux `vi/vim` 編輯器深度解析與高階應用指南 一、核心功能解析1. 模式系統2. 與主流編輯器對比二、核心操作體系1. 高效導航命令2. 文本操作矩陣三、高階配置體系1. .vimrc 配置示例2. 插件管理系統四、企業級開發實踐1. 代碼編輯技巧2. 宏錄制與批量處理五、可視化與多窗口1…

Java五種方法批量處理List元素全解

Java:如何優雅批量處理List中的每個元素 一、場景分析&#xff1a;為什么需要批量處理List&#xff1f;二、核心方法&#xff1a;五種實現方式對比2.1 普通for循環&#xff08;最直接的方式&#xff09;代碼示例&#xff1a;優缺點&#xff1a; 2.2 Java 8 replaceAll&#xff…

【Elasticsearch】`_refresh`和`_flush`的區別

在Elasticsearch中&#xff0c;_refresh和_flush操作雖然看似都與“刷新”有關&#xff0c;但它們的功能和作用范圍有顯著區別&#xff1a; _refresh操作 - 目的&#xff1a;使索引操作&#xff08;如新增、更新、刪除文檔&#xff09;后的更改能夠立即被搜索到。 - 工作原理…

Java核心數據類型:String深度解析(JDK 8+)

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 問題驅動&#xff1a;從用戶注冊場景說起 場景描述&#xff1a;開發一個用戶注冊功能時&#xff0c;需要處理用戶名的校驗、格式化和存儲。你可能會遇到…

人員睡崗檢測算法AI智能分析網關V4打造工業/安防/交通等多場景應用方案

一、引言? 在工業生產、安防監控等多領域&#xff0c;眾多崗位需員工長時間值守&#xff0c;如流水線工人、監控值班員等。但高強度工作易引發睡崗問題&#xff0c;導致生產效率下降&#xff0c;甚至造成安全事故與財產損失。傳統人工巡檢響應慢、成本高&#xff0c;難以滿足…

自動生成提示技術突破:AUTOPROMPT重塑語言模型應用

AUTOPROMPT 預訓練語言模型的顯著成功促使人們研究這些模型在預訓練期間學習了哪些類型的知識。將任務重新表述為填空題(例如,完形填空測試)是衡量此類知識的自然方法 但是,它的使用受到編寫合適提示所需的手動工作和猜測的限制。為了解決這個問題,我們開發了 AUTOPROMP…

6個月Python學習計劃 Day 7 - 復盤 + 測試日

第一周 Day 1 - Python 基礎入門 & 開發環境搭建 Day 2 - 條件判斷、用戶輸入、格式化輸出 Day 3 - 循環語句 range 函數 Day 4 - 列表 & 元組基礎 Day 5 - 字典&#xff08;dict&#xff09;與集合&#xff08;set&#xff09; Day 6 - 綜合實戰&#xff1a;學生信息…

Pycharm and Flask 的學習心得(9)

request對象&#xff1a; 1. request包含前端發送過來的所有請求數據 將from表單里的內容CV到request里面&#xff0c;可以添加if語句來做判斷出請求類型后的操作 在網頁上的表單上input的數據&#xff0c;后端如何獲取呢&#xff1f; request對象獲取前端發送來的數據 // …

設計模式-依賴倒轉原則

依賴倒轉原則 依賴倒轉原則 (Dependency Inversion Principle, DIP) 是面向對象設計中 SOLID 原則的第五個原則。 它包含兩條核心思想&#xff1a; 高層模塊不應該依賴于低層模塊。兩者都應該依賴于抽象。 高層模塊 (High-level modules): 通常包含復雜的業務邏輯和策略&…

AI賦能引爆短劇全球化風潮,騰訊云媒體處理助力短劇平臺出海吸金

2023年&#xff0c;中國短劇市場以全平臺8000萬日投放、近500億規模的爆發式增長震驚行業。緊湊的內容、爽快的劇情令國內觀眾迅速愛上了幾分鐘一集的微短劇。然而在平臺內卷、監管收緊、巨頭入場等因素的沖擊下&#xff0c;不到兩年時間&#xff0c;這條賽道就已陷入紅海。但與…

開源第三方庫發展現狀

摘要&#xff1a;當前&#xff0c;開源第三方庫生態正呈現爆發式增長趨勢。GitHub 目前已托管超過 4.2 億個代碼倉庫&#xff0c;遠超早期統計的 1 億規模&#xff0c;顯示出開發者社區的活躍度持續攀升。同時&#xff0c;37 個主流包管理器所維護的開源組件數量可能已達到數千…

服務器開機自啟動服務

前言&#xff1a; 將服務器中腳本開啟自啟動執行 步驟&#xff1a; 1.創建一個 systemd 服務文件: /etc/systemd/system/ 目錄下創建一個新的服務文件。例如&#xff0c;命名為 myapp.service&#xff1a; sudo nano /etc/systemd/system/myapp.service2.編寫 [Unit] Descri…

采用Bright Data+n8n+AI打造自動化新聞助手:每天5分鐘實現內容日更

一、引言 在信息爆炸的時代&#xff0c;作為科技領域的內容創作者&#xff0c;我每天都要花費2-3小時手動收集行業新聞、撰寫摘要并發布到各個社群。直到我發現Bright Datan8nAI這套"黃金組合"&#xff0c;才真正實現了從"人工搬運"到"智能自動化&qu…

ROS云課三分鐘-3D性能測試supertuxkart和游戲推薦等-國際象棋

ROS云課三分鐘-破壁篇GCompris-一小部分支持Edu應用列表-2025-CSDN博客 很多時候&#xff0c;有一種思維定勢&#xff0c;將人鎖住&#xff0c;人口就是囚。 口人囚~口加人等于囚-CSDN博客 如果突破&#xff0c;跳出問題&#xff0c;再看問題。 這門課程&#xff0c;或者這個平…

學習率及相關優化參數詳解:驅動模型高效訓練

一、引言 在模型微調的核心參數體系中&#xff0c;優化相關參數是決定訓練效率與模型性能的關鍵變量。它們如同精密機械的齒輪&#xff0c;彼此聯動、相互影響&#xff0c;共同調控著模型在參數空間中的搜索路徑。本文將圍繞學習率、訓練輪數、批處理大小、梯度累積和學習率調…

golang 柯里化(Currying)

使用場景&#xff1a;參數在語義上屬于不同組&#xff0c;Go 語法無法在單次調用中聲明多組可變參數&#xff0c;通過柯里化可以實現分步接收參數。 有的參數是在不同時間段產生&#xff0c;使用Currying可以讓函數記住&#xff08;緩存&#xff09;參數&#xff0c;避免應用代…