当前位置: 首页 > news >正文

运维自动化工具Ansible大总结20250914

常见的自动化运维工具

一、Ansible基础

开发 基于Python语言实现
关键 三大关键模块:
ParamikoPyYAMLJinja2
编排 支持playbook自动化方式编排任务
劣势 由于基于
ssh方式来通信,所以受ssh的限制比较多

1. ubuntu安装ansible

更新软件源
root@ubuntu24-13:~# apt update
root@ubuntu24-13:~# apt install -y software-properties-common
安装ansible的专⽤软件源
root@ubuntu24-13:~# add-apt-repository --yes --update ppa:ansible/ansible
root@ubuntu24-13:~# apt-cache madison ansible  查看ansible的软件版本信息
root@ubuntu24-13:~# apt-cache madison ansible-core  查看ansible-core核心软件版本
root@ubuntu24-13:~# apt install -y ansible   安装ansible软件(可以直接用此命令安装,不过得到的版本不是最新,且没有配置文件。不如安装ansible的专用软件源,再进行安装)
ansible常见的命令如下
命令文件解析
ansible -h 结果显示
配置⽂件解析
Ansible 的配置⽂件可以放在多个不同地⽅,表⽰作⽤范围的不同,优先级从⾼到低顺序如下
定制配置文件
按照全格式方式生成配置文件
root@ubuntu24-13:~# ansible-config init -t all --disabled > ansible_all.cfg
root@ubuntu24-13:~# ansible-config init --disabled > ansible_default.cfg

2.简单的实践

command模块[熟练]

ansible的默认模块叫command
对于默认模块来说,我们不需要-m来指定模块,可以对目标主机使用"-a"传入一个命令参数,来执行查看本机上的信息,命令格式如下:
ansible <目标主机> -a 模块参数
查看当前主机的⽹卡信息
root@ubuntu24-13:~# apt install net-tools -y # 否则没有ifconfig命令
root@ubuntu24-13:~# ansible localhost -a "ifconfig eth0"

③ping模块

ansible 可以通过 ping模块来探测目标主机的存活性,格式如右:ansible localhost -m ping
ansible中的信息显示格式可以通过 -o 方式用单行显示:ansible localhost -m ping -o
显示更多信息,采用 -vv 或者 -vvv   例:ansible localhost -m ping -vv

3.ansible-doc命令[掌握]

ansible-doc命令是专⻔来查看ansible的模块帮助信息的,可以通过-h参数来查看他的帮助信息
常见参数
-a 显示所有帮助信息,该参数已经被 --metadata-dump 参数替代    all
-l 显示所有模块   list

-s 显示简单的帮助信息   simple

4.ansible-config命令[扩展]

ansible-config命令用于专门管理ansible的配置信息  可以通过-h参数来查看他的帮助信息
结果显示:
view用于查看ansible配置
dump用于查看ansible的默认环境变量
list用于罗列ansible详细的配置项
init用于创建初始化配置项

5.主机清单

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名.默认的 inventory file/etc/ansible/hosts
inventory file可以有多个,且也可以通过插件模块的方式,从mysql、云平台等上面,以Dynamic Inventory的方式生成主机清单.
注意: 生产建议在每个项目目录下创建项目独立的hosts文件

官方文档:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

主机清单属性样式[了解]

对于ansible的主机列表⽂件来说,默认情况下该⽂件是⼀个全注释⽂件,里面罗列了⼀些主机列表的表现样式,具体内容如下:

主机清单的描述方式有两种:主机ip地址和主机名
## blue.example.com
## 192.168.100.1

主机清单文件格式[了解]

主机文件清单实例:

③主机列表命名异常实践

编辑主机列表,主机清单的配置条⽬不允许出现 短横杠-,若出现则有问题提⽰信息
增加两种样式的主机列表
echo '10.0.0.101' >> /etc/ansible/hosts
echo -e "[ansible-server]\n10.0.0.101" >> /etc/ansible/hosts
root@ubuntu24-13:~# ansible 10.0.0.101 -a "ls /root"  若改成[ansible_server] 没了报错

④主机列表认证操作实践(即打通key验证)

root@ubuntu24-13:~# > ~/.ssh/known_hosts # 如果没有该命令后面看不到yes效果

root@ubuntu24-13:~# ssh-keygen
root@ubuntu24-13:~# ssh-copy-id root@localhost
root@ubuntu24-13:~# ssh-copy-id root@10.0.0.101


