Ansible是一款自动化运维、批量管理服务器的工具,批量系统配置、程序部署、运行命令等功能。基于Python开发,基于ssh进行管理,不需要在被管理端安装任何软件。Ansible在管理远程主机的时候,只有是通过各种模块进行操作的。
需要关闭防火墙和SELinux,设置为disabled模式,然后重启服务器
配置host让各个电脑能够通过域名访问
设置免密登录ssh-keygen,能够让control主机通过Ansible管理其他主机
查看登录情况
安装Ansible
配置Ansible管理环境,创建Ansible目录在该目录进行对其他主机的配置。
参考/etc/ansible/ansible.cfg模板编辑ansible.cfg(文件名必须是ansible.cfg)
inventory=hosts:主机清单,需要管理的主机,配置在当前目录的hosts文件中,文件名自定义、
编辑主机清单文件[ ]中为组名,[ ]下面为组的成员。Node[3:4]简化,表示从3到4。ctrl+n表示补全内容。可以嵌套组cluster表示大组,webservers和database表示小组
命令格式:ansible 主机集合 -m 模块名 -a " 参数 "。
查看主机:ansible all --host
查看组的成员
让所有的主机执行一条命令,如创建/tmp/abc目录(必须在~/ansible自己定义的里面有ansible.cfg文件ansible下面执行)
查看被管理的其他主机
ansible进行远程管理的两个方法:1、adhoc临时命令,就是在命令行上执行的管理命令如ansible all -a "mkdir /tmp/abc"。2、playbook剧本,把管理任务用特定格式写到文件中。无论那种方式都是通过模块加参数进行管理。
adhoc临时命令:ansible 主机或组列表 -m 模块(工具) -a "参数 "(-a是可选的)
ping模块:检测所有远程主机能否ping通(因为ping主机传递的回应时间不一样所以主机的顺序有时候不一样)
ansible-doc -l :查看所有的模块,大约有2834
command模块:ansible默认模块,用于在远程主机上执行任意命令,如ansible all -a "mkdir /tmp/abc" ,command不支持shell特性,如管道、重定向
使用 shell模块能够使用管道符等基础命令
script模块:用于在远程主机上执行脚本。如在test组执行开启http服务的脚本
此时Node1主机还没有安装http服务
执行test组执行test.sh脚本
查看http服务
不建议使用command、shell和script模块,因为当执行脚本和创建文件第一次能够执行成功,但第二次有可能失败因为文件已经创建了,没有幂等性。
file模块:可以创建文件、目录、链接等,还可以修改权限、属性等。
常用的选项:path:指定文件路径。owner:设置文件所有者。group:设置文件所属组。mode:修改文件权限。state:状态,touch表示创建文件,directory表示创建目录,link表示创建软连接,absent表示删除。src:source的简写,原地址。dest:destination的简写,目标地址
使用file模块创建文件,执行几次都不会报错,绿色表示没有改动
ansible-doc file:查看模块的功能。搜索EXAMPLE查看file模块的案例
在test主机上创建1.txt文件,黄色表示改动成功
当在执行一次还是黄色,当使用touch创建文件不存在会创建文件,存在会修改文件的时间
ansible有期望模式,当目标主机有要执行的文件就会显示绿色,没有就会创建文件以满足期望为黄色。ansible test -m file -a "path=/tmp/1.txt owner=sshd group=amd mode=0777"
此时查看修改成功。
删除文件absent。ansible test -m file -a "path=/tmp/1.txt state=absent"
创建软连接link。 ansible test -m file -a "src=/etc/hosts dest=/tmp/hosts.txt state=link"
copy模块:用于将文件从控制端拷贝(上传)到被控端。
常用选项:src:源地址,控制端的文件路径。dest:目标地址,被控制端的文件路径。content:内容,需要写到文件中的内容。owner:设置文件所有者。group:设置文件所属组。mode:修改文件权限。
将文件拷贝到test主机中。 ansible test -m copy -a "src=a.txt dest=/root"
可以上传目录但必须是非空目录才能上传,否则传递不了
当被控主机的SELinux不是disabled需要安装Python3-libselinux软件包
让被控主机自己创建文件并指定内容为什么。
ansible test -m copy -a "dest=/tmp/test.txt content='hello world\n'"
fetch模块:下载。src:源地址,被控制端的文件路径。dest:目标地址,控制到的文件路径。下载的必须是文件,不能下载目录。
将目标主机的文件下载到本地用户的家目录下面。 ansible webservers -m fetch -a "src=/etc/hostname dest=~/"
lineinfile模块:用于确保目标文件中有某一行内容。
常用选项:path:待修改的文件路径。line:写入文件的一行内容。regexp:正则表达式,用于查找文件中的内容。
test的主机的/etc/issue文件中一定要有一行“hello world"的字符串,如果没有默认添加到文件结尾
当再次输入该命令后文件中的helloworld也只有一行
让/etc/issue文件中有hello字符串的一行替换成“123456”,如果没有找到“hello”的字符串行就会在文件的末尾添加“123456”
再次输入该命令就会在我就的末尾添加123456
replace模块:lineinfile会替换一行,replace可以替换关键字。
常用选项:path:待修改的文件路径。replace:将正则表达式查到的内容,替换成replace的内容。regexp:正则表达式,用于查找文件中的内容。
将/etc/issue文件中的123替换为abc
练习:
在目标主机上创建/tmp/my目录,属主和属组都是adm,权限为0777
ansible test -m file -a "path=/tmp/my state=directory owner=adm group=adm mode='0777'"
将控制端的/etc/hosts文件上传到目标主机的/tmp/my目录中,属主和属组都是adm,权限为0600
ansible test -m copy -a "src=/etc/hosts dest=/tmp/my owner=adm group=adm mode=0600"
替换目标主机/tmp/my/host文件中的Node4为server4
ansible test -m replace -a "path=/tmp/my/hosts regexp='Node4' replace='server4'"
将目标主机/tmp/my/hosts文件下载到控制端的当前目录
ansible test -m fetch -a "src=/tmp/my/hosts dest=."
user模块:实现Linux用户管理。
常用选项:name:待创建的用户名。uid:用户ID。group:设置主组,groups:设置附加组。home:设置家目录。password:设置用户密码。state:状态,present表示创建,它是默认选项,absent表示删除。remove:删除用户家目录、邮箱等,值为yes或true都可以。
创建用户lisi
创建用户wangwu,UID为1111,属组为adm,附加组为root,家目录为/home/wangwu(默认可以不写)。
ansible test -m user -a "name=wangwu uid=1111 group=adm groups=root home=/home/wangwu"
添加lisi用户密码。此时设置的密码没有生效
需要设置加密密码,将123456给sha512算法进行加密。
ansible test -m user -a "name=lisi password={{'123456'|password_hash('sha512')}}"
此时设置的密码才会生效
删除lisi用户,添加remove=yes才能把用户的家目录给删除否则该用户的家目录还在。
此时用户的家目录还在
删除wangwu用户使用remove
此时用户的家目录就被删除了
group模块:创建、删除组。
常用选项:name:待创建的组名。gid:组的ID号。state:present表示创建,它是默认选项,absent表示删除。
创建组。ansible test -m group -a "name=devops"
删除组。ansible test -m group -a "name=devops state=absent"
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"
添加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"
yum模块:用于RPM软件包管理,如安装、升级、卸载。
常用选项:name:包名。state:状态,present表示安装,如已安装则忽略(默认选项)。latest:表示安装或升级到最新版本,absent表示卸载,
安装wget软件包。
卸载
安装http。并且为最新版本。绿色表示已经安装并且为最新版本
service模块:管理服务的开启、关闭
常用选项:name:控制的服务名。state:started:开启服务,stopped表示关闭,restarted表示重新开启。enabled:是否开机自启动,填yes或no。
开启httpd服务,设置开机自启动
查看httpd服务的状态