semaphore | 使用web界面的ansible来批量运维 linux、windows主机

Ansible 的现代化 UI ,可以轻松管理和运行 Ansible playbook,功能强大,操作简单,支持中文。

文章目录

    • 一、系统功能说明
    • 二、系统安装
      • 2.1 直接安装
      • 2.2 docker 安装
    • 三、系统使用
      • 3.1 建立存储库
      • 3.2 编写代码
      • 3.3 建立主机配置
      • 3.3 建立用户凭据
      • 3.4 建立任务
      • 3.5 执行任务
    • 四、Windows 客户端配置
      • 4.1 安装模组
      • 4.2 配置windows的脚本
      • 4.3 配置windows主机清单
      • 4.4 测试脚本执行

一、系统功能说明

Ansible 的现代化 UI ,可以轻松管理和运行 Ansible playbook,功能强大,操作简单,支持中文。

  • 在web界面管理ansible 脚本和任务
  • 支持定时任务
  • 支持主机配置和环境变量配置
  • 支持git库配置

官方文档:https://docs.semui.co/

二、系统安装

2.1 直接安装

To install Semaphore via snap, run following command in terminal:

sudo snap install semaphore
Semaphore will be available by URL https://localhost:3000.

But to log in, you should create an admin user. Use the following commands:

sudo snap stop semaphore

sudo semaphore user add --admin \
--login john \
--name=John \
--email=john1996@gmail.com \
--password=12345

sudo snap start semaphore
You can check the status of the Semaphore service using the following command:

sudo snap services semaphore
It should print the following table:

Service               Startup  Current  Notes
semaphore.semaphored  enabled  active   -
After installation, you can set up Semaphore via Snap Configuration. Use the following command to see your Semaphore configuration:

sudo snap get semaphore

2.2 docker 安装

注意修改账户密码,使用下面的docker-compose的文件

#前置作业
准备docker-compose.yml文件

services:
  semaphore:
    ports:
      - 3000:3000
    image: semaphoreui/semaphore:latest
    environment:
      SEMAPHORE_DB_DIALECT: bolt
      SEMAPHORE_ADMIN_PASSWORD: changeme
      SEMAPHORE_ADMIN_NAME: admin
      SEMAPHORE_ADMIN_EMAIL: admin@localhost
      SEMAPHORE_ADMIN: admin
      TZ: Asia/Shanghai
      
    volumes:
      - ./semaphore/etc:/etc/semaphore
      - ./semaphore/data:/var/lib/semaphore

三、系统使用

3.1 建立存储库

有本地存储库和git库两种,我这里使用git库

在这里插入图片描述

3.2 编写代码

代码类似下面这种结构

在这里插入图片描述

- collections
  - requirements.yml  				#所有项目的依赖
- run.yml 							#ansible脚本文件			
-roles
   - run								#ansible脚本文件夹
     - tasks							#任务文件夹
       - main.yml						#具体任务

每个文件的配置说明

# /requirements.yml

---
collections:
- pureport.fabric

# /run.yml

#hosts的值要和主机配置里面的列表对应

- hosts: k8s
  roles:
  - run
# roles/run/tasks/main.yml
- name: 1.下载脚本
  get_url:
    url: "http://192.168.1.1/chfs/shared/software/99.scripts/disable_selinux.sh"
    dest: "/tmp/disable_selinux.sh"
    mode: '0755'
- name: 2.执行脚本
  command: /tmp/disable_selinux.sh
  register: script_result
- name: 3.打印日志
  debug:
    var: script_result.stdout_lines

3.3 建立主机配置

在下图位置建立主机清单,用户凭据需先建立

在这里插入图片描述

3.3 建立用户凭据

在这里插入图片描述

3.4 建立任务

在这里插入图片描述

3.5 执行任务

在这里插入图片描述

四、Windows 客户端配置

4.1 安装模组

windows客户端在ansible中支持ssh和winrm方式连接,ssh需要再windows中提前开启 ssh-server,而winrm不需要,故本文使用winrm方式连接

先安装依赖,进入到容器中

