ansible 自动化运维

  • 4台主机,需要配置主机名、IP地址、YUM。关闭SELINUX和防火墙
  • 配置控制节点pubserver,具体要求如下:

    • 配置名称解析,能够通过名字访问所有节点
    • 配置可以通过ssh到所有节点免密登陆
复制代码
[root@pubserver ~]# echo -e "192.168.88.240\tpubserver" >> /etc/hosts
复制代码
[root@pubserver ~]# for i in 1 2
复制代码
> do
复制代码
> echo -e "192.168.88.1$i\tweb$i" >> /etc/hosts
复制代码
> done
复制代码
[root@pubserver ~]# echo -e "192.168.88.13\tdb1" >> /etc/hosts
复制代码
[root@pubserver ~]# tail -4 /etc/hosts
复制代码
192.168.88.240   pubserver
复制代码
192.168.88.11    web1
复制代码
192.168.88.12    web2
复制代码
192.168.88.13    db1
复制代码
# 配置免密登陆
复制代码
[root@pubserver ~]# ssh-keygen   # 三个问题都直接回车,使用默认值
复制代码
# 执行以下命令时,可能需要回答yes和远程用户的密码,请按提示操作
复制代码
[root@pubserver ~]# for i in web{1..2} db1
复制代码
> do
复制代码
> ssh-copy-id $i
复制代码
> done

配置ansible管理环境

复制代码
# 创建ansible工作目录,目录名自己定义,不是固定的。
复制代码
[root@pubserver ~]# mkdir ansible
复制代码
[root@pubserver ~]# cd ansible
复制代码
# 创建配置文件。默认的配置文件是/etc/ansible/ansible.cfg,但是一般不使用它,而是在工作目录下创建自己的配置文件
复制代码
[root@pubserver ansible]# vim ansible.cfg    # 文件名必须是ansible.cfg
复制代码
[defaults]
复制代码
host_key_checking = false   # 不检查主机密钥,=号两边空格可有可无。
复制代码
inventory = inventory       # 定义主机清单文件为当前目录的inventory
复制代码
# 创建主机清单文件。写在[]里的是组名,[]下面的是组内的主机名
复制代码
[root@pubserver ansible]# vim inventory
复制代码
[webservers]
复制代码
web[1:2]   # web1和web2的简化写法,表示从1到2
复制代码
[dbs]
复制代码
db1
复制代码
# cluster是组名,自定义的;:children是固定写法,表示下面的组名是cluster的子组。
复制代码
[cluster:children]
复制代码
webservers
复制代码
dbs
复制代码
# 查看被管理的所有的主机。注意,一定在工作目录下执行命令。
复制代码
[root@pubserver ansible]# ansible all --list-hosts
复制代码
  hosts (3):
复制代码
    web1
复制代码
    web2
复制代码
    db1
复制代码
# 查看webservers组中所有的主机
复制代码
[root@pubserver ansible]# ansible webservers --list-hosts
复制代码
  hosts (2):
复制代码
    web1
复制代码
    web2

ansible管理

  • ansible进行远程管理的两个方法:

    • adhoc临时命令。就是在命令行上执行管理命令。
    • playbook剧本。把管理任务用特定格式写到文件中。
复制代码
ansible 主机或组列表 -m 模块 -a "参数"    # -a是可选的
  • 通过ping模块测试到远程主机的连通性。
复制代码
[root@pubserver ansible]# ansible all -m ping
复制代码
# 该命令检查是否可以管理远程主机。如果结果为绿色的SUCCESS,则表示成功。
复制代码
# 如果是红色的UNREACHABLE,则检查网络是否可通,是否已经可以免密登陆
shell模块
  • 与command模块类似,但是支持shell特性,如管道、重定向。
script模块
  • 用于在远程主机上执行脚本
file模块
  • 可以创建文件、目录、链接等,还可以修改权限、属性等

  • 常用的选项:

    • path:指定文件路径
    • owner:设置文件所有者
    • group:设置文件所属组
    • state:状态。touch表示创建文件,directory表示创建目录,link表示创建软链接,absent表示删除
    • mode:设置权限
    • src:source的简写,源
    • dest:destination的简写,目标
复制代码
# 将webservers组的主机上/tmp/file.txt的属主改为sshd,属组改为adm,权限改为0777
复制代码
[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/file.txt owner=sshd group=adm mode='0777'"
复制代码
[root@pubserver ansible]# ansible webservers -a "ls -l /tmp/file.txt"
copy模块
  • 用于将文件从控制端拷贝到被控端

  • 常用选项:

    • src:源。控制端的文件路径
    • dest:目标。被控制端的文件路径
    • content:内容。需要写到文件中的内容
复制代码
[root@pubserver ansible]# echo "AAA" > a3.txt
复制代码
# 将a3.txt拷贝到webservers主机的/root/
复制代码
[root@pubserver ansible]# ansible webservers -m copy -a "src=a3.txt dest=/root/"
复制代码
# 在目标主机上创建/tmp/mytest.txt,内容是Hello World
复制代码
[root@pubserver ansible]# ansible webservers -m copy -a "content='Hello World' dest=/tmp/mytest.txt"
fetch模块
  • 与copy模块相反,copy是上传,fetch是下载

  • 常用选项:

    • src:源。被控制端的文件路径
    • dest:目标。控制端的文件路径
复制代码
复制代码
 webservers组中的主机,把/etc/issue中有Hello的行,替换成chi le ma
复制代码
[root@pubserver ansible]# ansible webservers -m lineinfile -a "path=/etc/issue line='chi le ma' regexp='Hello'"
user模块
  • 实现linux用户管理

  • 常用选项:

    • name:待创建的用户名
    • uid:用户ID
    • group:设置主组
    • groups:设置附加组
    • home:设置家目录
    • password:设置用户密码
    • state:状态。present表示创建,它是默认选项。absent表示删除
    • remove:删除家目录、邮箱等。值为yes或true都可以。
复制代码
# 在webservers组中的主机上,创建lisi用户。设置其uid为1010,主组是adm,附加组是daemon和root,家目录是/home/lisi
复制代码
[root@pubserver ansible]# ansible webservers -m user -a "name=lisi uid=1010 group=adm groups=daemon,root home=/home/lisi"
复制代码
# 设置zhangsan的密码是123456
复制代码
# {{}}是固定格式,表示执行命令。password_hash是函数,sha512是加密算法,则password_hash函数将会把123456通过sha512加密变成zhangsan的密码[root@pubserver ansible]# ansible webservers -m user -a "name=zhangsan password={{'123456'|password_hash('sha512')}}"
group模块
  • 创建、删除组

  • 常用选项:

    • name:待创建的组名
    • gid:组的ID号
    • state:present表示创建,它是默认选项。absent表示删除
复制代码
# 在webservers组中的主机上创建名为devops的组
[root@pubserver ansible]# ansible webservers -m group -a "name=devops"
复制代码
# 在webservers组中的主机上删除名为devops的组
[root@pubserver ansible]# ansible webservers -m group -a "name=devops state=absent"
相关推荐
XIAOHEZIcode1 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉5 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
dayuOK63075 天前
写作卡壳怎么办?我的“5分钟启动法”
人工智能·职场和发展·自动化·新媒体运营·媒体