ansible

ansible功能:

1、远程造作主机功能

2、自动化运维(playbook剧本 yaml)

ansible概念:是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起

ansible能批量配置、部署、管理上千台主机。类似于xshell,的一键输入的工具,不需要每次切换主机进行操作

只要有一台ansible的固定主机,就可以所有节点的操作

不需要agent,客户端。

只需要一台主机上配置了ansible

ansible是基于模块进行工作,只是提供了一种运行的架构,执行操作和辩证的是ansible的模块来实现的

copy

service

ansible默认是通过ssh的密钥队实现通信(可以改,但是一般不动)

ansible的另一个特点:所有模块都是幂等性

幂等性:指的是多次操作或者多次执行对系统资源的影响是一致的

例:

systemctl stop firewalld ×n次,只要发现要停止的目标服务已经停止了,不会改变任何结果,什么也不做。所以是幂等性

systemctl start firewalld ×n次,每一次的操作都会先停再起,所以不是幂等性

http get 是幂等性

post 多次执行相同的post,可能创建多个相同的资源。所以不是幂等性

ansible的幂等性决定了你可以放心大胆的使用,重复执行某个任务不会对结果产生任何影响(绝大多数情况)

ansible的四大组件:

1、Inventory(大写i) 主机清单(主机组)。定义ansible可以远程操作的服务器

2、模块(13个常用的) 通过模块可以实现远程的配置和操作

3、Plugins 插件

4、Playbook剧本(shell脚本) yaml格式

ansible的优缺点:

优点:

①部署较简单。主要在控制主机部署即可,被控制主机需要有ssh和python2.5以上版本。基本linux都是自带的

②ansible只能控制linux系统,windows不行

③基于模块工作,可以使用任意语言开发模块(二次开发。底层架构)

管理端:192.168.233.10 ansible

被管理端:20

30

备用: 40

10上操作

yum -y install epel-release.noarch

yum -y install ansible

yum -y install tree

