RHCS认证-Linux(RHel9)-Ansible

文章目录

  • 一、ansible 简介
  • 二 、ansible部署
  • 三、ansible服务端测试
  • 四 、ansible 清单inventory
  • 五、Ad-hot 点对点模式
  • 六、YAML语言模式
  • 七、RHCS-Ansible
    • 附:安装CentOS-Stream 9系统
    • 7.1 ansible 执行过程
    • 7.2 安装ansible,ansible-navigator
    • 7.2 部署ansible
    • 7.3 ansible-navigator
    • 7.4 YAML
    • 7.5 管理变量和事实
    • 7.6 管理机密
    • 7.7 管理事实
    • 7.8 实施任务控制
      • 循环使用变量
      • 有条件的运行任务
      • 处理程序handlers
      • 错误处理
    • 7.9 管理复杂的playbook
      • 创建角色
  • 八.训练题
    • 1. 安装和配置 Ansible安装ansible
    • 2. 配置系统以使用默认存储库
    • 3. 安装软件包
    • 4. 配置collection
    • 5.使用 RHEL 系统角色
    • 6.使用 Ansible Galaxy 安装角色
    • 7. 创建和使用角色
    • 8.从 Ansible Galaxy 使用角色
    • 9.创建和使用分区
    • 10. 生成主机文件
    • 11. 修改文件内容
    • 12. 创建 Web 内容目录
    • 13. 生成硬件报告
    • 14. 创建密码库
    • 15. 创建用户帐户

一、ansible 简介

Ansible是一种基于Python开发的自动化运维工具,集成了多种运维工具的优点,主要用于批量系统配置、程序部署和运行命令等任务。它的核心在于提供一个简单易用且功能强大的框架,通过SSH协议与远程主机通信,无需在被管节点上安装客户端。

Ansible由红帽公司收购,并逐渐成为运维工程师必备的技能之一。该工具具有以下特点:

  1. 部署简单:只需在主控端部署Ansible环境,被控端无需做任何
  2. 操作。 默认使用SSH协议:对设备进行管理,保障通信安全。
    功能模块丰富:拥有大量常规运维操作模块,可实现日常绝大部分操作。
  3. 支持Playbooks:通过定义多个任务的YAML文件来定制配置和状态管理。
  4. 轻量级:无需在客户端安装agent,更新时只需在操作机上进行一次更新即可。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

Ansible命令的执行过程包括加载配置文件和模块文件、生成并传输临时Python文件、在远程服务器上执行命令、返回结果并删除临时文件。
以下是详细的步骤:

  1. 加载配置文件:Ansible首先会加载配置文件,通常为ansible.cfg,这个文件包含了Ansible运行的各种参数和设置。

  2. 加载模块文件:根据使用的具体模块(如command、shell等),加载相应的模块文件。这些模块定义了要在远程服务器上执行的具体操作。

  3. 生成传输临时Python文件:Ansible将模块或命令生成一个临时的Python(.py)文件,并通过SSH传输到远程服务器的$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件中。

  4. 执行命令:Ansible给临时文件添加执行权限,然后在远程服务器上执行这个临时文件,具体命令通过nohup方式在后台运行,确保即使SSH连接断开,命令也能继续执行。

  5. 返回结果:命令执行完成后,结果会被传回Ansible主控端,同时输出到终端或保存到指定文件中。

  6. 删除临时文件:为了安全性,执行完成后,临时Python文件会被删除

ansible 工作机制

在这里插入图片描述

二 、ansible部署

# 下载yum源
wget -O /etc/yum.repos.d/CentOS-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 安装epel-release源
yum install -y epel-release
# 搜索ansible
yum list |grep ansible
# 安装ansible
dnf install ansible
# 验证安装
rpm -ql ansible
rpm -qc ansible
#ansible所有模块
ansible-doc -l 
#yum模块
ansible-doc -s yum

三、ansible服务端测试

# 测试 Ansible 是否能成功连接到本地主机(localhost)
# -m ping 模块 主机是否在线
ansible localhost -m ping
.........
localhost | SUCCESS => {"changed": false,"ping": "pong"
}
.........
# 定义主机清单
vim /etc/ansible/hosts
.........43 ## db-[99:101]-node.example.com44 centos245 centos3
.........ssh-keygen
ssh-copy-id centos2
# 测试连通性
#可提前测试ssh
ansible centos2 -m ping
ansible centos3 -m ping
ansible centos5 -m ping

在这里插入图片描述

四 、ansible 清单inventory

#查找配置
ansible --version
.........
#ansible 2.9.27
#  config file = /etc/ansible/ansible.cfg
.........  
# 查找包
rpm -qf /etc/ansible/ansible.cfg
.........  
# ansible-2.9.27-1.el7.noarch
.........  
#查找配置
rpm -qc ansible-2.9.27-1.el7.noarch
.........  
#/etc/ansible/ansible.cfg
#/etc/ansible/hosts
.........  
# 具体配置
vim /etc/ansible/ansible.cfg
.........  #10 [defaults]#11#12 # some basic default values...#13#14 #inventory      = /etc/ansible/hosts
.........  
vim /etc/ansible/hosts
# 增加主机组
ansible webserver -m ping
.........44 [webserver]45 centos246 centos3.........
#增加账号密码
.........45 centos2  ansible_ssh_user="root" ansible_ssh_pass="redhat".........#增加端口#centos2 vim /etc/ssh/sshd_config 修改端口 port 2222.........45 centos2  ansible_ssh_user="root" ansible_ssh_pass="redhat" ansible_ssh_port="2222".........
# 组变量.........44 [webserver]45 centos246 centos34748 [webserver:vars]  # 注意是vars 且需换行49 ansible_ssh_user="root"50 ansible_ssh_pass="redhat"51 ansible_ssh_port="22".........# 子分组.........44 [webserver1]45 centos246 centos34748 [webserver2]49 centos55051 [webserver:children]52 webserver153 webserver25455 [webserver:vars]56 ansible_ssh_user="root"57 ansible_ssh_pass="redhat"58 ansible_ssh_port="22".........# 自定义主机清单,可以不使用/etc/ansible/hosts
ansible -i hosts webserver -m ping

