Ansible是一款自动化运维、批量管理服务器的工具,批量系统配置、程序部署、运行命令等功能。基于Python开发,基于ssh进行管理,不需要在被管理端安装任何软件。Ansible在管理远程主机的时候,只有是通过各种模块进行操作的。


需要关闭防火墙和SELinux,设置为disabled模式,然后重启服务器




ansible发音 ansible -t_创建文件



ansible发音 ansible -t_Ansible_02


配置host让各个电脑能够通过域名访问



ansible发音 ansible -t_文件路径_03



ansible发音 ansible -t_创建文件_04


设置免密登录ssh-keygen,能够让control主机通过Ansible管理其他主机



ansible发音 ansible -t_ansible发音_05



ansible发音 ansible -t_文件路径_06


查看登录情况



ansible发音 ansible -t_ansible_07


安装Ansible



ansible发音 ansible -t_ansible_08


配置Ansible管理环境,创建Ansible目录在该目录进行对其他主机的配置。



ansible发音 ansible -t_创建文件_09


参考/etc/ansible/ansible.cfg模板编辑ansible.cfg(文件名必须是ansible.cfg)



ansible发音 ansible -t_Ansible_10



ansible发音 ansible -t_Ansible_11


inventory=hosts:主机清单,需要管理的主机,配置在当前目录的hosts文件中,文件名自定义、



ansible发音 ansible -t_ansible发音_12


编辑主机清单文件[ ]中为组名,[ ]下面为组的成员。Node[3:4]简化,表示从3到4。ctrl+n表示补全内容。可以嵌套组cluster表示大组,webservers和database表示小组



ansible发音 ansible -t_Ansible_13



ansible发音 ansible -t_ansible发音_14


命令格式:ansible 主机集合  -m  模块名  -a  " 参数 "。


查看主机:ansible all --host



ansible发音 ansible -t_Ansible_15


查看组的成员



ansible发音 ansible -t_创建文件_16


让所有的主机执行一条命令,如创建/tmp/abc目录(必须在~/ansible自己定义的里面有ansible.cfg文件ansible下面执行)



ansible发音 ansible -t_ansible_17


查看被管理的其他主机



ansible发音 ansible -t_Ansible_18



ansible发音 ansible -t_Ansible_19


ansible进行远程管理的两个方法:1、adhoc临时命令,就是在命令行上执行的管理命令如ansible all -a "mkdir /tmp/abc"。2、playbook剧本,把管理任务用特定格式写到文件中。无论那种方式都是通过模块加参数进行管理。


adhoc临时命令:ansible 主机或组列表  -m  模块(工具)  -a  "参数 "(-a是可选的)  


ping模块:检测所有远程主机能否ping通(因为ping主机传递的回应时间不一样所以主机的顺序有时候不一样)



ansible发音 ansible -t_ansible发音_20


ansible-doc  -l :查看所有的模块,大约有2834



ansible发音 ansible -t_创建文件_21



ansible发音 ansible -t_Ansible_22


command模块:ansible默认模块,用于在远程主机上执行任意命令,如ansible all -a "mkdir /tmp/abc" ,command不支持shell特性,如管道、重定向



ansible发音 ansible -t_创建文件_23


使用 shell模块能够使用管道符等基础命令



ansible发音 ansible -t_文件路径_24


script模块:用于在远程主机上执行脚本。如在test组执行开启http服务的脚本



ansible发音 ansible -t_文件路径_25



ansible发音 ansible -t_Ansible_26


此时Node1主机还没有安装http服务



ansible发音 ansible -t_文件路径_27


执行test组执行test.sh脚本



ansible发音 ansible -t_Ansible_28


查看http服务



ansible发音 ansible -t_Ansible_29


不建议使用command、shell和script模块,因为当执行脚本和创建文件第一次能够执行成功,但第二次有可能失败因为文件已经创建了,没有幂等性。



ansible发音 ansible -t_ansible发音_30


file模块:可以创建文件、目录、链接等,还可以修改权限、属性等。


常用的选项:path:指定文件路径。owner:设置文件所有者。group:设置文件所属组。mode:修改文件权限。state:状态,touch表示创建文件,directory表示创建目录,link表示创建软连接,absent表示删除。src:source的简写,原地址。dest:destination的简写,目标地址


使用file模块创建文件,执行几次都不会报错,绿色表示没有改动