再次执行下面的命令就没有了报错
root
@ubuntu24-13:~# ansible 10.0.0.101 -a "ls /root" 

结果显示:
通信方式:ansible连接目标主机主要是通过ssh协议的方式
认证列表:ansible会将连接成功的主机列表信息,记录到ssh的认证列表".ssh/known_hosts"

⑤⾸次操作WARNING提示解决

根据信息提示,python的命令解释器是 /usr/bin/python3.12,重新编辑hosts文件

root@ubuntu24:~# sed -i 's#.13#.13 ansible_python_interpreter=/usr/bin/python3.10#g' /etc/ansible/hosts     (虽然是3.12但是本机安装的是3.10 故填写3.10)


再次执行命令发现warning已消失

⑥认证原理

root@ubuntu24-13:~# ansible -h | grep '\-k,'
root@ubuntu24-13:~# ansible ansible_server -a "ls /root" -k   需要输入密码 效果如下

⑦主机认证实践

跨主机免密码认证
生成秘钥对:ssh-keygen -t rsa   
传递秘钥文件:ssh-copy-id root@10.0.0.101
集群主机免密码认证脚本
vim 01-root_ssh_auth.sh
#!/bin/bash
# 功能:自动化配置多主机SSH免密登录及主机名设置
# 适用场景:批量初始化多台服务器的基础网络环境# ==============================================
# 环境变量配置
# ==============================================
USER_NAME="root"                     # SSH登录用户名
USER_HOME="/${USER_NAME}/.ssh"       # SSH密钥存放目录
SSH_CONFIG_FILE="/etc/ssh/ssh_config" # SSH客户端配置文件
USER_PASSWD="123456"                 # SSH登录密码
HOSTADDR_PRE="10.0.0"                # 主机IP前缀
HOST_LIST="${HOSTADDR_PRE}.101 ${HOSTADDR_PRE}.102 ${HOSTADDR_PRE}.103"  # 主机IP列表
HOSTNAME_LIST="ubuntu24-13 rocky9-12 ubuntu24-16"  # 对应主机名列表
HOSTS_FILE="/etc/hosts"              # 本地hosts文件路径# ==============================================
# 函数定义
# ==============================================# 准备基础环境:安装依赖、生成SSH密钥、配置SSH客户端
base_env() {# 安装expect工具(用于自动化交互)apt install expect -y# 清理并重建SSH密钥目录[ -d "${USER_HOME}" ] && rm -rf "${USER_HOME}"mkdir -p "${USER_HOME}"# 生成无密码SSH密钥对ssh-keygen -t rsa -P "" -f "${USER_HOME}/id_rsa" >/dev/null 2>&1# 配置SSH客户端自动接受新主机密钥sed -i '/StrictHostKeyChecking/{s/#//; s/ask/no/}' "${SSH_CONFIG_FILE}"
}# 自动化SSH密钥分发(处理交互过程)
# 参数:$1 - 目标主机地址(格式:用户名@主机)
expect_auto() {local remote_host="$1"expect -c "spawn ssh-copy-id -i ${USER_HOME}/id_rsa.pub ${remote_host}expect {\"*yes/no*\" {send \"yes\r\"; exp_continue}  # 自动接受新主机密钥\"*password*\" {send \"${USER_PASSWD}\r\"; exp_continue}  # 输入密码\"*Password*\" {send \"${USER_PASSWD}\r\";}  # 处理大写Password的情况}" >/dev/null 2>&1  # 屏蔽冗余输出
}# 批量配置免密登录并同步hosts文件
auth_auto() {# 循环处理所有目标主机(IP和主机名两种方式)for host in ${HOST_LIST} ${HOSTNAME_LIST}; do# 分发SSH公钥echo "配置免密登录: ${USER_NAME}@${host}"expect_auto "${USER_NAME}@${host}"# 同步本地hosts文件到目标主机echo "同步hosts文件到: ${USER_NAME}@${host}"scp -rp "${HOSTS_FILE}" "${USER_NAME}@${host}:${HOSTS_FILE}" >/dev/null 2>&1done
}# 批量设置主机名
hostname_set() {# 循环设置每个主机的主机名for hostname in ${HOSTNAME_LIST}; doecho "设置主机名: ${hostname}"ssh "${USER_NAME}@${hostname}" "hostnamectl set-hostname ${hostname}" >/dev/null 2>&1done
}# ==============================================
# 主函数:程序入口
# ==============================================
main() {echo "===== 开始执行环境初始化 ====="# 1. 准备基础环境echo "1. 准备基础环境..."base_env# 2. 配置跨主机免密认证echo "2. 配置免密登录..."auth_auto# 3. 批量设置主机名echo "3. 设置主机名..."hostname_setecho "===== 环境初始化完成 ====="
}# 执行主函数
main
传递/etc/hosts⽂件测试
root@ubuntu24-13:~# for i in 101 102; do scp /etc/hosts root@10.0.0.$i:/etc/hosts; done