五、Ad-hot 点对点模式

Ad-hot 点对点模式是Ansible一种便捷的任务执行方式,适用于临时性操作和快速命令执行

# 多少个模块
ansible-doc -l |wc -l
.......
7736#或89 安装的ansible-core 7736社区版
.......
# 使用copy模块
ansible-doc copy
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/copy.txt mode=777 backup=yes'
# 用户模块
ansible-doc user
##创建用户
ansible webserver -m user -a 'name=lih state=present'
#软件包管理yum或dnf
##安装http
ansible webserver -m dnf -a "name=httpd state=latest enabled=yes"
#服务 
##启动服务
ansible webserver  -m service -a "name=httpd state=started enable=yes"
# 文件模块
## 创建文件
ansible webserver  -m file -a "path=/tmp/addfile.txt mode=777 state=touch"
## 创建文件夹
ansible webserver  -m file -a "path=/tmp/addd mode=777 state=directory"
# 收集模块
ansible webserver -m setup
##收集IP
ansible webserver -m setup -a "filter=ansible_all_ipv4_addresses"
# fetch(获取)
ansible centos2 -m fetch -a "src=/tmp/fetch.txt dest=/root/"
.........#测试结果多了层centos2目录
[root@centos1 tmp]# cat /root/centos2/tmp/fetch.txt
2020202020202020202020202020202020202020
.........
# script(shell脚本)
ansible centos2 -m script -a "/root/addtime.sh"
.........
[root@centos1 ~]# cat addtime.sh
date > /tmp/time.txt
.........

六、YAML语言模式

vim apache.yaml
.........
- hosts: centos2 # 冒号空格 减号空格tasks:- name: installyum: name=httpd state=present  #yum 和name对齐- name: serviceservice: name=httpd state=started
.........#检查语法
ansible-playbook apache.yaml --syntax-check
#列出任务
ansible-playbook apache.yaml --list-task
#列出主机
ansible-playbook apache.yaml --list-host
#执行
ansible-playbook apache.yaml

在这里插入图片描述

七、RHCS-Ansible

红帽推出的Ansible自动化平台2。这是红帽针对混合云自动化的新标准,旨在优化不断演变的混合云大规模计算,并引入了自足式自动化功能,将自动化更深入地转移到应用开发生命周期中

在这里插入图片描述在这里插入图片描述

附:安装CentOS-Stream 9系统

CentOS,是基于Red Hat Linux提供的可自由使用源代码的企业级Linux发行版本;是一个稳定,可预测,可管理和可复制的免费企业级计算平台。 下载地址: https://mirrors.aliyun.com/centos/

安装VMware workstion 17或以上本
下载CentOS-Stream9镜像:

官网:https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/iso/
阿里云:https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/iso/
清华:https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/iso/
#[ ]CentOS-Stream-9-20240724.0-x86_64-dvd1.iso  11G# ubuntu下载
https://releases.ubuntu.com/18.04.6/
vim /etc/yum.repos.d/ansible.repo
.........
[ansible]
name=ansible
baseurl=https://mirrors.aliyun.com/epel/9/Everything/x86_64/
enabled=1
gpgcheck=0
.........

部暑Ansible环境

# 1.1准备三台主机 CentOS Stream 9   
control.lab.example.com  192.168.10.91   控制主机 
node1.lab.example.com    192.168.10.92   被控制主机  
node2.lab.example.com    192.168.10.93   被控制主机 

2)配置所有主机允许root ssh登录

vim /etc/ssh/sshd_config #PermitRootLogin yes
systemctl restart sshd

3)在管理机实现免密

ssh-keygen
ssh-copy-id root@192.168.10.92
ssh-copy-id root@192.168.10.93

)定义inventory,主要清单,主机分组

vim /etc/ansible/hosts
[servers]
192.168.10.92
192.168.10.93

)修改配置文件

# 可默认不修改
vim /etc/ansible/ansible.cfg
[defaults]
inventory  = /etc/ansible/hosts
remote_user = root
host_key_checking = False

测试

ansible servers -m ping 

在这里插入图片描述

ansible-navigator

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ 
pip install ansible-navigator 
ansible-navigator

在这里插入图片描述

podman images

在这里插入图片描述

ansible-navigator config list

7.1 ansible 执行过程

> 加载自己的配置文件,默认/etc/ansible/ansible.cfg; 
> 查找对应的主机配置文件,找到要执行的主机或者组;
> 加载自己对应的模块文件,如 command; 
> 通过ansible将模块或命令生成对应的临时py文件(python脚本)> 并将该文件传输至远程服务器; 
> 对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;
> 给文件 +x 执行权限;
> 执行并返回结果; 删除临时py文件,sleep 0退出

简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果

7.2 安装ansible,ansible-navigator

多次实践后,个人理解,ansible-navigator是ansible的升级,同一配置文件等,简单重整理一部分,其他重复部分可忽略。

在这里插入图片描述

在这里插入图片描述