/opt/semaphore/venv/bin/pip3 install  pywinrm
/opt/semaphore/venv/bin/pip3 list -v

如果是生产环境,pywinrm环境重启就没了,可以本地安装或者 重新创建包含包的容器

比如下面的dockerfile

FROM semaphoreui/semaphore:latest

USER root
RUN apk add --no-cache python3 py3-pip
RUN pip install pywinrm jmespath netaddr passlib requests matrix_client

USER semaphore

或者在容器启动时安装依赖,如下文中的/etc/semaphore/requirements.txt

services:

  # Semaphore
  semaphore-mariadb:
    restart: unless-stopped
    image: mariadb:latest
    hostname: mariadb
    volumes:
      - /srv/semaphore/data:/var/lib/mysql
    expose:
      - 3306
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      MYSQL_DATABASE: 'semaphore'
      MYSQL_USER: 'semaphore'
      MYSQL_PASSWORD: '<redacted>'

  semaphore:
    image: semaphoreui/semaphore:develop
    restart: unless-stopped
    environment:
      SEMAPHORE_DB_USER: 'semaphore'
      SEMAPHORE_DB_PASS: 'changeme'
      SEMAPHORE_DB_HOST: 'semaphore-mariadb'
      SEMAPHORE_DB_PORT: 3306
      SEMAPHORE_DB_DIALECT: 'mysql'
      SEMAPHORE_DB: 'semaphore'
    depends_on:
      - semaphore-mariadb
    volumes:
      - ./config.json:/etc/semaphore/config.json:ro
      - ./requirements.txt:/etc/semaphore/requirements.txt:ro
    expose:
      - 3000

4.2 配置windows的脚本

windows 中脚本可以使用win_command和wun_shell,分别对应cmd和powershell

- run_win.yml 							#ansible脚本文件			
-roles
   - run_win								#ansible脚本文件夹
     - tasks							#任务文件夹
       - main.yml						#具体任务

下面的脚本分别演示了cmd和powershell 下查看ip地址和创建文件夹

# roles/run_win/tasks/main.yml

- name: 2.执行脚本-cmd
  win_command: ipconfig
  register: script_result

- name: 3.打印日志
  debug:
    var: script_result.stdout_lines

- name: 使用 PowerShell 创建目录
  win_shell: New-Item -Path C:\testfile -ItemType Directory
  register: script_result_ps

- name: 打印日志
  debug:
    var: script_result_ps.stdout_lines

- name: 使用 CMD 创建目录
  win_shell: mkdir C:\testfilecmd
  register: script_result_cmd

- name: 打印日志
  debug:
    var: script_result_cmd.stdout_lines

- name: 4.1 检查 script_resultw 变量
  ansible.builtin.debug:
    var: script_resultw

- name: 4.1 执行脚本-powershell (使用 win_shell)
  win_shell: powershell Get-NetIPAddress
  register: script_resultw

- name: 5.打印日志
  ansible.builtin.debug:
    var: script_resultw.stdout_lines

4.3 配置windows主机清单

在主机清单中需要按下列格式写,在web界面可以不配置密码,其中连接方式有以下几种。推荐使用NTLM

ansible_winrm_transport 变量用于指定 Ansible 在连接到 Windows 主机时使用的 WinRM 传输方式

  1. Basic: 基本认证,适用于本地用户账户。它将用户名和密码以 base64 编码形式发送,如果不使用安全隧道(如 HTTPS),可能会被破解。此类型不支持域用户账户。
  2. Certificate: 使用证书进行认证,适用于本地用户和域用户账户。这种方式不需要发送用户名和密码,因此比 Basic 安全,但在配置上更复杂。
  3. Kerberos: 推荐在域环境中使用,支持认证委派和基于 HTTP 的消息加密,是较安全的认证方式。需要在 Ansible 控制机上安装 Kerberos 库并进行额外配置2。
  4. NTLM: NTLM 认证方式,不提供 Kerberos 的加密和委派功能,但在某些环境中可能更简单。
  5. CredSSP: 支持认证域账户和本地账户,允许凭证代理,可以解决 WinRM 的双重认证问题。安全性低于 Kerberos,但在某些场景下更为方便1。