ansible发音 ansible -t_Ansible_31


ansible-doc  file:查看模块的功能。搜索EXAMPLE查看file模块的案例



ansible发音 ansible -t_ansible_32



ansible发音 ansible -t_文件路径_33


在test主机上创建1.txt文件,黄色表示改动成功



ansible发音 ansible -t_创建文件_34



ansible发音 ansible -t_文件路径_35


当在执行一次还是黄色,当使用touch创建文件不存在会创建文件,存在会修改文件的时间



ansible发音 ansible -t_创建文件_36


ansible有期望模式,当目标主机有要执行的文件就会显示绿色,没有就会创建文件以满足期望为黄色。ansible test -m file -a "path=/tmp/1.txt owner=sshd group=amd mode=0777"



ansible发音 ansible -t_创建文件_37


此时查看修改成功。



ansible发音 ansible -t_创建文件_38


删除文件absent。ansible test -m file -a "path=/tmp/1.txt state=absent"



ansible发音 ansible -t_文件路径_39


创建软连接link。 ansible test -m file -a "src=/etc/hosts dest=/tmp/hosts.txt state=link"



ansible发音 ansible -t_文件路径_40



ansible发音 ansible -t_文件路径_41


copy模块:用于将文件从控制端拷贝(上传)到被控端。


常用选项:src:源地址,控制端的文件路径。dest:目标地址,被控制端的文件路径。content:内容,需要写到文件中的内容。owner:设置文件所有者。group:设置文件所属组。mode:修改文件权限。


将文件拷贝到test主机中。 ansible test -m copy -a "src=a.txt dest=/root"



ansible发音 ansible -t_Ansible_42



ansible发音 ansible -t_ansible_43


可以上传目录但必须是非空目录才能上传,否则传递不了



ansible发音 ansible -t_ansible发音_44


当被控主机的SELinux不是disabled需要安装Python3-libselinux软件包


让被控主机自己创建文件并指定内容为什么。


 ansible test -m copy -a "dest=/tmp/test.txt content='hello world\n'"



ansible发音 ansible -t_ansible_45



ansible发音 ansible -t_ansible发音_46


fetch模块:下载。src:源地址,被控制端的文件路径。dest:目标地址,控制到的文件路径。下载的必须是文件,不能下载目录。


将目标主机的文件下载到本地用户的家目录下面。 ansible webservers -m fetch -a "src=/etc/hostname dest=~/"



ansible发音 ansible -t_ansible发音_47



ansible发音 ansible -t_文件路径_48


lineinfile模块:用于确保目标文件中有某一行内容。


常用选项:path:待修改的文件路径。line:写入文件的一行内容。regexp:正则表达式,用于查找文件中的内容。


test的主机的/etc/issue文件中一定要有一行“hello world"的字符串,如果没有默认添加到文件结尾



ansible发音 ansible -t_创建文件_49



ansible发音 ansible -t_创建文件_50


当再次输入该命令后文件中的helloworld也只有一行



ansible发音 ansible -t_文件路径_51



ansible发音 ansible -t_ansible发音_52


让/etc/issue文件中有hello字符串的一行替换成“123456”,如果没有找到“hello”的字符串行就会在文件的末尾添加“123456”



ansible发音 ansible -t_Ansible_53



ansible发音 ansible -t_ansible发音_54


再次输入该命令就会在我就的末尾添加123456



ansible发音 ansible -t_ansible_55


replace模块:lineinfile会替换一行,replace可以替换关键字。


常用选项:path:待修改的文件路径。replace:将正则表达式查到的内容,替换成replace的内容。regexp:正则表达式,用于查找文件中的内容。


将/etc/issue文件中的123替换为abc



ansible发音 ansible -t_ansible_56



ansible发音 ansible -t_ansible_57


练习:


在目标主机上创建/tmp/my目录,属主和属组都是adm,权限为0777


 ansible test -m file -a "path=/tmp/my state=directory owner=adm group=adm mode='0777'"



ansible发音 ansible -t_Ansible_58



ansible发音 ansible -t_文件路径_59


将控制端的/etc/hosts文件上传到目标主机的/tmp/my目录中,属主和属组都是adm,权限为0600


ansible test -m copy -a "src=/etc/hosts dest=/tmp/my owner=adm group=adm mode=0600"