[student@workstation ~]$ dnf search ansible
[root@workstation ~]'#' dnf install -y ansible-navigator.noarch ansible-core.x86_64
# 查询验证
ansible-navigator --version #显示Ansible Navigator工具的版本,该工具是Ansible Automation Platform的一部分,用于帮助开发者更方便地构建和测试Playbook
ansible --version #显示正在使用的Ansible核心程序的版本rpm -qc ansible-core
---
/etc/ansible/ansible.cfg # 配置文件
/etc/ansible/hosts # 清单文件
---# 容器配置
podman --versionvim .ansible-navigator.yml
---
ansible-navigator:execution-environment:image: utility.lab.example.com/ee-supported-rhel8:latestpull:policy: missing
---
# 配置镜像仓库vim /etc/containers/registries.conf
cat /etc/containers/registries.conf |grep -v ^# |grep -v ^$
---------#old
unqualified-search-registries = ["registry.fedoraproject.org",
"registry.access.redhat.com", "registry.centos.org", "quay.io", "docker.io"]
short-name-mode = "enforcing"
---------cat /etc/containers/registries.conf |grep -v ^#
---------#new
unqualified-search-registries = ["registry.lab.example.com"]
[[registry]]
insecure = true
blocked = false
location = "registry.lab.example.com"
---------vim /etc/hosts
podman images  #内容导航器使用默认的执行环境
ansible-navigator images  #显示本地可用镜像列表

在这里插入图片描述

podman images

在这里插入图片描述

ansible-navigator images

在这里插入图片描述

ansible-navigator collections

在这里插入图片描述

7.2 部署ansible

构建Ansible 清单
管理Ansible 配置文件
编写和运行playbook
实施多个play

>

系统默认清单文件
/etc/ansible/hosts:

vim /etc/ansible/hosts
---
servera
serverb
---
>  #验证清单 
ansible-navigator inventory -i /etc/ansible/hosts --list -m stdout
ansible-navigator inventory -i /etc/ansible/hosts --graph -m stdout

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
配置Ansible
ansible和ansible-navigator的配置文件

#ansible配置文件
which ansible # 文件
rpm -qf /bin/ansible # 安装包
rpm -qc ansible-core-2.13.0-2.el9ap.x86_64 #配置文件
vim /etc/ansible/ansible.cfg # 
ansible-config init --disabled > ansible.cfg#当前生成
vim /etc/ansible/ansible.cfg
.........
138 inventory=/home/lihui/inventory
.........
#其他命令
ansible ungrouped --list-hosts  #

7.3 ansible-navigator

在这里插入图片描述
在这里插入图片描述

#ansible-navigator配置文件
[student@workstation ~]$ cat ~/.ansible-navigator.yml
---
ansible-navigator:execution-environment:image: utility.lab.example.com/ee-supported-rhel8:latestpull:policy: missing
---
或程序生成yml配置
ansible-navigator settings --effective>/tmp/abc.ymlansible-navigator doc -l |wc -l
.........
118
.........

ansible 配置

ansible-config init --disabled > ansible.cfg#当前生成
vim /etc/ansible/ansible.cfg
.........
138 inventory=/home/lihui/inventory
.........
ansible --version #查配置文件
ansible all --list-host # ansible
ansible-navigator inventory -m stdout --graph #ansible-navigator #or list

在这里插入图片描述

# 搜索模块
ansible-navigator collections  -m stdout  |grep firewalld

7.4 YAML

在这里插入图片描述

部分基本案例ansible-playbook可参考章节六
ansible-navigator

调整Tab键缩进

在这里插入图片描述

# 帮助文档
# 查找ansible.posix.firewalld
ansible-navigator collections -m stdout |grep firewalld  ansible-navigator doc user -m stdout #查找:EXAMPLES
vim useradd.yml
........
- name: create userhosts: servertasks:- name: Add the user 'johnd' ansible.builtin.user:name: johndcomment: John Doeuid: 1040group: root
........
#语法检查
ansible-navigator run useradd.yml -m stdout --syntax-check
# 执行
ansible-navigator run useradd.yml
# 提高输出的详细程度
ansible-navigator run useradd.yml -m stdout -vvvv# v-vvvv
# 生产环境检查
ansible-navigator run useradd.yml -m stdout --check

在这里插入图片描述
同一yml文件中再增加play

# 查询控制节点上的模块列表==ansible软件自身带的核心模块
ansible-doc -l |grep dnf
#查询自动化执行环境中的模块列表=容器镜像中带来的模块列表
ansible-navigator doc -l |grep dnf
# 具体模块帮助和案例EXAMPLES
ansible-navigator doc ansible.builtin.dnf -m stdout
vim useradd.yml
.........
#在一个palybook中有多个靠左写的play
#play要有- name hosts tasks
#task要有- name 参数
---
- name: create userhosts: servertasks:- name: Add the user 'johnd' ansible.builtin.user:name: johndcomment: John Doeuid: 1040group: root- name: installhosts: servertasks:- name: Install the latest version of Apacheansible.builtin.dnf:name: httpdstate: latest#1.Ctrl+v  2.下箭头到(需移动的内容) 3.Shift+i 首行移动 4.Esc (其他行移动) #或 1.v 2.下箭头 3.Shift+>(整体移动) 4..(重复执行)u(撤回上次)
.........
# 语法检查
ansible-navigator run useradd.yml -m stdout --syntax-check
# 模拟执行
ansible-navigator run useradd.yml -m stdout --check
ansible-navigator run useradd.yml -m stdout

在这里插入图片描述

选择模块

在这里插入图片描述

7.5 管理变量和事实

变量作为第一个参数和第一个值存在,必须加双引号“{{ }}”

vars:变量定义