⑧sudo 简单实践

客⼾端主机创建普通⽤⼾
[root
@rocky9-12 ~]# useradd -m putong
[root@rocky9-12 ~]# echo putong:123456 | chpasswd
master主机配置ansible主机列表
root
@ubuntu24-13:~# echo -e "[remote_user]\n10.0.0.12" >> /etc/ansible/hosts
root@ubuntu24-13:~# ssh-copy-id putong@10.0.0.12   #master主机配置跨主机免密码认证
root@ubuntu24-13:~# ansible remote_user -u putong -m ping  #ansible使⽤普通⽤⼾测试效果
root@ubuntu24-13:~# ansible remote_user -u putong -a "ls /root"   #执行无权限命令

6.⽬标主机匹配

将之前的主机清单,清理完毕后,将三台主机分布加入到不同的主机组中
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.16
[storage]
10.0.0.12
10.0.0.16
root@ubuntu24-13:~# ansible all -m ping   查看所有主机的存活情况

7.模块实践

①command功能实践[熟练]

chdir:切换到指定⽬录,再执⾏后序命令
root
@ubuntu24-13:~# ansible 10.0.0.12 -a "chdir=/tmp mkdir cmd_test"
root@ubuntu24-13:~# ansible 10.0.0.12 -a "chdir=/tmp/cmd_test touch 815.txt"
root@ubuntu24-13:~# ansible 10.0.0.12 -a "chdir=/tmp/cmd_test ls"   
10.0.0.12 | CHANGED | rc=0 >>
815.txt
命令格式:ansible <目标主机> -m shell -a '可执行命令'
command默认情况下,可执⾏命令中不允许出现命令别名 和管道符等特殊服务号
root@ubuntu24-13:~# ansible 10.0.0.12 -a 'ls -l /tmp/cmd_test'   可执行成功 ll则不行
对于系统默认的环境变量,ansible可以正常执行,但是涉及到一些自定义变量和特殊符号就不行

② shell模块功能和实践

帮助信息:ansible-doc -s shell

chdir:                  # command
creates:              # command
executable:        # 设置执行命令的shell类型
free_form:          # command
removes:           # command
stdin:                 # command
warn:                 # command
命令格式:ansible <目标主机> -m shell -a '可执行命令'
root@ubuntu24-13:~# ansible 10.0.0.102 -m shell -a 'export HAHA=NIHAO; echo $HAHA'

root@ubuntu24-13:~# ansible 10.0.0.102 -m shell -a "/bin/bash /tmp/test.sh 12"
10.0.0.102 | CHANGED | rc=0 >>
12

scripts模块功能和实践

命令格式:ansible <目标主机> -m script -a '可执行命令'

正常方式执行,会因为文件权限的问题,而发生报错

 root@ubuntu24-13:~# ansible 10.0.0.16 -m script -a "/tmp/test.sh 0.15"  

对于scripts来说,直接使用命令解释器就可以正常执行
root@ubuntu24-13:~# ansible 10.0.0.16 -m script -a "/bin/bash /tmp/test.sh 0.15"

④系统管理模块

①hostname模块[熟练]

命令格式:ansible <目标主机> -m hostname -a 'name=主机名'
设定主机名为ansible-node2
root
@ubuntu24-13:~# ansible 10.0.0.102 -m hostname -a "name=ansible-node2"
root@ubuntu24-13:~# ansible 10.0.0.16 -a "hostname"    #检验效果
②user模块[熟练]

命令格式:ansible <目标主机> -m user -a '属性1=1 属性2=2 ... 属性n=n'
创建⼀个定制的系统⽤⼾webapp,属组是rootbinuid10086,禁⽌登陆,家⽬录在/tmp/webapp
root@ubuntu24-13:~# ansible 10.0.0.102 -m user -a "name=webapp system=yes groups=root,bin uid=10086 comment='webapp' shell=/sbin/nologin home=/tmp/webapp state=present"
检查效果如下
删除用户
root@ubuntu24-13:~# ansible 10.0.0.16 -m user -a "name=webapp state=absent remove=yes"
③group模块[熟练]

