OpenShift - 使用 Ansible Automation Platform 纳管 OpenShift Virtualization 虚机

news2024/11/17 5:53:00

《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证

本文所用到的运行环境和配置方法请先参照以下 blog 准备:

  1. 《OpenShift 4 - 安装部署 Ansible Automation Platform 4.x 控制台》
  2. 《OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法1+2》

文章目录

  • 准备 Ansible Automation Platform(AAP)环境
    • 创建访问VM主机的私钥
    • 创建 Inventory 主机清单
    • 使用 APP 的 API 向清单中添加主机
  • 配置运行 CI/CD Pipeline 流水线
    • 增加 CI/CD Pipeline 流水线参数
    • 增加调用 AAP API 的 Task
    • 运行 CICD Pipeline 流水线
  • 在 AAP 控制台验证创建的 VM 可访问

准备 Ansible Automation Platform(AAP)环境

创建访问VM主机的私钥

在 AAP 控制台中创建一个名为 fedora-vm-credential 的凭证,用户名设为 fedora,并提供 SSH 私钥
在这里插入图片描述

创建 Inventory 主机清单

在 AAP 控制台中创建一个名为 VM Inventory 新的清单,本文后面创建的 VM 都放在这个清单中。
然后可以先在该清单中任意创建一个测试用的主机。

使用 APP 的 API 向清单中添加主机

使用 https://<AAP-CONTROLLER>/api/v2/hosts/ 地址访问 AAP 的 Host 主机 API,可在下图界面中可以看到上一步的测试主机所在 Inventory 的 ID 为 2。
在这里插入图片描述
另外可在该页面下方的 POST 区域测试增加 Host 主机的 json 脚本。
在这里插入图片描述

配置运行 CI/CD Pipeline 流水线

增加 CI/CD Pipeline 流水线参数

在 《OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法1+2》一文的 CI/CD pipeline 流水线中增加 4 个参数,分别为:AAP_USER、AAP_PASSWORD、AAP_ADDRESS、INVENTORY_ID,分别对应 Ansible Automation Platform 的用户名、密码、控制台访问地址和主机所属清单 ID。
在这里插入图片描述

增加调用 AAP API 的 Task

编辑 《OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法1+2》一文的 CI/CD pipeline 流水线。在第二个 Task 后增加一个新的 Task,然后选中名为 openshift-client 任务,将其添加到 CI/CD Pipeline 流水线中。
在这里插入图片描述
将以下内容填入任务的 SCRIPT 区域(见下图)。该脚本将根据 vmName 先获得访问地址,然后再调用 API 在 Ansible Automation Platform 中创建一个新的 Host 主机。

VM_IP=$(oc get vmi $(params.vmName) --output=jsonpath={.status.interfaces[0].ipAddress})
curl -k -L -X POST https://$(params.AAP_ADDRESS)/api/v2/hosts/ \
     -u $(params.AAP_USER):$(params.AAP_PASSWORD) \
     -H 'Content-Type: application/json' \
     -d '{"name": "'$(params.vmName)'", "description": "", "inventory": '$(params.INVENTORY_ID)', "enabled": true, "instance_id": "", "variables": "{\"ansible_host\":\"'${VM_IP}'\"}"}'

在这里插入图片描述

运行 CICD Pipeline 流水线

确认CI/CD Pipeline 流水线为以下 YAML。

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: create-vm-and-ansible-manage-vm-pipeline
spec:
  params:
    - description: VM Name
      name: vmName
      type: string
    - default: password
      description: Password for user fedora
      name: vmPassword
      type: string
    - default: myvm-publickey
      description: Secret including private key
      name: publicKeySecret
      type: string
    - default: myvm-privatekey
      description: Secret including public key
      name: privateKeySecret
      type: string
    - default: admin
      name: AAP_USER
      type: string
    - default: Ks9hNkgXlRqtyxeVVb2FtBwMDybCnt59
      name: AAP_PASSWORD
      type: string
    - default: mycontroller-aap.apps-crc.testing
      name: AAP_ADDRESS
      type: string
    - name: INVENTORY_ID
      type: string
  tasks:
    - name: create-vm
      params:
        - name: templateName
          value: vm-template-fedora
        - name: templateParams
          value:
            - 'NAME:$(params.vmName)'
            - 'PASSWORD:$(params.vmPassword)'
            - 'PUBLIC_KEY_SECRET:$(params.publicKeySecret)'
        - name: dataVolumes
          value: []
        - name: ownDataVolumes
          value: []
        - name: persistentVolumeClaims
          value: []
        - name: ownPersistentVolumeClaims
          value: []
      taskRef:
        kind: ClusterTask
        name: create-vm-from-template
    - name: install-software
      params:
        - name: vmName
          value: $(params.vmName)
        - name: secretName
          value: $(params.privateKeySecret)
        - name: command
          value: []
        - name: args
          value: []
        - name: script
          value: |-
            #!/usr/bin/env bash
            set -ex
            sudo yum install -y nginx
            echo helloworld>~/hello.html
            sudo cp ~/hello.html /usr/share/nginx/html/hello.html
            sudo systemctl start nginx
            curl localhost/hello.html
      runAfter:
        - create-vm
      taskRef:
        kind: ClusterTask
        name: execute-in-vm
    - name: ansible-manage-vm
      params:
        - name: SCRIPT
          value: >-

            VM_IP=$(oc get vmi $(params.vmName) --output=jsonpath={.status.interfaces[0].ipAddress})

            curl -k -L -X POST https://$(params.AAP_ADDRESS)/api/v2/hosts/ \
              -u $(params.AAP_USER):$(params.AAP_PASSWORD) \
              -H 'Content-Type: application/json' \
              -d '{"name": "'$(params.vmName)'", "description": "", "inventory": '$(params.INVENTORY_ID)', "enabled": true, "instance_id": "", "variables": "{\"ansible_host\":\"'${VM_IP}'\"}"}'
        - name: VERSION
          value: latest
      runAfter:
        - install-software
      taskRef:
        kind: ClusterTask
        name: openshift-client

