尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ansible Roles

Ansible Roles 目录一、角色的编写二、集合控制防火墙三、操作系统角色3.1 时间同步角色剧本3.2 selinux角色剧本四、角色的重用五、GITEE上传角色一、角色的编写Role是ansible的代码复用框架把部署业务的tasks、变量、模板、触发器拆分到固定目录结构一套role可以给多台主机调用不用重复写大量playbook便于维护、分享、排错。创建roles[nyfserver1 ansible]$ mkdir rolesroles_path告诉ansible去当前目录下roles文件夹寻找角色如果不配置ansible只会去系统默认路径找角色本地自定义role会找不到报红[nyfserver1 ansible]$ vim ansible.cfg自动生成role全套标准目录生成apache角色目录骨架[nyfserver1 ansible]$ cd roles/[nyfserver1 roles]$ ansible-galaxy role init apache[nyfserver1 ansible]$ sudo yum install -y tree编写tasks/main.yml核心执行任务[nyfserver1 apache]$ cd tasks[nyfserver1 tasks]$ vim main.yml编写handlers/main.yml触发器[nyfserver1 apache]$ cd handlers/[nyfserver1 handlers]$ ls[nyfserver1 handlers]$ vim main.yml编写vars/main.yml角色内部变量[nyfserver1 apache]$ cd vars/[nyfserver1 vars]$ vim main.yml准备jinja2模板文件[nyfserver1 apache]$ cd templates/[nyfserver1 templates]$ cp ../../../httpd.conf.j2 .[nyfserver1 templates]$ lshttpd.conf.j2编写顶层playbook调用apache角色[nyfserver1 ansible]$ vim apache_role.yml防止变量文件的影响[nyfserver1 ansible]$ mv group_vars/ host_vars/ /tmp/检查语法没错再执行[nyfserver1 ansible]$ ansible-playbook --syntax-check apache_role.yml二、集合控制防火墙Rocky9/CentOS8之后防火墙模块不再是ansible内置模块需要安装ansible.posix集合集合相当于一堆扩展模块的软件包里面包含firewalld、mount等常用模块。先安装集合板块[nyfserver1 ansible]$ ansible-galaxy collection install ansible.posix打开防火墙[nyfserver1 ansible]$ vim apache_role.yml三、操作系统角色rhel‑system‑roles是红帽官方提供的现成系统Role集合不用自己手写tasks直接修改变量就可以完成时间同步、网络配置、防火墙、selinux等系统初始化操作。角色安装之后存放在系统目录/usr/share/ansible/roles。首先安装系统角色nyfserver1 ansible]$ sudo yum install -y rhel-system-roles.noarch[nyfserver1 ansible]$ cd /usr/share/doc/[nyfserver1 doc]$ cd rhel-system-roles/[nyfserver1 rhel-system-roles]$ cd timesync/[nyfserver1 timesync]$ cp example-single-pool-playbook.yml ~/ansible/3.1 时间同步角色剧本重命名剧本编辑内容[nyfserver1 ansible]$ mv example-single-pool-playbook.yml timesync.yml[nyfserver1 ansible]$ vim timesync.yml使用阿里云公共NTP时间源内网环境可以替换为内部时间服务器调用系统自带的timesync角色不需要自己写tasks任务角色内部已经封装好安装chrony、修改配置、启动服务全套逻辑。添加系统角色搜索路径[nyfserver1 ansible]$ vim ansible.cfg语法检查执行时间同步剧本[nyfserver1 ansible]$ ansible-playbook timesync.yml由剧本生成3.2 selinux角色剧本[nyfserver1 rhel-system-roles]$ cd selinux/[nyfserver1 selinux]$ cp example-selinux-playbook.yml ~/ansible/[nyfserver1 ansible]$ mv example-selinux-playbook.yml selinux.yml[nyfserver1 ansible]$ vim selinux.yml此时server3的selinux已经打开而且路径也正确由于打开了selinux因此需要改变httpd的端口80为82否则apache起不来修改apache_role.yml文件会报错此时编辑selinux.yml文件将端口打开换绑http_port_t然后执行成功启动成功一定要记得把之前的角色文件中的变量修改不要冲突否则调用的依旧是原来的变量端口不会改变此时server3的监听接口改为82apache服务正常启动了防火墙规则也有了四、角色的重用添加路径下载时不稳定所以建议多试几次[nyfserver1 .ansible]$ ansible-galaxy role install geerlingguy.nginx[nyfserver1 ansible]$ vim nginx_role.yml[nyfserver1 ansible]$ ansible-playbook nginx_role.yml部署成功五、GITEE上传角色首先在gitee注册一个账号并创建一个仓库使用的是ssh需要上传公用密钥[nyfserver1 .ssh]$ cat id_rsa.pub公钥上传位置定义全局[nyfserver1 ansible]$ git config --global user.name 源呼呼[nyfserver1 ansible]$ git config --global user.email 17456312yuan-huhuuser.noreply.gitee.com初始化[nyfserver1 apache]$ git init[nyfserver1 apache]$ git add .[nyfserver1 apache]$ git commit -m apache-roles-apache上传角色到gitee[nyfserver1 apache]$ git remote add origin gitgitee.com:yuan-huhu/ansible-roles-build.git[nyfserver1 apache]$ git push -u origin master上传成功验证是否能从仓库拉取并使用[nyfserver1 ansible]$ ansible-galaxy role remove apache找到能拉取的路径编写requirements.yml将刚才的路径填写到下方文件中[nyfserver1 roles]$ vim requirements.ymlversion也在gitee页面寻找执行文件角色已经又下载好了[nyfserver1 ansible]$ ansible-galaxy role install -r roles/requirements.yml -p roles/
返回列表