命令格式:ansible <目标主机> -m group -a '属性1=1 属性2=2 ... 属性n=n'
创建⼀个⽤⼾组
root
@ubuntu24-13:~# ansible 10.0.0.16 -m group -a "name=webap system=yes gid=10088"
root@ubuntu24-13:~# ansible 10.0.0.16 -a "getent group webap"   #验证信息
删除一个用户组
root@ubuntu24-13:~# ansible 10.0.0.16 -m group -a "name=webap state=absent" 
④ cron模块

命令格式:ansible <目标主机> -m cron -a '属性1=1 属性2=2 ... 属性n=n'
注意:
job的命令一定要规范,最好使用绝对路径。
state=absent 表示删除
disabled=yes|no|true|false 表示禁用或启用

root@ubuntu24-16:~# apt install -y cron    如果目标主机没有命令则无法正常执行
注意:如果时间设定不成功,那么有可能是因为 ntp服务是正常运行的,需要修改一下
root@ubuntu24-13:~# ansible 10.0.0.102 -a 'date -s "2019-01-12"'  
root@ubuntu24-13:~# ansible 10.0.0.102 -m cron -a 'name="custom job" minute=*/1 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate time1.aliyun.com"'
root@ubuntu24-13:~# ansible 10.0.0.102 -a 'crontab -l'   检测定时任务
root@ubuntu24-13:~# ansible 10.0.0.102 -a 'date'   稍等一分钟后,再执行该命令
root@ubuntu24-13:~# ansible 10.0.0.102 -m cron -a 'disabled=yes name="custom job" job="/usr/sbin/ntpdate time1.aliyun.com"'  禁用定时任务
root@ubuntu24-13:~# ansible 10.0.0.102 -m cron -a 'disabled=no name="custom job"
job="/usr/sbin/ntpdate time1.aliyun.com"'  启用定时任务
root@ubuntu24-13:~# ansible 10.0.0.16 -m cron -a 'state=absent name="custom job" ' 删除任务
⑤setup模块[熟练]

命令格式:ansible <目标主机> -m setup -a '属性1=1 属性2=2 ... 属性n=n'
root@ubuntu24-13:~# ansible 10.0.0.102 -m setup    获取主机⽬标所有属性
root@ubuntu24-13:~# ansible 10.0.0.102 -m setup -a "filter=ansible_memtotal_mb"  内存总量
root@ubuntu24-13:~# ansible 10.0.0.16 -m setup -a "filter=*ens*"   获取所有的⽹卡信息
⑥ selinux模块

开启selinux,注意:该实验有⼀个前提:远程主机的selinux功能必须开启,否则⽆法演⽰成功。
root
@ubuntu24-13:~# ansible 10.0.0.12 -m selinux -a 'state=enforcing policy=targeted' 启用
root@ubuntu24-13:~# ansible 10.0.0.12 -m selinux -a 'state=disabled policy=targeted' 禁用
root@ubuntu24-13:~# ansible 10.0.0.12 -a "getenforce  检查效果
⑦ mount模块

挂载光盘,永久挂载,并⽴即⽣效 -- ⼀定要保证,能够获取到光盘镜像⽂件,否则会发⽣报错
root@ubuntu24-13:~# ansible 10.0.0.16 -m mount -a 'src=/dev/sr1 path=/mnt/ state=mounted
fstype=iso9660'
取消挂载,临时⽣效,挂载点和设备,指定⼀个即可
root@ubuntu24-13:~# ansible 10.0.0.16 -m mount -a 'src=/dev/sr1 path=/mnt/ state=unmounted'
⑧sysctl模块
sysctl 模块⽤来修改远程主机上的内核参数
修改内核参数,并写⽂件
root@ubuntu24-13:~# ansible 10.0.0.16 -m sysctl -a 'name=net.ipv4.ip_forward value=1'
root@ubuntu24-13:~# ansible 10.0.0.16 -a 'sysctl -a | grep "ip_forward ="'  检查效果
从文件中删除
root@ubuntu24-13:~# ansible 10.0.0.16 -m sysctl -a 'name=net.ipv4.ip_forward state=absent'

⑤文件管理模块