vim dnfvar.yml
.........
---
- name: dnf installhosts: servervars:- package: httpdtasks:- name: install {{package}}ansible.builtin.dnf:name: "{{package}}"state: present
.........

vars_file 变量定义

vim dnfvar.yml
........
---
- name: dnf installhosts: servervars_files:- /home/lihui/vars.ymltasks:- name: install {{package}}ansible.builtin.dnf:name: "{{package}}"state: present# 显示运行结果register: install_result # 存储本模块运行输出到变量中- debug:var: install_result........vim vars.yml
.........
package: ftp
........

清单中定义主机或组变量

# 清单中定义主机或组变量
vim inventory
.........
[server]
192.168.10.92 
centos93[server:vars]
package=ftp
.........

7.6 管理机密

在Ansible的使用过程中,经常会遇到处理敏感数据(如密码、密钥等)的情况。直接在剧本或角色中以明文形式存储这些敏感数据,不仅不安全,也不符合最佳实践。为解决这一问题,Ansible提供了一个名为Vault的功能

ansible-vault --help
# 创建加密文件
ansible-vault create sec1.txt
# 查看加密文件
ansible-vault view sec1.txt
# 编辑加密文件
ansible-vault edit sec1.txt
#修改密码
ansible-vault rekey sec1.txt
# 解密
ansible-vault decrypt  sec1.txt
# 查看为内容
cat sec1.txt
#加密
ansible-vault encrypt sec1.txt
#查看为加密后数字
cat sec1.txt#把密码放在文本文件中使用
echo 123456 >mima.txt
ansible-vault view sec1.txt --vault-id=mima.txt#配置文件中 配置文件密码
vim ansible.cfg
........
275 vault_password_file=/home/lihui/mimasec.txt
........
ansible-vault view sec1.txt

在这里插入图片描述

7.7 管理事实

# 临时命令ad-hoc方式收集事实
ansible server -m setup -a filter=*hostname*# 帮助文档 EXAMPLES
ansible-doc debug
.........
EXAMPLES
- name: Print return information from the previous taskansible.builtin.debug:var: resultverbosity: 2
..........# 查找var名称 var: ansible_all_ipv4_addresses
# 或ansible_default_ipv4.addresses
ansible server -m setup -a filter=*ipv4*
.........
192.168.10.92 | SUCCESS => {"ansible_facts": {"ansible_all_ipv4_addresses": ["192.168.10.92"],"ansible_default_ipv4": {"address": "192.168.10.92","alias": "ens32","broadcast": "192.168.10.255","gateway": "192.168.10.2","interface": "ens32","macaddress": "00:0c:29:af:ad:98","mtu": 1500,"netmask": "255.255.255.0","network": "192.168.10.0","prefix": "24","type": "ether"},"discovered_interpreter_python": "/usr/bin/python3"},"changed": false
}
.........# playbook 收集事实
vim fact.yml
.........
---
- name: facthosts: servertasks:- name: Print return information from the previous taskansible.builtin.debug:var: ansible_all_ipv4_addresses.........ansible dev -m debug -a 'var=inventory_hostname'

在这里插入图片描述
收集事实+魔法变量

vim debug.yml
---
- name:hosts: alltasks:- debug:var: hostvarsansible-navigator run debug.yml -m stdout >1.txt
或ansible all -m setup >1.txt
# 
vim 1.txt 

在这里插入图片描述

7.8 实施任务控制

在这里插入图片描述

循环使用变量

在这里插入图片描述
循环字典列表
在这里插入图片描述

# 循环案例
vim loop.yml
.........
---
- name: server loophosts: servervars:users:- name: jan1comment: tom1- name: jan2comment: tom2tasks:- name: server loopansible.builtin.user:name: "{{ item.name}}"comment: "{{item.comment}}"state: presentloop: "{{users}}"
.........
# 执行
ansible-navigator run loop.yml -m stdout
# 验证
ansible server -m shell -a 'tail /etc/passwd'

在这里插入图片描述

有条件的运行任务

when 判断对象是当前模块,和模块在同一下列层次

vim when.yml
.........
---
- name: server whenhosts: servertasks:- name: server whenansible.builtin.service:name: httpdstate: startedwhen: ansible_default_ipv4.address == "192.168.10.92"
.........
# 执行
ansible-navigator run when.yml -m stdout
# 检查
ansible server -m shell -a 'systemctl status httpd'

在这里插入图片描述
多个条件
在这里插入图片描述
循环和条件组合
在这里插入图片描述

处理程序handlers

.........
---
- name: changehosts: servertasks:- name: installansible.builtin.yum:name: httpdstate: latest- name: copyansible.builtin.copy:content: heiheicdest: /var/www/html/index.htmlnotify:- restart- name: startansible.builtin.service:name: httpdstate: startedhandlers:- name: restartansible.builtin.service:name: httpdstate: restarted
.........

在这里插入图片描述
在这里插入图片描述

错误处理

在这里插入图片描述
在这里插入图片描述

7.9 管理复杂的playbook

vim main.yml
---
- name: httphosts: node1tasks:- import_tasks: task/install_httpd.yml- import_tasks: task/start_httpd.ymlvim task/install_httpd.yml
---
- name: Install the latest version of Apacheansible.builtin.yum:name: httpdstate: latestvim task/start_httpd.yml 
---
- name: Make sure a service unit is runningansible.builtin.systemd:state: startedname: httpd

创建角色

#配置路径vim ansible.cfg 
#查看ansible-galaxy --helpansible-galaxy listansible-galaxy role --help
# 创建角色ansible-galaxy init roles/apachetree roles/apache/

