10.Python之Ansible自动化运维常用模块
Ansible中文权威文档:http://www.ansible.com.cn/docs/
Ansible从入门到精通:https://www.bilibili.com/video/av33611758/?p=1
Ansible工作原理:
1.管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接
2.可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc;
3.管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。
Ansible配置文件:
Ansible免密登陆:
ansible使用ssh登录,所以要在两者之间配置秘钥登录,这样才能开始正常的工作
实现了master与其他节点之间的连接
介绍一下Ansible命令:
-
功能:通过ssh实现配置管理、应用部署、任务执行等功能
-
建议:配置ansible端能基于密钥认证的方式联系各被管理节点
-
格式:ansible <host-pattern> [-m module_name] [-a args]
- 常用选项:
这里主要讲一下<host-pattern>的匹配规则:
Ansible执行命令过程:
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户
- $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
- 给文件+x执行
- 执行并返回结果
- 删除临时py文件,sleep 0退出
Ansible命令工具:
- ansible主程序,临时命令执行工具
- ansible-doc 查看配置文档,模块功能查看工具
- ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
- ansible-playbook 定制自动化任务,编排剧本工具
- ansible-pull 远程执行命令的工具
- ansible-vault 文件加密工具
- ansible-console 基于Console界面与用户交互的执行工具
Ansible常用模块:
ansible 默认提供了很多模块来供我们使用。在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块,通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。
这里主要介绍Ansible常用模块:
1.ping模块
检查指定节点机器是否还能连通,用法很简单,不涉及参数,主机如果在线,则回复pong
<host-pattern>匹配规则参考上面
2.yum 安装包模块
参数详解:
- config_file:yum的配置文件 (optional)
- disable_gpg_check:关闭gpg_check (optional)
- disablerepo:不启用某个源 (optional)
- enablerepo:启用某个源(optional)
- name:要进行操作的软件包的名字,默认最新的程序包,指明要安装的程序包,可以带上版本号,也可以传递一个url或者一个本地的rpm包的路径
- state:状态(present,absent,latest),表示是安装还卸载
present:默认的,表示为安装
lastest: 安装为最新的版本
absent:表示删除
3.copy 复制文件模块
参数详解:
- update_cache: 更新缓存
- name: 要创建的文件名字
- state: 状态(present,absent,latest),表示是安装还卸载
present:默认的,表示为安装
lastest: 安装为最新的版本
absent:表示删除
- mode: 目标文件的权限模式,模式可以被指定为符号模式(例如,u + rwx 或 u = rw,g = r,o = r)
- backup: 如果原目标文件存在,则先备份目标文件
- force: 是否强制覆盖,默认为yes
- owner: 目标文件属主
- group: 目标文件属组
4.file 文件操作模块
参数详解:
- force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
- group:定义文件/目录的属组
- mode:定义文件/目录的权限
- owner:定义文件/目录的属主
- path:必选项,定义文件/目录的路径
- recurse:递归的设置文件的属性,只对目录有效
- src:要被链接的源文件的路径,只应用于state=link的情况
- dest:被链接到的路径,只应用于state=link的情况
- state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
5.service 管理服务模块
参数详解:
- arguments:给命令行提供一些选项
- enabled:是否开机启动 yes|no, 要求状态(state)和启用(enabled)中至少有一个。
- name:必选项,服务名称
- runlevel:运行级别
- sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
- state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
6.user 管理用户模块
参数详解:
- home:指定用户的家目录,需要与createhome配合使用。
- groups:指定用户的属组。
- uid:指定用的uid。
- password:指定用户的密码。
注意:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
- name:指定用户名。
- createhome:是否创建家目录 yes|no。
- system:是否为系统用户。
- remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。
- state:是创建还是删除。(present,absent)
- shell:指定用户的shell环境。
- generate_ssh_key:是否为相关用户生成SSH密钥。 这不会覆盖现有的SSH密钥。
- ssh_key_bits:可选择指定要创建的SSH密钥中的位数。
- ssh_key_passphrase:设置SSH密钥的密码。 如果没有提供密码,SSH密钥将默认没有密码。
- ssh_key_file:指定SSH密钥文件名(可选)。 如果这是一个相对的文件名,那么它将是相对于用户的主目录。
- ssh_key_type:指定要生成的SSH密钥的类型(可选)。 可用的SSH密钥类型将取决于目标主机上的实现。
7.group管理组模块
参数详解:
- gid:指定用的gid。
- name:指定用户名。
- state:是创建还是删除。(present,absent)
- system:如果是,则表示创建的组是系统组。
8.cron 计划任务模块
支持时间:minute,hour,day,month,weekday
9.template模块
基于模板方式生成一个文件复制到远程主机(template使用Jinjia2格式作为文件模版,进行文档内变量的替换的模块。它的每次使用都会被ansible标记为”changed”状态。)
参数详解:
- backup: 如果原目标文件存在,则先备份目标文件
- src:在ansible控制器上的Jinja2格式化模板的路径。 这可以是相对或绝对的路径。
- dest:将模板渲染到远程机器上的位置。
- force:是否强制覆盖,默认为yes
- owner:目标文件属主
- group:目标文件属组
- mode:目标文件的权限模式,模式可以被指定为符号模式(例如,u + rwx或u = rw,g = r,o = r)。
10.setup模块
收集指定服务器的信息,每个被管理节点在接收并运行管理命令之前,会将自己主机相关信息,如操作系统版本、IP地址等报告给远程的ansbile主机。在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下:
这里给出filter常用可选项:
ansible_all_ipv4_addresses:仅显示ipv4的信息
ansible_devices:仅显示磁盘设备信息
ansible_distribution:显示是什么系统,例:centos,suse等
ansible_distribution_major_version:显示是系统主版本
ansible_distribution_version:仅显示系统版本
ansible_machine:显示系统类型,例:32位,还是64位
ansible_eth0:仅显示eth0的信息
ansible_hostname:仅显示主机名
ansible_kernel:仅显示内核版本
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示可用系统内存
ansible_memory_mb:详细显示内存情况
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_mounts:显示系统磁盘挂载情况
ansible_processor:显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus:显示cpu个数(只显示总的个数)
ansible_python_version:显示python版本
11.fetch 从客户端取文件至服务器端
常用参数:
- src:远程系统上要获取的文件。 这必须是一个文件,而不是一个目录。 后续版本可能会支持递归提取。
-dest:保存文件的目录。 例如,如果dest目录是/backup,在主机host.example.com上命名为/ etc/profile的src文件将被保存到/backup/host.example.com/etc/profile。
- flat:允许您覆盖将目标文件添加到主机名/ path / to / file的默认行为。
12.apt安装包模块
参数详解:
- deb: 用于安装远程机器上的.deb后缀的软件包(optional)
- install_recommends:这个参数可以控制远程电脑上是否只是下载软件包,还是下载后安装,默认参数为true,设置为false的时候只下载软件包,不安装
- update_cache: 当这个参数为yes的时候等于apt-get update(optional)
- name: apt要下载的软件包名字,支持name=git=1.6 这种制定版本的模式
- state:状态(present,absent,latest),表示是安装还卸载
present:默认的,表示为安装
lastest: 安装为最新的版本
absent:表示删除
13.command模块
command 模块可以帮助我们在远程主机上执行命令,默认模块,可忽略-m选项
注意:
- 使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell 处理。
- 在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如 "<" , ">", "|", ";" 和 "&"这些符号,如果你需要这些功能,可以参考后面介绍的 shell 模块。
- 如果远程节点是 windows 操作系统,则需要使用 win_command 模块
14.shell模块,和command相似,用shell执行命令
shell 模块可以帮助我们在远程主机上执行命令。与 command 模块不同的是,shell 模块在远程主机中执行命令时,会经过远程主机上的 /bin/sh 处理。
使用 shell 模块可以在远程服务器上执行命令,它支持管道与重定向等符号
15.script模块
script 模块可以帮助我们在远程主机上执行 ansible 管理主机上的脚本,也就是说,脚本一直存在于 ansible 管理主机本地,不需要手动拷贝到远程主机后再执行。
------------------------------------------
一些简单的playbook:
1.安装apache服务
运行命令:
2.安装nginx服务
3.根据操作系统判断