①copy模块[熟练]
命令格式:ansible <目标主机> -m copy -a '属性1=1 属性2=2 ... 属性n=n'
1 纯拷贝文件的动作
root@ubuntu24-13:~# echo nihao > /tmp/script.sh
root@ubuntu24-13:~# ansible 10.0.0.16 -m copy -a "src=/tmp/script.sh dest=/tmp/tpircs.sh"
2 拷⻉⽂件的时候,更改属性(属组|+权限)
root@ubuntu24-13:~# ansible 10.0.0.16 -m copy -a "src=/tmp/script.sh dest=/tmp/tpircs.sh owner=daemon group=sys mode=666"
3 拷⻉⽂件时候,增加备份功能
root@ubuntu24-13:~# echo ls >> /tmp/script.sh
root@ubuntu24-13:~# ansible 10.0.0.16 -m copy -a "src=/tmp/script.sh dest=/tmp/tpircs.sh
backup=yes"
4 利⽤内容,直接⽣成⽬标⽂件
root@ubuntu24-13:~# ansible 10.0.0.16 -m copy -a "content='test content\n'
②fetch模块[熟练]
该模块的作用于copy的作用正好相反,它是从远程主机拉取文件到本地目录
命令格式:ansible <目标主机> -m fetch -a '属性1=1 属性2=2 ... 属性n=n'
1单文件拉取
root@ubuntu24-13:~# ansible 10.0.0.16 -m fetch -a "src=/tmp/tpircs.sh dest=/tmp"
2 多⽂件拉取   fetch默认情况下只能拉取单文件,而且它不支持通配符
root@ubuntu24-13:~# ansible 10.0.0.16 -m fetch -a "src=/var/log/*.log dest=/tmp/"
最好通过压缩包的方式,来实现多文件的传输
root@ubuntu24-13:~# ansible 10.0.0.16 -m shell -a "tar zcf /tmp/log.tar.gz /var/log/*.log"
tar: 从成员名中删除开头的/
tar: 从硬连接目标中删除开头的/
root@ubuntu24-13:~# ansible 10.0.0.16 -m fetch -a "src=/tmp/log.tar.gz dest=/tmp"

root@ubuntu24-13:~# tar tvf /tmp/10.0.0.16/tmp/log.tar.gz 查看压缩包里的文件

③file模块[熟练]

命令格式:ansible <目标主机> -m file -a '属性1=1 属性2=2 ... 属性n=n'
1 创建文件
root@ubuntu24-13:~# ansible 10.0.0.16 -m file -a "path=/file/ state=directory"
root@ubuntu24-13:~# ansible 10.0.0.16 -m file -a "src=/etc/fstab dest=/file/file.link state=link"
2 设置文件属性
root@ubuntu24-13:~# ansible 10.0.0.16 -m file -a "path=/file/file.txt owner=daemon mode=666"
3 删除文件
root@ubuntu24-13:~# ansible 10.0.0.16 -m file -a "path=/file/ state=absent"
④ stat模块
stat模块主要作用的场景是 文件状态查看等
命令格式:ansible <目标主机> -m stat -a 'path=文件路径 属性1=1 ... 属性n=n'
root@ubuntu24-13:~# ansible 10.0.0.16 -m stat -a "path=/tmp/tpircs.sh" 查看指定⽂件效果

⑥压缩包模块

①Get_url模块
用于将文件从httphttpsftp下载到被管理机节点上
命令格式:ansible <目标主机> -m get_url -a 'url=文件的http路径 属性1=1 ... 属性n=n'
下载互联⽹中的⽂件
root@ubuntu24-13:~# ansible 10.0.0.16 -m get_url -a 'url=http://nginx.org/download/nginx-
1.18.0.tar.gz dest=/usr/local/src/nginx.tar.gz
下载⼀个⽂件id不匹配的⽂件
root
@ubuntu24-13:~# ansible 10.0.0.16 -m get_url -a 'url=http://nginx.org/download/nginx-
1.21.5.tar.gz dest=/usr/local/src/nginx.tar.gz
② archive模块
archive模块,用于打包压缩保存在被管理节点
命令格式:ansible <目标主机> -m archive -a '属性1=1 ... 属性n=n'
root@ubuntu24-13:~# ansible 10.0.0.16 -m shell -a "mkdir /tmp/logs; cp /var/log/*.log
/tmp/logs/"    准备临时文件目录
root@ubuntu24-13:~# ansible 10.0.0.16 -m shell -a 'mkdir /data'  准备远程主机环境
root@ubuntu24-13:~# ansible 10.0.0.16 -m archive -a 'path=/tmp/logs/ dest=/data/log.tar.gz
format=gz owner=sswang mode=0600
③unarchive模块[熟练]
unarchive模块主要用于压缩包的解压功能
命令格式:ansible <目标主机> -m unarchive -a '属性1=1 ... 属性n=n'
root@ubuntu24-13:~# tar zcf passwd.tar.gz /etc/passwd
tar: 从成员名中删除开头的/
root@ubuntu24-13:~# ansible 10.0.0.16 -m shell -a "mkdir -p /data/passwd/etc"
将本地主机⽬录中的⽂件解压到指定⽬录
root@ubuntu24-13:~# ansible 10.0.0.16 -m unarchive -a 'src=/root/passwd.tar.gz
检查效果
root@ubuntu24-13:~# ansible 10.0.0.16 -m shell -a "apt install tree"
root@ubuntu24-13:~# ansible 10.0.0.16 -m shell -a "tree /data/passwd"