[win]
host ansible_host=192.168.10.1

[win:vars]
ansible_connection=winrm
ansible_winrm_transport=ntlm
ansible_port=5985
ansible_winrm_server_cert_validation=ignore
ansible_user=用户
ansible_password=密码

在这里插入图片描述

4.4 测试脚本执行

测试运行正常
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AMD 在 Computex 2024 宣布7月推出 Zen 5 锐龙 9000 处理器并展示 Ryzen 9000 CPU 和 AI PC 架构

AMD在台湾台北举行的Computex 2024上揭开了Ryzen 9、7和5系列中四款新的4nm Zen 5驱动的Ryzen 9000处理器的盖子&#xff0c;新的Zen 5架构芯片将于7月上市。将每周期指令数&#xff08;IPC&#xff09;吞吐量提高16%。AMD声称新的旗舰Ryzen 9 9950X在游戏方面比英特尔的竞争对…

记录第一次http转https

之前小程序用的后端是咸虾米老师的&#xff0c;昨天写小程序就想着自己又不是不会写&#xff1f;用自己的吧&#xff0c;然后发现微信小程序要域名是https协议的。看来又得学新东西了Q-Q 查了下大概要这么几个步骤 1.购买ssl证书 2.通过naginx配置ssl证书 3.将以前的http重定…

“JS逆向 | Python爬虫 | 动态cookie如何破~”

案例目标 目标网址:aHR0cHMlM0EvL21hdGNoLnl1YW5yZW54dWUuY29tL21hdGNoLzI= 本题目标:提取全部 5 页发布日热度的值,计算所有值的加和,并提交答案 常规 JavaScript 逆向思路 JavaScript 逆向工程通常分为以下三步: 寻找入口:逆向工程的核心在于找出加密参数的生成方式。…

【代码审计】star7th/showdoc:v3.2.4 Phar反序列化写webshell

目录 漏洞速览 复现 漏洞速览 微步在线X情报社区-威胁情报查询_威胁分析平台_开放社区 主要就是两步&#xff0c;sql注入拿到用户token&#xff0c;再以用户身份上传恶意phar包打phar反序列化 因为文件上传对用户权限没有限制&#xff0c;故本文对sql注入部分不做探讨。…

引入AI图像识别技术,优化旧物回收系统的分类与识别流程

技术革新的必要性&#xff1a; 在旧物回收领域&#xff0c;随着回收量的不断增长和旧物种类的日益丰富&#xff0c;传统的分类与识别方法已经无法满足现代回收系统的需求。因此&#xff0c;引入AI图像识别技术成为了优化旧物回收流程、提高分类准确性与效率的必然选择。 AI图…

python-字符替换

[题目描述] 给出一个字符串 s 和 q 次操作&#xff0c;每次操作将 s 中的某一个字符a全部替换成字符b&#xff0c;输出 q 次操作后的字符串输入 输入共 q2 行 第一行一个字符串 s 第二行一个正整数 q&#xff0c;表示操作次数 之后 q 行每行“a b”表示把 s 中所有的a替换成b输…

使用 Node.js 和 Azure Function App 自动更新 Elasticsearch 索引

作者&#xff1a;来自 Elastic Jessica Garson 维护最新数据至关重要&#xff0c;尤其是在处理频繁变化的动态数据集时。这篇博文将指导你使用 Node.js 加载数据&#xff0c;并通过定期更新确保数据保持最新。我们将利用 Azure Function Apps 的功能来自动执行这些更新&#xf…

汇编:数组-寻址

比例因子寻址&#xff1a; 比例因子寻址&#xff08;也称为比例缩放索引寻址或基址加变址加比例因子寻址&#xff09;是一种复杂的内存寻址方式&#xff0c;常用于数组和指针操作。它允许通过一个基址寄存器、一个变址寄存器和一个比例因子来计算内存地址。 语法 比例因子寻…