在这里插入图片描述

vim roles/apache/tasks/main.yml
---
- name: Install httpansible.builtin.yum:name: httpdstate: latest
- name: Makeansible.builtin.systemd:state: startedname: httpd
- name: Createansible.builtin.template:src: jin2.j2       # templates 中dest: /var/www/html/index.htmlnotify: restart     # handers 中vim roles/apache/templates/jin2.j2
------
wecole to {{ ansible_default_ipv4.address }} and {{ ansible_hostname }} and {{ ansible_nodename }}
------vim roles/apache/handlers/main.yml
---
# handlers file for roles/apache
- name: restartansible.builtin.systemd:state: restartedname: httpdvim roles.yml
---
- name: install apachehosts: node1roles:- apache
#运行
ansible-navigator run roles.yml -m stdout
# 验证
curl localhost

在这里插入图片描述

八.训练题

1. 安装和配置 Ansible安装ansible

*$ sudo yum -y install ansible-core ansible-navigator
创建文件夹
*$ mkdir -p /home/greg/ansible/roles
切换工作目录
*$ cd /home/greg/ansible
拷贝配置文件
$ cat /etc/ansible/ansible.cfg
*$ ansible-config init --disabled > /home/greg/ansible/ansible.cfg
创建集合存储目录
*$ mkdir /home/greg/ansible/mycollection
编辑配置文件
*$ vim ansible.cfg
---------
[defaults]
## 配置文件中,按题要求修改,自最好建到同一文件ansible中
inventory = /home/greg/ansible/inventory
remote_user = greg
host_key_checking = False
vault_password_file = /home/greg/ansible/secret.txt
roles_path    = /home/greg/ansible/roles
collections_path=./mycollection/:.ansible/collections:/usr/share/ansible/collections
[privileg/ree_escalation]
become=True
---------*$ vim /home/greg/ansible/inventory
---------
[dev]
node1
[test]
node2
[prod]
node3
node4
[balancers]
node5
[webservers:children]
prod 
---------

2. 配置系统以使用默认存储库

---
- name: repositoryhosts: alltasks:- ansible.builtin.yum_repository:file: rhel  #file相同,会将配置放到相同repo中。name: EX294_BASEdescription: "EX294 base software"baseurl: http://content/rhel9.0/x86_64/dvd/BaseOSgpgcheck: yesgpgkey: http://content/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-releaseenabled: yes- ansible.builtin.yum_repository: file: rhelname: EX294_STREAMdescription: "EX294 stream software"baseurl: http://content/rhel9.0/x86_64/dvd/AppStreamgpgcheck: yesgpgkey: http://content/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-releaseenabled: yes

3. 安装软件包

# php` 和 `mariadb` 软件包安装到 
#`dev`、`test` 和 `prod` 主机组中的主机上
---
- name: play 1hosts: dev,test,prodtasks:- name: ensure a list of packages installedansible.builtin.yum:name: "{{ packages }}"vars:packages:- php- mariadb

4. 配置collection

配置 collection

  • http://classroom/materials/
    • redhat-insights-1.0.7.tar.gz
    • community-general-5.5.0.tar.gz
    • redhat-rhel_system_roles-1.19.3.tar.gz
  • 上面3个安装在/home/greg/ansible/mycollection目录中
$ vim requirements.yml
---------
---
collections:
- name: http://classroom/materials/redhat-insights-1.0.7.tar.gz
- name: http://classroom/materials/community-general-5.5.0.tar.gz
- name: http://classroom/materials/redhat-rhel_system_roles-1.19.3.tar.gz
---------
$ ansible-galaxy collection install \-r requirements.yml \-p /home/greg/ansible/mycollection

5.使用 RHEL 系统角色

#不安装角色包可以使用该条命令搜索
find ./mycollection/ -name  selinux-playbook.yml $ vim /home/greg/ansible/selinux.yml
---------
---
- hosts: allvars:selinux_policy: targetedselinux_state: enforcingroles:- redhat.rhel_system_roles.selinux 
---------

6.使用 Ansible Galaxy 安装角色

从URL 下载角色并安装到 /home/greg/ansible/roles

$ vim /home/greg/ansible/roles/requirements.yml
---------
---
- src: http://classroom/materials/haproxy.tarname: balancer
- src: http://classroom/materials/phpinfo.tarname: phpinfo
---------

7. 创建和使用角色

创建和使用角色

根据下列要求,在 /home/greg/ansible/roles 中创建名为 apache 的角色:

  • httpd 软件包已安装,设为在系统启动时启用启动

  • 防火墙已启用并正在运行,并使用允许访问 Web 服务器的规则

  • 模板文件 index.html.j2 已存在,用于创建具有以下输出的文件 /var/www/html/index.html

    Welcome to HOSTNAME on IPADDRESS
    

    其中,HOSTNAME 是受管节点的完全限定域名IPADDRESS 则是受管节点的 IP 地址。

创建一个名为 /home/greg/ansible/apache.yml 的 playbook:

  • 该 play 在 webservers 主机组中的主机上运行并将使用 apache 角色