ansible发音 ansible -t_文件路径_60



ansible发音 ansible -t_创建文件_61


替换目标主机/tmp/my/host文件中的Node4为server4


ansible test -m replace -a "path=/tmp/my/hosts regexp='Node4' replace='server4'"



ansible发音 ansible -t_创建文件_62



ansible发音 ansible -t_ansible发音_63


将目标主机/tmp/my/hosts文件下载到控制端的当前目录


ansible test -m fetch -a "src=/tmp/my/hosts dest=."



ansible发音 ansible -t_Ansible_64



ansible发音 ansible -t_ansible_65



ansible发音 ansible -t_ansible发音_66


user模块:实现Linux用户管理。


常用选项:name:待创建的用户名。uid:用户ID。group:设置主组,groups:设置附加组。home:设置家目录。password:设置用户密码。state:状态,present表示创建,它是默认选项,absent表示删除。remove:删除用户家目录、邮箱等,值为yes或true都可以。


创建用户lisi



ansible发音 ansible -t_Ansible_67



ansible发音 ansible -t_Ansible_68


创建用户wangwu,UID为1111,属组为adm,附加组为root,家目录为/home/wangwu(默认可以不写)。


 ansible test -m user -a "name=wangwu uid=1111 group=adm groups=root home=/home/wangwu"



ansible发音 ansible -t_Ansible_69



ansible发音 ansible -t_文件路径_70


添加lisi用户密码。此时设置的密码没有生效



ansible发音 ansible -t_ansible发音_71



ansible发音 ansible -t_ansible发音_72


需要设置加密密码,将123456给sha512算法进行加密。


ansible test -m user -a "name=lisi password={{'123456'|password_hash('sha512')}}"



ansible发音 ansible -t_文件路径_73


此时设置的密码才会生效



ansible发音 ansible -t_创建文件_74


删除lisi用户,添加remove=yes才能把用户的家目录给删除否则该用户的家目录还在。



ansible发音 ansible -t_ansible_75


此时用户的家目录还在



ansible发音 ansible -t_Ansible_76


删除wangwu用户使用remove



ansible发音 ansible -t_ansible发音_77


此时用户的家目录就被删除了



ansible发音 ansible -t_Ansible_78


group模块:创建、删除组。


常用选项:name:待创建的组名。gid:组的ID号。state:present表示创建,它是默认选项,absent表示删除。


创建组。ansible test -m group -a "name=devops"



ansible发音 ansible -t_Ansible_79



删除组。ansible test -m group -a "name=devops state=absent"



ansible发音 ansible -t_创建文件_80



yum_repository模块:用于配置yum。


常用选项:file:指定文件名。name:yum标签。description:yum的描述信息。baseurl:yum的位置。enabled:仓库是否启用,填yes或no。gpgcheck:是否检测红帽填yes或no。


对test主机添加yum。


ansible test -m yum_repository -a "file=myrhel8 name=Appstream description=appstream baseurl=ftp://192.168.88.240/rhel/AppStream/ enabled=yes gpgcheck=no"



ansible发音 ansible -t_ansible发音_81



ansible发音 ansible -t_ansible_82



ansible发音 ansible -t_创建文件_83


添加BaseOS。


ansible test -m yum_repository -a "file=myrhel8 name=BaseOS description=baseos baseurl=ftp://192.168.88.240/rhel/BaseOS/ enabled=yes gpgcheck=no"



ansible发音 ansible -t_创建文件_84



ansible发音 ansible -t_ansible_85


yum模块:用于RPM软件包管理,如安装、升级、卸载。


常用选项:name:包名。state:状态,present表示安装,如已安装则忽略(默认选项)。latest:表示安装或升级到最新版本,absent表示卸载,


安装wget软件包。



ansible发音 ansible -t_Ansible_86


卸载



ansible发音 ansible -t_文件路径_87


安装http。并且为最新版本。绿色表示已经安装并且为最新版本



ansible发音 ansible -t_文件路径_88


service模块:管理服务的开启、关闭


常用选项:name:控制的服务名。state:started:开启服务,stopped表示关闭,restarted表示重新开启。enabled:是否开机自启动,填yes或no。


开启httpd服务,设置开机自启动



ansible发音 ansible -t_Ansible_89


查看httpd服务的状态



ansible发音 ansible -t_文件路径_90