IDC最新报告:预计到2027年全球数字化转型支出将近4万亿美元

根据国际数据公司&#xff08;IDC&#xff09;5月30日发布的《全球数字化转型支出指南》&#xff0c;预计到2027年全球数字化转型&#xff08;DX&#xff09;支出将接近4万亿美元。在人工智能&#xff08;AI&#xff09;和生成式人工智能&#xff08;Generative AI&#xff09;…

Leetcode:最长公共前缀

题目链接&#xff1a;14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;横向扫描&#xff09; 主旨&#xff1a;用第一个字符串与后续的每个字符串进行比较&#xff0c;先获取S1和S2的最长公共前缀&#xff0c;然后将该次比较获得的最长公共前缀…

Arduino网页服务器:如何将Arduino开发板用作Web服务器

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我将和大家分享一个有趣且实用的项目——如何使用Arduino开发板搭建一个简易的网页服务器。通过这个项目&#xff0c;你可以将Arduino连接到互联网&#xff0c;并通过网页控制或查询Arduino的状态。 一、项目背景与…

yarn dev报错X [ERROR] Cannot assign to “i“ because it is a constant

yarn dev报错 报错背景 拉取JetLinks-ui-vue源码结果报错 解决方案 node的版本过高导致的 降低版本 Node.js — Download Node.js

【论文阅读】Point2RBox (CVPR’2024)

paper:https://arxiv.org/abs/2311.14758 code:https://github.com/yuyi1005/point2rbox-mmrotate

计算机网络—交换机综合实验

一、实验内容 交换机基本配置设置虚拟局域网VLAN跨交换机实现VLAN2台交换机间用2条链路连接&#xff0c;实现2条链路聚合 二、实验环境 Cisco Packet Tracer 三、实验拓扑 1、 设置虚拟局域网VLAN 2、跨交换机实现VLAN 3、2台交换机间用2条链路连接&#xff0c;实现2条链…

使用springboot+vue实现阿里云oss上传

一、前言 我们后端开发中&#xff0c;时常需要用到文件上传的功能&#xff0c;无非是保存到服务器本地或者如阿里云、七牛云这种云存储的方案。本篇介绍一种使用后台springboot结合前端vue实现阿里云oss上传的功能。 二、前端实现过程 前端实现一个通用的上传组件UploadFile…

【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境

【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境-CSDN博客 0.QT介绍 QT 是一个跨平台的应用程序开发框架&#xff0c;它提供了丰富的工具和类库&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;程序。Qt 提供了 C 编程语言接口&#xff0c;同时也支持其他…

使用Flutter开发APP的问题

在使用Flutter进行APP开发时&#xff0c;尽管Flutter提供了许多优势和便利&#xff0c;但也存在一些常见问题和挑战。以下是开发过程中可能遇到的问题以及应对方法&#xff0c;通过充分理解和应对这些问题&#xff0c;可以更好地利用Flutter的优势&#xff0c;开发出高质量的跨…

Python处理时间和日期库之pytime使用详解

概要 在Python编程中,时间和日期处理是一个常见的需求。虽然Python标准库提供了强大的时间和日期处理模块,但对于一些常见的任务,例如自然语言解析时间、简单的日期计算等,标准库的使用相对复杂。pytime库提供了一种简单而直观的方法来处理时间和日期,使得这些任务变得更…

共享门店模式:快速打造连锁实体店

在数字化浪潮的冲击下&#xff0c;许多线下实体店正面临前所未有的挑战。然而&#xff0c;在这个变革的时代&#xff0c;共享门店模式&#xff0c;也被称为“共享股东”&#xff0c;正以其独特的魅力&#xff0c;为实体店带来新的生机。 一、共享门店模式的崭新定义 共享门店…

asp.net core使用httpclient

主要讲解常见的get请求和post请求 GET var client new HttpClient(); //3秒钟不响应就超时 client.TimeoutTimeSpan.FromSeconds(3); using HttpResponseMessage response await client.GetAsync("todos/3"); var jsonResponse await response.Content.ReadAsSt…