root@10 \~\]# ****tree /etc/ansible/**** /etc/ansible/ ├── ansible.cfg ├── hosts └── roles ansible.cfg: ansible的主配置文件,一般无需修改 hosts: 主机组,声明可以被控制的主机 roles: 公共角色目录 配置主机有两种方式 1、直接声明主机的ip地址 2、主机名 (/etc/hosts做映射) ****cd /etc/ansible/**** ****vim hosts**** ![](https://file.jishuzhan.net/article/1738277443715731457/148277acd885a58a93f0aabba5cc87df.webp) 把30下面的##删掉 ****ssh-keygen -t**** ****rsa**** ****sshpass -p**** ****'123' ssh-copy-id [email protected]**** ****模块1:command模块**** 在远程主机执行linux命令,不支持管道符,重定向输出 ansible 的命令格式: ansible 组名/ip -m 模块名称 -a '参数列表(执行的命令)' ****sshpass -p**** ****'123' ssh-copy-id**** [**++**[email protected].++**++** **++**++3++**++** **++**++0++**++**](mailto:[email protected]) ****ansible 192.168.233.30 -m command -a**** ****'**** ****date**** ****'**** ****sshpass -p**** ****'123' ssh-copy-id**** [**++**[email protected]++**++**](mailto:[email protected]) ****ansible 192.168.233.20 -m command -a**** ****'**** ****date**** ****'**** ![](https://file.jishuzhan.net/article/1738277443715731457/f28535c67e30b0a8ef15d55bb0ce1c88.webp) 20上操作 tail -f /var/log/messages ansible 192.168.233.20 -m command a 'date' 指定IP地址,只会目标主机执行 ansible webservers -m command -a 'ls /opt' 指定组,组内所有的声明的主机都会执行 ansible all -m command -a 'ls /opt' 所有声明的主机都会执行 ansible 192.168.233.20 -a 'ls /opt' 不加-m也就是不声明使用的模块,默认就是command模块 ![](https://file.jishuzhan.net/article/1738277443715731457/2f6961c398a6e0af3365ad6518ea1eaf.webp) command常用参数: 1、chdir 在远程主机上运行命令,提前进入目录 2、creates 判断指定的文件是否存在,如果存在,不指定后面的操作 3、removes 判断指定的文件是否存在,如果存在,执行后续的命令 ![](https://file.jishuzhan.net/article/1738277443715731457/b091b27cc6b0d26938112a29203c3799.webp) 模块2:shell模块 shell模块,在远程主机执行命令,相当于调用远程主机的shell禁止,支持管道符和重定向。在Ansible当中,多个引号之间要做隔离 ansible 192.168.233.30 -m shell -a touch /opt/123 \&\& echo 456 \> /opt/123 \&\& s /opt \&\& cat /opt/123' \&\&表示逻辑且,前一个命令成功才会执行后一个命令。 ansible 192.168.233.30 -m shell -a 'touch /opt/123 ; echo 456 \> /opt/123 ; s /opt ; cat /opt/123' ;表示逻辑或,前面都成功与否,后面的命令都会执行。 ![](https://file.jishuzhan.net/article/1738277443715731457/007fb01cd2301fb5c883b5fbcbfcc130.webp) ![](https://file.jishuzhan.net/article/1738277443715731457/893c732ad8d63b16594583520fa93e43.webp) 将192.168.233.20的ens33提取出来: ansible 192.168.233.20 -m shell -a 'echo $(ifconfig ens33 \| awk "NR==2{print $2}")\| cut -d " " -f2' ![](https://file.jishuzhan.net/article/1738277443715731457/57a178a836619abb8f6260964d37eff4.webp) ansible 192.168.233.20 -m shell -a "echo $(ifconfig ens33 \| awk 'NR==2{print $2}')" ![](https://file.jishuzhan.net/article/1738277443715731457/be554c8451d1022321035acec66dda96.webp) \&\&符 ansible 192.168.233.30 -m shell -a 'touch /opt/123 \&\& echo 456 \> /opt/123 \&\& ls /opt \&\& cat /opt/123' ![](https://file.jishuzhan.net/article/1738277443715731457/783bb3bc7410c16f033ecf9c39fc8e9f.webp) ;符 ansible 192.168.233.30 -m shell -a 'touch 456 ; echo "520" \> /opt/456 ; cat /opt/456' ![](https://file.jishuzhan.net/article/1738277443715731457/e64089c879dc6957066dc06bf4faff2b.webp) ansible 192.168.233.20 -m shell -a 'echo -e "#!/bin/bash\\nifconfig" \> /opt/a.sh \&\& sh /opt/a.sh' ![](https://file.jishuzhan.net/article/1738277443715731457/8555e3c84986eb5abf495ed051047a1e.webp) 在脚本中执行用位置变量,实现加法,然后运行脚本 ansible 192.168.233.20 -m shell -a 'echo -e "#!/bin/bash\\na=$((2+3))\\necho \\$a" \> /opt/test1.sh \&\& sh /opt/test1.sh' ![](https://file.jishuzhan.net/article/1738277443715731457/da5ef1d92b831bd97df6df3d222e9375.webp) 模块3:cron模块 远程设置定时任务 两种状态:present表示添加(默认就是添加,可以省略);absent表示移除(整个ansible语法中,都表示移除的意思(删除)) 分 时 日 月 周 分=minute 时=hour 日=day 月=month 周=weekday job:任务计划需要执行的命令或脚本(必须要有) name:计划任务的名称(可以不加) 多个计划任务,如果不给名字都是None,一旦删除None,全部删除,不推荐(最好是指定一个不重复的名称) 模块4:user模块 用户管理模块 常用的参数: name:指定用户名(必须要有) state:present absent system=yes/no 标记用户是否是一个程序用户 uid 用户的唯一标识 group 用户的所在组 create_home=yes/no 替换用户的家目录,不需要替换用户的家目录可以不写 password 创建用户的密码 command 用户的注释信息(可有可无) remove=yes/no 当删除用户时,加上remove=yes,删除用户的家目录,相当于userdel -r。如果不需要删除家目录,可以不写 ansible 192.168.233.20 -m user -a 'name=i system=yes' 在创建用户时,虽然声明了是一个程序用户,但是默认的登录shell如果没有额外的声明,还是默认的/bin/bash,UID会按照程序用户来指定 使用ansible的user模块创建用户时,如果创建普通用户,可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash 如果创建的是程序用户,一定要声明system=yes,声明shell的类型shell=/sbin/nologin 也可以指定uid的方式给用户分配一个uid ![](https://file.jishuzhan.net/article/1738277443715731457/3984d31729d21a63f2d7612d2d214185.webp) 模块5:group模块 用户组的管理模块 gid 设置组的id name 必须要有 ansible不适用交互式的命令 ![](https://file.jishuzhan.net/article/1738277443715731457/89012246595a6be039d64026b919d564.webp) 模块6:ping模块 检测主机的 ![](https://file.jishuzhan.net/article/1738277443715731457/ce1416afbf060644175a131e79c8dba2.webp)

相关推荐
云攀登者-望正茂1 天前
使用 Ansible 在 Windows 服务器上安装 SSL 证书
ansible
tianyuanwo3 天前
Ansible自动化运维全解析:从设计哲学到实战演进
运维·自动化·ansible
哆啦A梦15883 天前
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/[email protected] 更换为 go-ansible/@v1.1.7
开发语言·golang·ansible
lifeng43214 天前
在 CentOS 上将 Ansible 项目推送到 GitHub 的完整指南
centos·github·ansible
运维成长记9 天前
ansible-playbook 进阶 接上一章内容
linux·服务器·ansible
半桶水专家9 天前
Ansible 配置Playbook文件格式、关键字和语法详解
ansible
遇见火星11 天前
Ansible模块——Ansible配置文件!
linux·git·ansible
安顾里13 天前
Ansible安装
linux·运维·自动化·ansible
爱莉希雅&&&15 天前
运维Linux之Ansible详解学习(更新中)
linux·运维·ansible
筑梦之路20 天前
centos 9 Kickstart + Ansible自动化部署 —— 筑梦之路
centos·自动化·ansible