#生成在在指定的目录
$ ansible-galaxy role init \--init-path /home/greg/ansible/roles \apache
#查看
$ ansible-galaxy list
# 查看目录
tree main.yml
vim roles/apache/tasks/main.yml
---------
---
- name: Install the latest version of Apacheansible.builtin.yum:name: httpdstate: latest
- name: Start service httpd, if not startedansible.builtin.systemd:name: httpdstate: startedenabled: yes
- name: Start service firewalld, if not startedansible.builtin.systemd:name: firewalldstate: startedenabled: yes
#考试时先做第五题否则没有posix集合
- name: permit apacheansible.posix.firewalld:service: httppermanent: yesstate: enabledimmediate: yes
- name: j2ansible.builtin.template:
# path = roles/apache/templates/src: index.html.j2dest: /var/www/html/index.html# template 添加模板vim roles/apache/templates/index.html.j2
---------
Welcome to {{ ansible_nodename }} on {{ ansible_default_ipv4.address }}
---------
# 使用角色
vim /home/greg/ansible/apache.yml
---------
---
- name: 创建和使用角色hosts: webserversroles:- apache
---------
# 运行
ansible-navigator run apache.yml -m stdout

8.从 Ansible Galaxy 使用角色

 vim /home/greg/ansible/roles.yml---------
---
- name: 从 Ansible Galaxy 使用角色 1 hosts: webserversroles:- phpinfo- name: 从 Ansible Galaxy 使用角色 2hosts: balancersroles:- balancer
----------

9.创建和使用分区

创建一个名为 /home/greg/ansible/partition.yml的 playbook,它将在prod 主机上运行以执行下列任务:

  • 该playbook只有一个play

  • 在prod主机组中创建分区

  • vdd创建一个1500M主分区,分区号为1,格式化ext4,并挂载到/newpart

  • vde创建一个1500M主分区,分区号为1,格式化ext4,并挂载到/newpart10

  • 如果磁盘空间不够,给出如下提示信息

Could not create partition of that size
  • 改为创建800M分区
  • 如果vde不存在,应显示提示信息
this disk is not exist

vim /home/greg/ansible/partition.yml

---
- name: create and use partitionhosts: prodtasks:- block:- name: Create a partition with 1500mcommunity.general.parted:device: "{{ item }}"number: 1state: presentpart_end: 1500MiBloop:- /dev/vdd- /dev/vderescue:- name: report no 1500mansible.builtin.debug:msg: Could not create partition of that size- name: Create a partition with 800mcommunity.general.parted:device: "{{ item }}"number: 1state: presentpart_end: 800MiBloop:- /dev/vdd- /dev/vdeignore_errors: yesalways:- name: Create a ext4 filesystemcommunity.general.filesystem:fstype: ext4dev: "{{ item }}"loop:- /dev/vdd1- /dev/vde1ignore_errors: yes- name: Mount newpartansible.posix.mount:path: /newpartsrc: /dev/vdd1fstype: ext4state: mountedwhen: ansible_devices.vdd is defined- name: Mount newpart1ansible.posix.mount:path: /newpart10src: /dev/vde1fstype: ext4state: mountedwhen: ansible_devices.vde is defined- name: report no vdeansible.builtin.debug:msg: this disk is not existwhen: ansible_devices.vde is not defined

10. 生成主机文件

$ vim hosts.yml

---
- name: 生成主机文件hosts: all tasks:- name: Template a file to /etc/myhostsansible.builtin.template:src: /home/greg/ansible/hosts.j2dest: /etc/myhostswhen: inventory_hostname in groups.dev

vim hosts.j2

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6{% for host in groups.all %}
{{ hostvars[host].ansible_default_ipv4.address }} {{ hostvars[host].ansible_nodename }} {{ hostvars[host].ansible_hostname }} 
{% endfor %}

11. 修改文件内容

按照下方所述,创建一个名为 /home/greg/ansible/issue.yml 的 playbook :

  • 该 playbook 将在所有清单主机上运行
  • 该 playbook 会将 /etc/issue 的内容替换为下方所示的一行文本:
    • dev 主机组中的主机上,这行文本显示 为:Development
    • test 主机组中的主机上,这行文本显示 为:Test
    • prod 主机组中的主机上,这行文本显示 : Production
---
- name: 修改文件内容hosts: alltasks:- name: Copy using inline content 1ansible.builtin.copy:content: 'Development'dest: /etc/issuewhen: inventory_hostname in groups.dev- name: Copy using inline content 2ansible.builtin.copy:content: 'Test'dest: /etc/issuewhen: inventory_hostname in groups.test- name: Copy using inline content 3ansible.builtin.copy:content: 'Production'dest: /etc/issuewhen: inventory_hostname in groups.prod

验证
ansible all -a ‘cat /etc/issue’

12. 创建 Web 内容目录

创建 Web 内容目录

