1.安装并配置ansible
第一步先安装ansible所需软件
#安装ansible所需软件 [devops@workstation ~]$ sudo dnf install ansible ansible-navigator rhel-system-roles -y
第二步登录镜像仓库,在镜像仓库下载镜像容器来运行ansible
由于ansible-navigator 知ansible是在容器运行的,在配置之前先登录上镜像仓库
[devops@workstation ansible]$ podman login utility.lab.example.com #镜像仓库
[devops@workstation ansible]$ vim ansible-navigator.yml #设置ansible需要的镜像
---
ansible-navigator: ansible: config: path: ./ansible.cfg color: osc4: false execution-environment: image: utility.lab.example.com/ee-supported-rhel8:latest #这是一个镜像里的容器
#查看ansible是否可以运行正常 [devops@workstation ansible]$ ansible-navigator images #检查并从镜像库下载所需的镜像
第三步配置ansible配置文件
优先读取当前目录>家目录>系统
/home/devops/ansible/ > .ansible > /etc/ansible/ansible.cfg
###
[devops@workstation ansible]$ ansible-config init --disabled | less #查看ansible配置模板
[devops]workstation ansible]$ vim ansible.cfg
[defaults] #ansible基本信息
remote_user=devops #发起ssh的用户
inventory=/home/devops/ansible/inventory #指定工作清单
host_key_checking=False #不询问是否保存私钥,直接选择yes
#ask_pass=False #进行一次密码输入后后续就不用加-k参数
由于实验环境有问题,实验用户没有私钥
scp root@172.25.250.250:/root/.ssh/id_rsa ~/.ssh/id_rsa #把主机用户私钥拷贝给虚拟机
collections_path=/home/devops/ansible/mycollections #roles_path=roles:/home/devops/ansible/roles
[privilege_escalation] #ansible提权信息
become=True
become_ask_pass=False
become_method=sudo
become_user=root
编辑好配置ansible配置文件后还要生成清单才能运行
#生成工作清单
[devops@workstation ansible]$ vim inventory
[dev]
servera
[test]
serverb
[balancers]
serverb
[prod] #p意思为prod组有两个成员serverc与serverd
serverc
serverd
[webservers:children] #指定子组
prod
[devops@workstation ansible]$ ansible all --list-hosts #列出所有主机
#查看清单信息
[devops@workstation ansible]$ ansible-navigator inventory -m stdout --graph
。。。 省略 。。。
@all: |--@balancers:
| |--serverb
|--@dev:
| |--servera
|--@test:
| |--serverb
|--@ungrouped:
|--@webservers:
[devops@workstation ansible]$ ansible all -m shell -a "whoami" #自动化所有节点主机在shell运行命令,-k询问主机密码
2.创建yum仓库
在此之前建议编辑vim工作模式,便于去编写yml文件
ansible中有两种输出形式
ansible中ad-hoc形式
$ansible all -m shell -a "whoami"
ansible中playbook形式,也就是yml结尾的文件,等同于ansible中的脚本
$ansible-navigator run xxx.yml -m stdout #运行playbook并把显示到输出上
yml文件使用列表与字典表示,前面有-的表示是列表列表里包含字典,然后是子列表
一个playbook要包含描述,执行清单,动作
例子
---
- name:test play
host : all
tasks:
- name: rm file #动作名称
ansible.builtin.shell: #模块
rm -rf /mnt/file #模块参数
ansible-doc -l | grep shell
ansible-doc shell | less #查询用法
实验
#使用ansible-doc来搜索模板
$ ansible-doc -l | grep repo
$ ansible-doc ansible.builtin.yum_repository | less
测试
运行完成后可以使用ad-hoc形式来测试
[devops@workstation ansible]$ ansible all -m shell -a "dnf clean all"
[devops@workstation ansible]$ ansible all -m shell -a "dnf makecache"
[devops@workstation ansible]$ ansible all -m shell -a "dnf repolist"
3.安装collections
前提要在ansible配置文件指定collection路径
先从资源连接获取资源
wget http://materials.example.com/tools/community-general-4.3.0.tar.gz
然后使用galaxy命令安装colllection
[devops@workstation ansible]$ ansible-galaxy collection install ansible-posix1.4.0.tar.gz --force
最后查看collections
[devops@workstation ansible]$ ansible-galaxy collection list
4.安装软件包
实验
测试
5.使用系统自带角色
什么是角色?
剧本是把所有东西放在一个文件里,角色是把各自的元素拆分开放在各自的目录里
$ansible-galaxy init apache #创建角色
$ansible-galaxy list #列出角色
以下是创建角色后的子目录,可将剧本所以东西都放在角色的子目录中,最后在剧本playbook直接使用roles引用即可
上图为如何使用创建的角色,下面将介绍如何使用系统角色
如何使用系统角色?实验要求使用selinux角色
$ rpm -qa | grep role #由于selinux是系统自带的角色,所以查看系统自带的角色模板 rhel-system-roles-1.23.0-2.21.el9.noarch
$ rpm -qd rhel-system-roles-1.23.0-2.21.el9.noarch | grep selinux-playbook #查看角色模板的说明信息查找例子模板
$ less /usr/share/doc/rhel-system-roles/selinux/exampleselinux-playbook.yml #查看模板来使用角色
~]$ ansible-galaxy list | grep selinux #在家目录下列出系统的角色,按照要求放入playbook中的roles引入
-
rhel-system-roles.selinux, (unknown version) #前面加redhat.并要把杠换成下 划线
-
linux-system-roles.selinux, (unknown version)
最后按照模板来编写playbook
运行后测试
$ ansible-navigator run -m stdout selinux.yml
]$ ansible servera -m shell -a 'cat /etc/sysconfig/selinux'
6.使用 Ansible Galaxy 安装角色
第一步先在ansible的roles目录创建yml文件来编写要下载的角色资源地址并且要在ansible配置文件中指定roles的路径目录
第二步在指定yaml文件并下载到roles目录中
$ ansible-galaxy role install -r roles/requirements.yaml -p ./roles/
-r 参数,用户能够通过一个 YAML 格式的文件(通常命名为 requirements.yaml
),一次性批量安装多个角色。
-p 参数,指定角色的安装目录,要把角色安装在设置的配置文件指定的目录才能使用ansible-galaxy命令识别,注意ansible-galaxy要在ansible配置文件的目录使用才能识别的到,在家目录使用就是识别系统的ansible配置文件识别的就是系统的角色
运行安装后测试
7.创建和使用创建的角色
什么是事实变量?
ansible all -m setup | less #查看所有的事实变量,事实变量是主机中所有资源信息使用键值对的形式来表示的变量,引用事实变量子目录要用.隔开
ansible-playbook test.yml #运行playbook
什么是j2模板?
创建xxx.j2结尾的文件,能识别变量,里面使用{{}}引用键事实变量,然后再paybook中使用template参数,src表示j2文件的路径,dest表示生成的事实变量,输出的是事实变量的值
ansible-galaxy init apache #在roles目录下创建角色
ansible-galaxy --list-all #在ansible配置文件目录下列出创建的角色
[devops@workstation ansible]$ cd roles/apache/ [devops@workstation apache]$ ls defaults files handlers meta README.md tasks templates tests vars [devops@workstation apache]$ vim templates/index.html.j2 #编写j2文件
[devops@workstation ansible]$ cd roles/apache/tasks/ [devops@workstation tasks]$ vim main.yml #编写tasks执行的任务
实验要求:使用apache发布网页
tasks的任务:
要安装httpd,安装火墙
httpd服务要开机启动并立即运行,火墙要放行httpd
还要使用模板创建index.html文件
最后创建playbook文件并运行,使用curl来测试