一、ansible发展史及功能
1.1 ansible功能
- 批量执行远程命令,可以控制多台主机进行操作
- 批量安装和配置软件服务,可以对多台主机进行自动化的方式配置和管理各种服务
- 编排高级的企业级复杂IT架构任务,例如:playbook、role
- 提供自动化韵味工具的开发API,例如:jumpserver
1.2 ansible特性
- 模块化
- 三个关键模块:Paramiko(python),pyYAML,Jinja2(模版语言)
- 基于python语言实现
- 部署简单,依赖于python和SSH
- 安全,它是基于OpenSSH
- 幂等性
- 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案role
1.3 ansible架构
1.3.1 Ansible组成
- INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts 需要管理的服务清单
- MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
- PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
- API:供第三方程序调用的应用程序编程接口
1.3.2 ansible命令执行来源
- USER 普通用户,即SYSTEM ADMINISTRATOR
- PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
- CMDB(配置管理数据库) API 调用
- PUBLIC/PRIVATE CLOUD API调用
二、ansible安装及入门
2.1 安装
2.1.1 安装epel源和ansible
2.1.2 查看ansible配置项
2.1.3 编辑hosts
2.1.4 远程连接虚拟机二
2.1.5 远程连接虚拟机三
2.1.6 同时ping通两台虚拟机
2.1.7 查看web主机名
2.1.8 分别在web下创建文件test
2.1.9 分别在两台虚拟机上查看test文件
2.1.10 免密登陆
2.2 查看基本信息
2.3 相关信息
- /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件
- /etc/ansible/hosts 主机清单
- /etc/ansible/roles/ 存放角色的目录
2.4 ansible主配置文件
Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改
2.5 inventory主机清单文件
默认的inventory file文件在:/etc/ansible/hosts
2.6 ansible相关工具
- /usr/bin/ansible 主程序,临时命令执行工具
- /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字
- /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
- /usr/bin/ansible-pull 远程执行命令的工具
- /usr/bin/ansible-vault 文件加密工具
- /usr/bin/ansible-console 基于Console界面与用户交互的执行工具
- /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
2.6.1 ansible
执行临时任务一次性任务
格式:
或、且、非
ansible执行命令过程
执行返回结果
- 绿色:执行成功并且不需要做改变的操作
- 黄色:执行成功并且对目标主机做变更
- 红色:执行失败
2.6.2 ansible-doc
2.6.3 ansible-console
2.6.4 playbook
2.7 模块
2.7.1 Command模块
功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现,此模块不具有幂等性
2.7.2 shell模块
功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >
注意:此模块不具有幂等性
2.7.3 scripts
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性
2.7.4 copy模块
功能:从ansible服务器主控端复制文件到远程主机
注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
2.7.5 Get_url模块
功能: 用于将文件从http、https或ftp下载到被管理机节点上
2.7.6 Fetch
功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
2.7.7 File模块
功能:设置文件属性,创建软链接等
path | 指定文件路径 |
---|---|
state | 文件状态 有:新建(touch) 删除(absent) 文件夹(directory) 连接文件(link)等 |
src | 源文件 |
mode | 权限 |
owner | 属主 |
group | 属组 |
recurse | 递归 |
2.7.8 stat模块
功能:检查文件或文件系统的状态
注意:对于Windows目标,请改用win_stat模块
选项:
常用的返回值判断:
2.7.9 unarchive 模块
功能:解包解压缩
实现有两种用法:
- 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略
- 将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
2.7.10 archive模块
功能:打包压缩保存再被管理节点
2.7.11 hostname模块
2.7.12 cron模块
功能:计划任务
支持时间:minute,hour,day,month,weekday
关键字:
2.7.13 yum和apt模块
功能:yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本apt 模块管理 Debian 相关版本的软件包
关键字:
name | 所安装的包的名称 |
---|---|
state | present——安装,lastest——安装最新的,absent——卸载软件 |
update_cache | 强制更新yum缓存 |
conf_file | 指定远程yum安装时所以来的配置文件(安装本地已有的包) |
disable_gpg_check | 是否禁止GPG checking,只用于presentor latest |
disablerepo | 临时禁止使用yum库,只用于安装或更新时 |
enablerepo | 临时使用的yum库。只用于安装或更新时 |
2.7.14 yum_repository模块
功能:建立yum仓库模块
关键字:
name参数 | 必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。 |
---|---|
baseurl参数 | baseurl参数:此参数用于设置 yum 仓库的 baseurl。 |
description参数 | 此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。 |
file参数 | 此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。 |
enabled参数 | 此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。 |
gpgcheck参数 | 此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。 |
gpgcakey参数 | 当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。 |
state参数 | 默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。 |
2.7.15 service模块
功能:管理服务
关键字:
name参数 | 此参数用于指定需要操作的服务名称,比如:nginx |
---|---|
state参数 | 此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有started、stopped、restarted、reloaded |
enabled参数 | 此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动 |
2.7.16 mount挂载和卸载
功能: 挂载和卸载文件系统
2.7.17 User模块
功能:管理用户
comment | 用户的描述信息 |
---|---|
createhome | 是否创建家目录 |
force | 在使用state=absent时, 行为与userdel –force一致. |
group | 指定基本组 |
groups | 指定附加组,如果指定为(groups=)表示删除所有组 |
home | 指定用户家目录 |
move_home | 如果设置为home=时, 试图将用户主目录移动到指定的目录 |
name | 指定用户名 |
non_unique | 该选项允许改变非唯一的用户ID值 |
password | 指定用户密码,使用 SHA512 hash |
remove | 在使用state=absent时, 行为是与userdel –remove一致 |
shell | 指定默认shell |
state | 设置帐号状态,不指定为创建,指定值为absent表示删除 |
system | 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户 |
uid | 指定用户的uid |
update_ password | |
always | 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always |
on_create | 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定 |
2.7.18 group模块
功能:管理组
2.7.19 reboot模块
2.7.20 lineinfile模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
如果想进行多行匹配进行替换需要使用replace模块
功能:相当于sed,可以修改文件内容
关键字:
path | 指定要操作的文件 |
---|---|
regexp | 使用正则表达式匹配对应的行 |
line | 修改为新的内容 |
insertafter | 将文本插入到“指定的行”之后 |
insertbefore | 将文本插入到“指定的行”之前 |
state | 删除对应的文本时,需要state=absent |
backrefs | 1.支持向后引用 2.当未匹配到内容则不操作文件 |
backup | 是否在修改文件之前对文件进行备份 |
create | 当要操作的文件并不存在时,是否创建对应的文件 |
2.7.21 replace
该模块有点类似于sed命令,主要也是基于正则进行匹配和替换
2.7.22 setup模块
功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度
可以使用 gather_facts:
no | 禁止 |
---|---|
Ansible | 收集 |
facts | 信息 |