提供运行参数运行 Pipeline 流水线,其中 INVENTORY_ID 为前面创建的 Ansible 主机清单对应的 ID。确认 Pipeline 流水线可正常运行完成。

在这里插入图片描述

在 AAP 控制台验证创建的 VM 可访问

  1. 在 Ansible Automation Platform 控制台进入 VM Inventory 清单的主机列表。确认上一步通过 CI/CD Pipeline 流水线创建的 Fedora VM 已经在主机列表中了。
  2. 选中该主机,然后点击“运行命令”。
    在这里插入图片描述
  3. 选中 ping 模块
    在这里插入图片描述
  4. 选中 Default execution environment 执行环境
    在这里插入图片描述
  5. 选中 fedora-vm-credential 机器凭证
    在这里插入图片描述
  6. 确认运行 SUCCESS。
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React 组件

文章目录 React 组件复合组件 React 组件 本节将讨论如何使用组件使得我们的应用更容易来管理。 接下来我们封装一个输出 “Hello World&#xff01;” 的组件&#xff0c;组件名为 HelloMessage&#xff1a; React 实例 <!DOCTYPE html> <html> <head> &…

css中的grid高频布局

1.需求 1.一个父级容器内有n个子元素; 2.每个子元素最小宽度是100px&#xff1b; 3.每个子元素最大宽度根据屏幕宽度自适应&#xff1b; 4.每个子元素的宽度保持同宽&#xff1b; 5.每个元素之间有间隔&#xff0c;每一行的两边不留间隙&#xff0c;每一列的上下不留间隙&…

2.V853支持WIFI和有线网卡

100ASK-V853-PRO开发板支持WIFI和有线网卡 0.前言 ​ 通过上一章节&#xff0c;我们已经成功下载Tina SDK包&#xff0c;完成编译并烧写Tina Linux系统&#xff0c;接下来展示100ASK_V853-PRO开发部如何通过WIFI和有线网卡进行上网。 全志Linux Tina-SDK开发完全手册&#x…

02-mysql升级篇(rpm方式+压缩包升级)

文章目录 升级方式一、二进制方式安装1、下载mysql-5.7.42安装包&#xff08;mysql-5.7.37升级mysql-5.7.42&#xff09;2、备份数据库、my.cnf文件&#xff0c;停止mysql服务&#xff08;重要&#xff09;3、查看当前数据库版本3、上传 mysql-5.7.42-1.el7.x86_64.rpm-bundle.…

SpringMVC 详解

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式&#xff1a;warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

关于太阳黑子数的查询

太阳黑子数查询地址&#xff1a;点此跳转 浏览器中打开下图所示的网站。 根据自己的需求下载相应的文件查找太阳黑子数&#xff0c;下载时可以选择 TXT 文件格式&#xff0c;也可以选择 CSV 文件格式。 我下载了每日估计的太阳黑子数&#xff0c;TXT 格式文件打开如下图所示。…

免费下载的无水印人物素材网站!

在日常设计中&#xff0c;设计师常常需要使用人物素材来提升设计作品的吸引力。一个可爱的人物插画可以使网页界面更加生动&#xff0c;一个富有个性的人物素材可以让应用程序更具吸引力&#xff0c;引发用户的共鸣。但设计师有时会苦恼于找不到合适的人物素材网站&#xff0c;…

PCB制板基础知识[详细版]