⑦编辑模块[了解]

1.lineinfile模块在ansible使用的时候,标准的写法是:
ansible <目标主机> -m lineinfile -a '属性1=1 ... 属性n=n'
将指定的⽂件内容进⾏"⾏替换"
root@ubuntu24-13:~# ansible 10.0.0.16 -m lineinfile -a "path=/tmp/nginx_test.conf
regexp='listen' line=' listen 80'"
2.Replace模块相较于lineinfile模块来说,更倾向于sed命令的操作,尤其是多行匹配进行替换操作
将⽂件内容进⾏多⾏匹配后,替换
root@ubuntu24-13:~# ansible 10.0.0.16 -m replace -a "path=/tmp/fstab regexp='(defau.*)'
replace='#\1'"

⑧软件模块   apt (yum略)

root@ubuntu24-13:~# ansible 10.0.0.16 -m apt -a "update_cache=yes"  更新索引源
root@ubuntu24-13:~# ansible 10.0.0.16 -m apt -a "autoclean=yes"  清空缓存
root@ubuntu24-13:~# ansible 10.0.0.16 -m apt -a "name=nginx,mariadb-server,redis-server
state=present"   安装三个软件
检查效果
root@ubuntu24-13:~# ansible 10.0.0.16 -m shell -a 'apt list --installed | egrep "nginx|redis-server"'
卸载软件
root@ubuntu24-13:~# ansible 10.0.0.16 -m apt -a 'name=mariadb-server,redis-server state=absent'     
注意:
在移除软件的时候,需要移除真正的服务软件,不能仅仅是安装时候的软件包名
root@ubuntu24-16:~# apt purge nginx mariadb-server redis-server
①apt_repository模块1
添加源信息, 如果指定的软件源是⽆法访问的,那么就导致⽆法更新软件源了
root@ubuntu24-13:~# ansible 10.0.0.16 -m apt_repository -a 'repo="deb http://dl.google.com/linux/chrome/deb/ stable main" filename="chrome" update_cache=no'
root@ubuntu24-13:~# ansible 10.0.0.16 -m apt_repository -a 'repo="deb
http://dl.google.com/linux/chrome/deb/ stable main" filename="chrome" state=absent' 删除软件源信息
②apt_repository模块2
定制源文件内容 01-apt_add_repo.yml
root@ubuntu24-13:~# cat 01-apt_add_repo.yml
- hosts: 10.0.0.16
 tasks:
- name: tuna-repository
   apt_repository:
     repo: deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe
multiverse
     state: present    (改成absent就是删除源)
root@ubuntu24-13:~# ansible-playbook 01-apt_add_repo.yml   添加源信息
③apt_key 模块
root@ubuntu24-13:~# ansible 10.0.0.16 -m apt_key -a
'url=https://download.ceph.com/keys/release.asc state=present'   添加key实践
root@ubuntu24-13:~# ansible 10.0.0.16 -m apt_key -a
'url=https://download.ceph.com/keys/release.asc state=absent'   删除key实践

⑨service模块[熟练]