按照下方所述,创建一个名为 /home/greg/ansible/webcontent.yml 的 playbook :

  • 该 playbook 在 dev 主机组中的受管节点上运行

  • 创建符合下列要求的目录/webdev

    • 所有者为 webdev
    • 具有常规权限:owner=read+write+execute, group=read+write+execute,other=read+execute
    • 具有特殊权限:设置组 ID
  • 用符号链接将 /var/www/html/webdev(链接文件) 链接到 /webdev(源文件)

  • 创建文件 /webdev/index.html ,其中包含如下所示的单行文件: Development

  • dev 主机组中主机上浏览此目录(例如 http://172.25.250.9/webdev/ )将生成以下输出:

    Development
    

vim /home/greg/ansible/webcontent.yml

---
- name: 创建 Web 内容目录hosts: dev
## 存在 httpd 服务;才存在主目录 /var/www/html
## 可以使用『角色』启动服务roles:- apachetasks:
## 可以使用『模块』启动服务
#  - name: Start service httpd, if not started
#    ansible.builtin.service:
#      name: httpd
#      state: started
#      enabled: yes- name: Create a directory if it does not existansible.builtin.file:path: /webdevstate: directorygroup: webdevmode: u=rwx,g=rwxs,o=rx
#     mode: '2775'- name: Create a symbolic linkansible.builtin.file:src: /webdevdest: /var/www/html/webdevstate: link- name: Copy using inline contentansible.builtin.copy:content: 'Development'dest: /webdev/index.htmlsetype: httpd_sys_content_t

13. 生成硬件报告

生成硬件报告

创建一个名为 /home/greg/ansible/hwreport.yml 的 playbook ,它将在所有受管节点上生成含有以下信息的输出文件 /root/hwreport.txt

  • xz
  • MB 表示的总内存大小
  • BIOS 版本
  • 磁盘设备 vda 的大小
  • 磁盘设备 vdb 的大小
  • 输出文件中的每一行含有一个 key=value 对

您的 playbook 应当:

  • http://classroom/materials/hwreport.empty 下载文件,并将它保存为 /root/hwreport.txt
  • 使用正确的值改为 /root/hwreport.txt
  • 如果硬件项不存在,相关的值应设为 NONE

搜索魔法变量、
$ ansible all -m setup > setup.txt
创建
vim /home/greg/ansible/hwreport.yml

name: 生成硬件报告
hosts: all 
tasks:- name: Download foo.confansible.builtin.get_url:url: http://materials/hwreport.emptydest: /root/hwreport.txt- name: Ensure 1ansible.builtin.lineinfile:path: /root/hwreport.txtregexp: '^HOST='line: HOST={{ inventory_hostname | default('admin', true) }}- name: Ensure 2ansible.builtin.lineinfile:path: /root/hwreport.txtregexp: '^MEMORY='line: MEMORY={{ ansible_memtotal_mb }}- name: Ensure 3ansible.builtin.lineinfile:path: /root/hwreport.txtregexp: '^BIOS='line: BIOS={{ ansible_bios_version }}- name: Ensure 4ansible.builtin.lineinfile:path: /root/hwreport.txtregexp: '^DISK_SIZE_VDA='line: DISK_SIZE_VDA={{ ansible_devices.vda.size }}- name: Ensure 5ansible.builtin.lineinfile:path: /root/hwreport.txtregexp: '^DISK_SIZE_VDB='line: DISK_SIZE_VDB={{ ansible_devices.vdb.size | default('NONE', true) }}

14. 创建密码库

创建密码库

按照下方所述,创建一个 Ansible 库来存储用户密码:

  • 库名称为 /home/greg/ansible/locker.yml
  • 库中含有两个变量,名称如下:
    • pw_developer,值为 Imadev
    • pw_manager,值为 Imamgr
  • 用于加密和解密该库的密码为 whenyouwishuponastar
    • 密码存储在文件 /home/greg/ansible/secret.txt

密码本
$ echo whenyouwishuponastar > /home/greg/ansible/secret.txt

$ vim ansible.cfg

...内容省略...
vault_password_file = /home/greg/ansible/secret.txt

ansible-vault create /home/greg/ansible/locker.yml

---
pw_developer: Imadev
pw_manager: Imamgr

查看内容
$ ansible-vault view /home/greg/ansible/locker.yml
内容无法查看
$ cat /home/greg/ansible/locker.yml

15. 创建用户帐户

创建用户帐户

  • http://classroom/materials/user_list.yml 下载要创建的用户的列表,并将它保存到 /home/greg/ansible
  • 在本次练习中使用在其他位置创建的密码库 /home/greg/ansible/locker.yml 。创建名为 /home/greg/ansible/users.yml 的 playbook ,从而按以下所述创建用户帐户:
    • 职位描述为 developer 的用户应当:
      • devtest 主机组中的受管节点上创建
      • pw_developer 变量分配密码
      • 密码最大有效期30
      • 是补充组 devops 的成员
    • 职位描述为 manager 的用户应当:
      • prod 主机组中的受管节点上创建
      • pw_manager 变量分配密码
      • 密码最大有效期30
      • 是补充组 opsmgr 的成员
  • 密码采用 sha512 哈希格式。
  • 您的 playbook 应能够在本次练习中使用在其他位置创建的库密码文件 /home/greg/ansible/secret.txt 正常运行。
---
- name: 创建用户帐户 1hosts: dev,testvars_files:- /home/greg/ansible/locker.yml- /home/greg/ansible/user_list.ymltasks:- name: Ensure group 1ansible.builtin.group:name: devopsstate: present- name: Add the user 1ansible.builtin.user:name: "{{ item.name }}"groups: devopspassword: "{{ pw_developer | password_hash('sha512') }}"password_expire_max: "{{ item.password_expire_max }}"loop: "{{ users }}"when: item.job == 'developer'- name: 创建用户帐户 2hosts: prodvars_files:- /home/greg/ansible/locker.yml- /home/greg/ansible/user_list.ymltasks:- name: Ensure group 2ansible.builtin.group:name: opsmgrstate: present- name: Add the user 2ansible.builtin.user:name: "{{ item.name }}"groups: opsmgrpassword: "{{ pw_manager | password_hash('sha512') }}"password_expire_max: "{{ item.password_expire_max }}"loop: "{{ users }}"when: item.job == 'manager'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430614.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker UI强大之处?

DockerUI是一款由国内开发者打造的优秀Docker可视化管理工具。它拥有简洁直观的用户界面,使得Docker主机管理、集群管理和任务编排变得轻松简单。DockerUI不仅能展示资源利用率、系统信息和更新日志,还提供了镜像管理功能,帮助用户高效清理中…

清华大学开源视频转文本模型——CogVLM2-Llama3-Caption

通常情况下,大多数视频数据并不附带相应的描述性文本,因此有必要将视频数据转换为文本描述,为文本到视频模型提供必要的训练数据。 CogVLM2-Caption 是一个视频字幕模型,用于为 CogVideoX 模型生成训练数据。 文件 使用 import i…

计算机毕业设计 校运会管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

青柠视频云——如何开启HTTPS服务?

前言 由于青柠视频云的语音对讲会使用到HTTPS服务,这里我们说一下如何申请证书以及如何在实战中部署并且配置使用。 一、证书申请 1、进入控制台 我们拿阿里云的免费个人证书为例,首先登录阿里云,在控制台找到数字证书管理服务,进…

音视频入门基础:FLV专题(4)——使用flvAnalyser工具分析FLV文件

一、引言 有很多工具可以分析FLV格式,这里推荐flvAnalyser。其支持: 1.FLV 文件分析(Tag 列表、时间戳、码率、音视频同步等),HEVC(12)/AV1(13) or Enhanced RTMP v1 with fourCC(hvc1/av01); 2.RTMP/HTT…

Linux突发网络故障常用排查的命令

测试环境 系统:Ubuntu 18硬件:单核2G ping 用于测试客户机和目标主机通信状况,是否畅通。以及测量通信的往返时间,判断网络质量的好坏。 它通过发送ICMP回显请求消息到目标主机,并等待返回的ICMP回显回复消息。 pin…

DeiT:Data-efficient Image Transformer(2020),基于新型蒸馏的ViT

Training data-efficient image transformers & distillation through attention:通过注意力训练数据高效的图像转换器和蒸馏 论文地址: https://arxiv.org/abs/2012.12877 代码地址: https://github.com/facebookresearch/deit 这篇论文…

k8s介绍-搭建k8s

官网:https://kubernetes.io/ 应用部署方式演变 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其他技术的参与 缺点:不能为应用程序定义资源使用边界,很难合理地分配计…

简单的spring缓存 Cacheable学习

简单的spring缓存 Cacheable学习 1.需求 项目中有很多的方法查询的数据其实是不会经常变的,但是其整体的查询sql以及调用第三方数据获取数据花费的时间很长,现在考虑对此类型的接口进行优化,首先想到的是对其进行缓存操作,所以简…

CVE-2024-46103

前言 CVE-2024-46103 SEMCMS的sql漏洞。 漏洞简介 SEMCMS v4.8中,SEMCMS_Images.php的search参数,以及SEMCMS_Products.php的search参数,存在sql注入漏洞。 (这个之前就有两个sql的cve,这次属于是捡漏了&#x1f6…

[vulnhub] Hackademic.RTB1

第一次打靶机,思路看的红队笔记 https://www.vulnhub.com/entry/hackademic-rtb1,17/ 环境:kali Linux - 192.168.75.131,靶机 - 192.168.75.132 主机发现和端口扫描 扫描整个网络有哪台机子在线,不进行端口扫描 nmap -sP 192.16…

JavaSE高级(3)——lombok、juint单元测试、断言

一、lombok的使用 默认jvm不解析第三方注解,需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…

力扣周赛 —— 416

前言 只做出了第一道,第二第三道都超时。 痛,太痛了。 题目 Q1.举报垃圾信息 给你一个字符串数组 message 和一个字符串数组 bannedWords。 如果数组中 至少 存在两个单词与 bannedWords 中的任一单词 完全相同,则该数组被视为 垃圾信息。…

HTML讲解(三)通用部分

目录 1.空格标记 2.特殊文字的标记 3.注释语句 4.对文字字体的设置 5.修改文字形态 6.换行标记 7.居中标记 8.水平线标记 9.设置滚动弹幕 1.空格标记 在HTML中,我们想打印空格并不能直接敲一个空格键,因为如果是敲空格键,那无论你敲…

【已解决】ElementPlus 的 el-menu 组件如何用 js 控制展开某个子菜单,并在其他组件中控制使用呢?

文章目录 需求几次探索官网寻找线索(解决办法) 需求 我如何用代码来实现 ElementPlus 的菜单的展开和收缩呢? 几次探索 尝试通过找到节点之后,使用 click 事件,失败了 // 伪代码如下 const handleFindNodeAndClick …

vue Echart使用

一、在vue中使用Echarts 1.安装Echarts npm install echarts --save2.准备一个呈现图表的盒子 给盒子起名字是建议使用id选择器 这个盒子通常来说就是我们熟悉的 div &#xff0c;这个 div 决定了图表显示在哪里&#xff0c;盒子一定要指定宽和高 <div id"main&quo…

Scott Brinker:营销运营这一角色很棒可能会变得更棒;以下是关于相关职位的最新数据

营销运营职位晋升频繁 如果你在市场营销部门工作&#xff0c;生活可能相当不错。74%的营销人员表示&#xff0c;他们对自己的角色有些满意或非常满意。在过去的一年里&#xff0c;超过一半的人得到了晋升或找到了新工作。平均而言&#xff0c;他们的薪水比组织中其他类型的营销…

二、八、十、十六进制的相互转换(期末考试必备)

本文中写的计算方法和计算流程不一定就是正确规范的。。。 参考&#xff0c;仅供参考&#xff0c;如果有问题欢迎指出 目录 一、二进制 1.1 【二】进制转换【十】进制 1.2 【二】进制转换【八】进制 1.3 【二】进制转换【十六】进制 二、八进制 2.1 【八进制】转【二进…

Vue学习记录之八(局部组件,全局组件,递归组件,动态组件)

一、局部组件 在src\components\Card.vue 建立一个文件&#xff0c;代码如下&#xff1a; <template><div class"card"><header><div>标题</div><div>副标题</div></header><section>内容</section>&…

【HTML5】html5开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…