Ansible简介Ansible基于Python开发,集合了众多运维工具puppet、cfengine、chef、func、fabric的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。Ansible工作原理在ANSIBLE管理体系中存在管理节点和被管理节点两种角色。被管理节点通常被称为资产.在管理节点上Ansible将AdHoc或PlayBook转换为Python脚本,并通过SSH将这些Python脚本传递到被管理服务器上。在被管理服务器上依次执行并实时的将结果返回给管理节点Ansible安装三台新虚拟机两台rocky9一台centos7解析防火墙关闭配置EPEL网络yum源安装ansibleAnsible配置文件主配置文件rocky系统可以直接复制粘贴centos系统中有以下语句去掉注释即可Inventory主机清单配置文件分组加入查看主机信息Ansible Ad-hoc[rootansible ~]# ansible pattern -m module_name -a arguments参数详解pattern: inventory文件里定义的主机组名,主机名,IP,别名等,all表示所有的主机,支持通配符,正则: -冒号,多个组,组名之间用冒号隔开web-组名或主机名中含web的webservers[0] - webservers组中的第一台主机, -1表示最后一台主机,支持切片(正):[1:2]表示组中的第二台和第三台all所有-m module_name:模块名称,默认为command-a arguments:传递给模块的参数-i file_name:指定inventory文件,默认为/etc/ansible/hosts-k :询问密码.如果没有传密钥到被管理端,必须要接此选项Ansible Modules主机连通性首先使用ssh联通一下其他两台主机主机连通性测试成功可以做一个ssh免密之后不用添加-k参数重复输入密码command模块这个模块可以直接在远程主机上执行shell命令并将结果返回本主机[rootserver ~]# ansible web -m command -a ss -ntl该模块下常用的几个命令chdir#在执行命令之前先切换到该目录executable#切换shell来执行命令需要使用命令的绝对路径free_form#要执行的Linux指令一般使用Ansible的-a参数代替。creates#一个文件名当这个文件存在则该命令不执行,可以用来做判断removes#一个文件名这个文件不存在则该命令不执行shell模块shell模块可以在远程主机上调用shell解释器运行命令支持shell的各种功能[rootserver ~]# ansible web -m shell -a cat /etc/passwd |grep keercopy模块这个模块用于将文件复制到远程主机同时支持给定内容生成文件和修改权限等其相关选项如下src#被复制到远程主机的本地文件。可以是绝对路径也可以是相对路径。如果路径是一个目录则会递 归复制用法类似于rsynccontent#用于替换src可以直接指定文件的内容dest#必选项将源文件复制到的远程主机的**绝对路径**backup#当文件内容发生改变后在覆盖之前把源文件备份备份文件包含时间信息directory_mode#递归设定目录的权限默认为系统默认权限force#当目标主机包含该文件但内容不同时设为yes表示强制覆盖设为no表示目标主机的目标位置不存在该文件才复制。默认为yesothers#所有的file模块中的选项可以在这里使用复制文件ansible web -m copy -a src~/hello dest/data/hello给定内容生成文件并制定权限查看关于覆盖ansible web -m copy -a contentI am keerya\n backupyes dest/data/name mode666file模块该模块主要用于设置文件的属性比如创建文件、创建链接文件、删除文件等下面是一些常见的命令path#路径force#需要在两种情况下强制创建软链接一种是源文件不存在但之后会建立的情况下另一种是目标软链接已存 在需要先取消之前的软链然后创建新的软链有两个选项yes|nogroup#定义文件/目录的属组。后面可以加上mode定义文件/目录的权限owner#定义文件/目录的属主。后面必须跟上path定义文件/目录的路径recurse#递归设置文件的属性只对目录有效后面跟上src被链接的源文件路径只应用于statelink的情况dest#被链接到的路径只应用于statelink的情况state#状态有以下选项directory#如果目录不存在就创建目录默认会递归创建file#即使文件不存在也不会被创建link#创建软链接hard#创建硬链接touch#如果文件不存在则会创建一个新文件如果文件或目录已存在,则更新其最后修改时间absent#删除目录、文件或者取消链接文件创建目录创建链接文件ansible web -m file -a path/data/bbb.jpg srcaaa.jpg statelinkpath链接文件src源文件删除文件fetch模块该模块用于从远程某主机获取复制文件到本地dest#用来存放文件的目录src#在远程拉取的文件并且必须是一个file不能是目录例ansible web -m fetch -a src/data/hello dest/datacron模块该模块适用于管理cron计划任务day#日应该运行的工作( 1-31, *, */2, )hour#小时( 0-23, *, */2, )minute#分钟( 0-59, *, */2, )month#月( 1-12, * , */2, )weekday#周( 0-6 for Sunday-Saturday,, )job#指明运行的命令是什么name#定时任务描述reboot#任务在重启时运行不建议使用建议使用special_timespecial_time#特殊的时间范围参数reboot重启时annually每年monthly每月weekly每周daily每天hourly每小时state#指定状态present表示添加定时任务也是默认设置absent表示删除定时任务user#以哪个用户的身份执行添加任务查看yum模块该模块主要用于软件的安装name#所安装的包的名称state#present---安装latest---安装最新的, absent---卸载软件。update_cache#强制更新yum的缓存conf_file#指定远程yum安装时所依赖的配置文件安装本地已有的包。disable_pgp_check#是否禁止GPG checking只用于presentor latest。disablerepo#临时禁止使用yum库。 只用于安装或更新时。enablerepo#临时使用的yum库。只用于安装或更新时。service模块该模块用于服务程序的管理arguments#命令行提供额外的参数enabled#设置开机启动。yes/true开机自启 no/flase开机关闭name#服务名称runlevel#开机启动的级别一般不用指定。sleep#在重启服务的过程中是否等待。如在服务关闭以后等待2秒再启动。(定义在剧本中。)state#有四种状态分别为#started---启动服务#stopped---停止服务#restarted---重启服务#reloaded---重载配置开启服务并设置自启动以nginx为例ansible web -m service -a namenginx statestarted enabledtrue执行后可以查看端口来验证是否真的启动ansible web -m shell -a ss -ntl关闭服务ansible web -m service -a namenginx statestoppeduser模块该模块主要是用来管理用户账号comment#用户的描述信息createhome#是否创建家目录force#在使用stateabsent时,行为与userdel –force一致.group#指定基本组groups#指定附加组如果指定为(groups)表示删除所有组home#指定用户家目录move_home#如果设置为home时,试图将用户主目录移动到指定的目录name#指定用户名non_unique#该选项允许改变非唯一的用户ID值password#指定用户密码remove#在使用stateabsent时,行为是与userdel –remove一致; removeyes //删除干净shell#指定默认shellsystem#当创建一个用户设置这个用户是系统用户。这个设置不能更改现有用户uid#指定用户的uid添加一个用户并指定其uid查看删除用户group模块该模块主要用于添加或删除组gid#设置组的GID号name#指定组的名称state#指定组的状态默认为创建设置值为absent为删除system#设置值为yes表示创建为系统组创建组查看删除组script模块该模块用于将本机的脚本在被管理端的机器上运行该模块直接指定脚本的路径即可编写脚本给予权限运行脚本查看文件内容setup模块该模块主要用于收集信息是通过调用facts组件来实现facts组件是Ansible用于采集被管机器设备信息的一个功能我们可以使用setup模块查机器的所有facts信息可以使用filter来查看指定信 息。整个facts信息被包装在一个JSON格式的数据结构中ansible_facts是最上层的值facts就是变量内建变量 每个主机的各种信息cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信 息在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装而debian系列用apt来安装软件查看信息查看内存保存信息setup模块还可以保存筛选的信息主机同时文件名为被管制的主机的IP这样方便寻找出问题的机器查看注一直出现的提示是 Ansible 的 Python 解释器自动发现提示属于警告WARNING而非错误可以在配置文件中写入路径以解决最后一行