一、PCB概念 PCB&#xff08;PrintedCircuitBoard&#xff09;&#xff0c;中文名称为印制电路板&#xff0c;又称印刷电路板、印刷线路板&#xff0c;是重要的电子部件&#xff0c;是电子元器件的支撑体&#xff0c;是电子元器件电气连接的提供者。由于它是采用电子印刷术制…

USB descriptor

如下为oneplus的插入MIDI模式 device descriptor 注意&#xff1a;1个device只有一个描述符 bNumConfigurations 标识只有一个配置&#xff0c;该配置只属于一个传输速度 通过getDescriptor的方法获得&#xff0c;需要指定wvalue为deivce descriptor,至于index可以为0 大概1…

【5.JS基础-JavaScript的DOM操作】

1 认识DOM和BOM 所以我们学习DOM&#xff0c;就是在学习如何通过JavaScript对文档进行操作的&#xff1b; DOM Tree的理解 DOM的学习顺序 DOM的继承关系图 2 document对象 3 节点&#xff08;Node&#xff09;之间的导航&#xff08;navigator&#xff09; 4 元素&#xff0…

Java的抽象类 接口

抽象类 如果自下而上在类的继承层次结构中上移&#xff0c;位于上层的类更具有通用性&#xff0c;甚至可能更加抽象。从某种角度看&#xff0c;祖先类更加通用&#xff0c;人们只将它作为派生其他类的基类&#xff0c;而不作为想使用的特定的实例类。例如&#xff0c;考虑一下…

python中使用opencv LED屏数字识别(可用做车牌识别,一样的原理)

应项目要求需要基于cpu的LED数字识别&#xff0c;为了满足需求&#xff0c;使用传统方法进行实验。识别传感器中显示的数字。因此使用opencv的函数做一些处理&#xff0c;实现功能需求。 首先读取图像&#xff0c;因为我没想大致得到LED屏幕的区域&#xff0c;因此将RGB转换为H…

Java 观察者模式 详解

观察者模式是一种常见的设计模式&#xff0c;也称作发布-订阅模式。它主要解决了对象之间的通知依赖关系问题。在这种模式中&#xff0c;一个对象&#xff08;称作Subject&#xff09;维护着一个对象列表&#xff0c;这些对象&#xff08;称作Observers&#xff09;都需要被通知…

STANet代码复现出现的问题

1 IndexError: boolean index did not match indexed array along dimension 0; dimension is 4194304 but corresponding boolean dimension is 65536定位到导致错误的代码&#xff0c;是metric.py&#xff0c;Collect values for Confusion Matrix 收集混淆矩阵的值时出错 …

Java框架学习02(SpringSpringBoot常用注解总结)

1. SpringBootApplication 这里先单独拎出SpringBootApplication 注解说一下&#xff0c;虽然我们一般不会主动去使用它。 Guide&#xff1a;这个注解是 Spring Boot 项目的基石&#xff0c;创建 SpringBoot 项目之后会默认在主类加上。 SpringBootApplication public class…

ROM、RAM、FLASH区别

文章目录 一、ROM二、RAM三、FLASH四、单片机程序大小计算1、Keil/MDK 一、ROM ROM&#xff08;Read Only Memory&#xff09;只读存储器。是一种半导体内存&#xff0c;其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中&#xff0c;资…

性能测试的核心原理

性能测试的核心原理 1 基于协议&#xff0c;前后端交互机制&#xff0c;性能核心。基于界面决定和前端用户交互&#xff0c;基于代码决定了后端。 1 网络分布式架构。 2 单机应用&#xff0c;比如安安兔&#xff0c;鲁大师。主要判断io读写&#xff0c;以及对资源的消耗。 2 多…

git常见操作命令

1.Git 配置 在安装完成 Git 后&#xff0c;开始正式使用前&#xff0c;是需要有一些全局设置的&#xff0c;如用户名、邮箱。 git config --global user.name "your name" // 设置全局用户名 git config --global user.email "your email" // 设…

Linux诞生与分支

a) 什么是操作系统操作系统是计算机系统中必不可少的基础系统软件&#xff0c;它的作用是管理和控制计算机系统中的硬件和软件资源&#xff0c;合理地组织计算机系统的工作流程&#xff0c;以便有效地利用这些资源为使用者提供一个功能强大、使用方便的操作环境。它在计算机系…

汽车轮胎充电宝打气泵方案

我们知道新能源车是没有配置充气泵的&#xff0c;所以在平时日常使用中我们还需要配置一个充气泵。充气泵方案便是在这个用户需求上面开发出来的。它体积小、外观精美、带有多模式充气并车胎检测等功能&#xff0c;是现在有车一族的出行必备物品。 充气泵方案其功能设计集成于一…