自动化运维(playbook剧本yaml)
是基于Python开发的配置管理和应用部署工具。自动化运维中,现在是异军突起。
Ansible能批量配置,部署,管理上千台主机,类似于Xshell的一键输入的工具,不需要每次都切换主机进行操作。
只要有一台ansible的固定主机,就可以所有节点的操作。
主需要一台主机上配置了ansible。
Ansible是基于模块进行工作,只是提供了一种运行的架构,执行操作和辨证的事ansible的模块来实现的。
Copy
Service
Ansible默认是通过ssh的密钥对实现通信(可以改)
Ansible的另一特点,所有模块都是幂等性。
幂等性:所谓幂等性,指的是多次操作或者多次执行行对系统资源的影响是一致的。
Systemctl stop firewalld
Systemctl stop firewalld
Systemctl stop firewalld
只要发现要停止的目标服务已经停止了。后续同样的停止操作,不会改变任何结果,生么也不做。
Systemctl resart firewalld 每一次操作都会先停再启动。
http get 幂等性
Post:多次执行相同的post可能创建多个相同的资源。
Ansible的幂等性,决定了你可以放心大胆的使用,重复执行某个任务不会对结果产生任何影响(绝大多数情况)。
Ansible的四大组件:
Ansible的优缺点:
部署较为简单,主要在控制主机部署即可,被控制主机需要有ssh和pyhon2.5以上版本。基本上Linux都是自带的。
Ansible只能控制Linux系统,windows不行。
基于模块工作,可以使用任意语言开发模块(二次开发。底层架构)
环境:
配置主机有两种方式:
Ansible的命令格式:
Ansible 组名/ip -m 模块名称 -a ‘参数列表(执行的命令)’
模块一:
Command模块,在远程主机执行Linux命令,不支持管道符,重新定向输出。
Ansible 192.168.233.20 -a ‘ls /opt’
不加-m也就是不声明使用的模块,默认就是command模块。
常见参数:
Chdir:在远程主机上运行命令,提前就是command模块
Creates:判断指定文件是否存在,如果存在,不指定后面的操作。
Removes:判断指定的文件是否存在,如果存在,执行后续的命令。
模块二:
Shell模块,在远程主机执行命令。相当于 远程主机上的shell禁止,支持管道符和冲向
在ansible当中,多个引号之间要做隔阂
表示逻辑且,前一个命令成功才会执行后一个。
表示逻辑或,前面都成功与否,后面的命令都会执行。
在ansible 192.168.233.30 -m shell -a ‘touch’ /opt/ 123 && echo 456 > /opt/123 && ls /opt && cat /opt/123
模块三:
cron模块 远程主机设置定时任务
两种状态:present表示添加(默认就是添加,可以省略)
absent:表示移除。#absent在整个ansible的语法中都表示移除的 意思(删除)
分 时 日 月 周
分=minute 时=hour 日= day 月=month 周=weekday
job:任务执行的命令
name:任务计划名称,可以不加
删除定时任务:
多个几乎任务如果不给名字都是none,一但删除none 全部删除,不推荐,最好加上名字。
模块四:
User模块:用户管理模块
常用的参数:
name:指定用户名,必须添加
State present absent 创建用户可以不加 present ,删除一定要加 absent
System=yes | no ,标记用户是否是一个程序用户
Uid:用户的唯一标识
Group:用户的所在组
Create_home=yes | no 。替换用户的家目录, 不需要替换用户的家目录可以不写
Password:创建用户密码
Comment:用户的注释信息(可有可无)
Remove=yes | no 当前删除用户,加上remover=yes 删除用户的家目录 userdel -r 如果不需要删除家目录。可以不写。
在创建用户时,虽然我申明了是一个程序用户,但是默认的登录shell如果没有额外的声明,还是默认的/bin/bash UID会按照 程序用户来指定。
使用ansible的user模块创建用户时,如果创建普通用户可以不加system=no 指定shell类型可以不加,默认就是/bin/bash如果创建的是程序用户,一定要声明system=yes 声明shell类型 shell=/sbin/nlogin 也可以指定UID的方式。给用户分配一个uid.
模块五:
Group模块:用户组的管理模块
常用参数:
Name 必须要有
Gid 设置组的id
先删除组用户: