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"
相关推荐
EMTime6 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王7 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
zyl837219 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry9 小时前
MGRE实验
运维·服务器
stolentime10 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
bush411 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao12 小时前
软硬链接
linux·运维·服务器
TOWE technology12 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子12 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
大明者省13 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记