root@ubuntu24-13:~# ansible 10.0.0.16 -m service -a 'name=nginx enabled=yes' 开机⾃启动
root@ubuntu24-13:~# ansible 10.0.0.16 -a "systemctl is-enabled nginx" -o  检查效果
root@ubuntu24-13:~# ansible 10.0.0.16 -m service -a 'name=nginx enabled=false' 开机不⾃启动
root@ubuntu24-13:~# ansible 10.0.0.16 -m service -a 'name=nginx state=started'  启动服务
root@ubuntu24-13:~# ansible 10.0.0.16 -m fetch -a "src=/etc/nginx/sites-available/default
dest=./"   获取配置文件
root@ubuntu24-13:~# sed -i 's/80/81/g' 10.0.0.16/etc/nginx/sites-available/default 修改文件
root@ubuntu24-13:~# ansible 10.0.0.16 -m copy -a "src=10.0.0.16/etc/nginx/sites-available/default dest=/etc/nginx/sites-available/"   传输文件
root@ubuntu24-13:~# ansible 10.0.0.16 -m service -a 'name=nginx state=restarted' 重启软件服务

⑩ 信息模块

root@ubuntu24-13:~# ansible 10.0.0.16 -m setup -a "filter=ansible_memtotal_mb" 获取内存总量
root@ubuntu24-13:~# ansible 10.0.0.16 -m setup -a "filter=*ens*"  获取所有的⽹卡信息
root@ubuntu24-13:~# ansible 10.0.0.16 -m setup -a 'filter=ansible_all_ipv4_addresses' 取得IP
root@ubuntu24-13:~# ansible 10.0.0.16 -m setup -a 'filter="ansible_default_ipv4"' 取默认ip

あ debug模块

root@ubuntu24-13:~# ansible 10.0.0.16 -m debug 默认信息输出
root@ubuntu24-13:~# ansible 10.0.0.16 -m debug -a 'msg="hello debug"'  定制调试信息

8. 相关命令[了解]

1 ansible-console

ansible-console是让我们以可交互终端形式执行命令,我们可以直接输入该条命令就直接进入到可操作终端.
命令简介
console提供了一些常见的应用命令,效果如下:
设置并发数:forks n 例如:forks 10
切换主机组:cd group_name 例如:cd web
列出当前组主机列表:list
列出所有的内置命令:?help
退出:exit

2 ansible-playbook

简单实践

mkdir /data/ansible/playbook -p
cd /data/ansible/playbook
vim hello.yml 
- hosts: 10.0.0.101remote_user: rootvars:- zabbix_version: '5.4.9'  # 定义Zabbix版本变量tasks:- name: 发送hello world广播消息command: wall "hello world"tags:- hello_world- name: 输出zabbix_version变量值debug:msg: "当前Zabbix版本为: {{ zabbix_version }}"  # 引用并显示变量内容tags:- show_version  # 新增标签,方便单独执行此任务
语法检查效果:ansible-playbook hello.yml --syntax-check
模拟文件执行:ansible-playbook -C hello.yml
文件执行:ansible-playbook hello.yml

ansible-vault

需求:yaml文件中有很多敏感的信息,不想丢失安全,生产中的某些敏感信息才会使用这种方式。
方案:ansible-vault 命令的作用就是采用安全加密的方式来操作相关文件。
创建加密文件:ansible-vault create /tmp/vault
查看效果:cat /tmp/vault
使用专用命令查看加密文件:ansible-vault view /tmp/vault
使用专用命令编辑加密文件:ansible-vault edit /tmp/vault
使用专用命令解密文件:ansible-vault decrypt /tmp/vault
加密现有文件:ansible-vault encrypt hello.yml
查看效果:cat hello.yml
更改查看文件的口令:ansible-vault rekey hello.yml
使用更改后的口令查看文件:ansible-vault view hello.yml

4 ansible-galaxy

ansible有大量的第三方资源,它们存放在https://galaxy.ansible.com网站上,好多参与者将自己定制好的工具模块都上传到该网站上,我们在学习ansibleplaybook的时候,可以有大量的案例从galaxy的网站上获取。
下载 galaxy 功能⻆⾊: ansible-galaxy install username.role_name
定制galaxy实践
定制的galaxy的实践其实就是 自建Role、登录galaxy、上传Role和删除Role的动作。
准备专用目录
mkdir /data/ansible/galaxy
cd /data/ansible/galaxy
自建galaxy的角色:ansible-galaxy init roles_name
注意:使用init命令初始化新角色的基本结构,节省创建各种目录和main.yml文件的时间
查看默认的galaxy信息:ansible-galaxy list
查看指定目录下的galaxy信息:ansible-galaxy list --roles-path .
列出所有本地role:ansible-galaxy role list

5 ansible-pull  

准备目录
mkdir /data/ansible/pull
cd /data/ansible/pull
apt install git
ansible-pull -o -C master -d /tmp/test_pull -i /tmp/test_pull/hosts -U https://gitee.com/wshs1117/kubernetes.git
注意:
如果,如果仓库是私有仓库的话,在执行该命令的时候,一定要将本机和远程git提前创建一个秘钥连接。 如果是公开仓库的话,可以不用输入密码等信息。

6 ansible-inventory

简介:ansible-inventory其实是获取主机清单一些的信息的专用命令。
--host, --graph --list,这三个属性,同时的话,只能存在一个。

ansible-inventory --export --list   列出所有主机的信息
ansible-inventory --export --graph    
图形⽅式显⽰主机列表信息
ansible-inventory --host=10.0.0.16  显⽰指定主机的信息

二、Playbook

playbook 是有一个一个的任务组合而成
playbook 中的指令都是基于ansible的命令演变过来的
playbook 的专用执行命令是 ansible-playbook
145

文章转载自:

http://3iRyzd3L.ccdyc.cn
http://X2AN037p.ccdyc.cn
http://GmKv5Rdh.ccdyc.cn
http://QinHXQ89.ccdyc.cn
http://7qGLxGDF.ccdyc.cn
http://4wT96Hi0.ccdyc.cn
http://t2gMOXeK.ccdyc.cn
http://zKbl8nPz.ccdyc.cn
http://SPu68jag.ccdyc.cn
http://AFeSpi0G.ccdyc.cn
http://4bm5tNHP.ccdyc.cn
http://kWmzQVmu.ccdyc.cn
http://3ue7Aubx.ccdyc.cn
http://QjYePaei.ccdyc.cn
http://Q26XWcdz.ccdyc.cn
http://qgB5CKKc.ccdyc.cn
http://dPeXEkax.ccdyc.cn
http://XHXXzzPF.ccdyc.cn
http://5uhhXHTG.ccdyc.cn
http://KLvG9gRo.ccdyc.cn
http://7Cfz4NjP.ccdyc.cn
http://lRPHjeiY.ccdyc.cn
http://uDfhOD37.ccdyc.cn
http://2r8MvVMd.ccdyc.cn
http://pM06Q7th.ccdyc.cn
http://PUGuvZTZ.ccdyc.cn
http://rPDC0r74.ccdyc.cn
http://7lwVdDSP.ccdyc.cn
http://BcV5vH4h.ccdyc.cn
http://tYJFG5jo.ccdyc.cn
http://www.dtcms.com/a/383186.html

相关文章:

  • Linux 库开发入门:静态库与动态库的 2 种构建方式 + 5 个编译差异 + 3 个加载技巧,新手速看
  • Effective Python 第28条:Python列表推导式的简洁与复杂性管理
  • 【MySQL】从零开始学习MySQL:基础与安装指南
  • 基于STM32的病人监护系统
  • Python与Go结合
  • AI大师系列——杰夫·辛顿(深度学习)
  • Unity核心概念⑨:Screen
  • 《MLB美职棒大联盟》专业运动员标准·棒球1号位
  • reversed()方法
  • Altium Designer(AD24)另存为功能介绍
  • OD C卷 - 计算三叉搜索树的高度
  • 导购返利APP的数据库性能优化:索引设计与查询调优实践
  • pretrain-Alignment范式的强大与极限——李宏毅大模型2025第五讲笔记
  • CSP集训错题集 第一周
  • MCU软件驱动分离
  • 浏览器中javascript时间线,从加载到执行
  • SP‘24 SSRFuzz论文学习
  • 【算法】day2 双指针+滑动窗口
  • 拆解 AI 大模型 “思考” 逻辑:从数据训练到推理输出的完整链路
  • Axios在鸿蒙应用开发中的使用
  • Go高性能双端队列Deque实战指南
  • StringBuilder 深度解析:数据结构与扩容机制的底层细节
  • Altium Designer(AD24)自学资源介绍
  • cs144 lab0学习总结
  • Playwright MCP浏览器自动化指南
  • 经典俄罗斯方块游戏 | 安卓三模式畅玩,暂时无广告!
  • JVM调优常用命令
  • 文心快码Comate - 百度推出的AI编码助手
  • 做一个RBAC权限
  • Debian13下使用 Vim + Vimspector + ST-LINK v2.1 调试 STM32F103 指南