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

news2025/1/6 4:26:55

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 测试脚本执行

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

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

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

相关文章

Qt Window Dialog 无标题栏 ,无边框,可拖动

1.效果&#xff1a; 2. 主要实现步骤&#xff1a; 设置窗口 flag&#xff1a; this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); 创建变量存储位置 QPoint m_dragPosition; 对鼠标左键按下和移动事件做处理 void DraggableDialog::mousePre…

R语言探索与分析18-基于时间序列的汇率预测

一、研究背景与意义 汇率是指两个国家之间的货币兑换比率&#xff0c;而且在国家与国家的经济交流有着举足轻重的作用。随着经济全球化的不断深入&#xff0c;在整个全球经济体中&#xff0c;汇率还是一个评估国家与国家之间的经济状况和发展水平的一个风向标。汇率的变动会对…

嵌入式Linux系统编程 — 3.3 chown、fchown 和 lchown 函数更改文件属主

目录 1 文件属主 1.1 文件属主概念 1.2 如何查看文件属主 1.3 有效用户 ID 和有效组 ID 2 chown 函数 2.1 chown命令 2.2 chown函数 2.3 getuid 和 getgid函数 3 fchown函数 3.1 fchown函数简介 3.2 示例代码 4 lchown函数 1 文件属主 1.1 文件属主概念 Linux…

“中新美”三重身份,能帮SHEIN解决上市问题吗?

一家公司的海外上市之路能有多复杂&#xff1f;辗转多地的SHEIN&#xff0c;可能是当前最有话语权回答这个问题的公司。最近&#xff0c;它又有了新消息。 在上市信息多次更改后&#xff0c;伦敦正在成为SHEIN最有可能的“着陆”点。巴伦周刊援引英国天空新闻报道称&#xff0…

可以抛弃纸质礼金簿了,以后登记礼金可以用这款小程序

可以抛弃纸质礼金簿了&#xff0c;以后登记礼金可以用这款小程序 小程序介绍使用主要技术代码来源项目演示首页和我的关于和设置收礼功能送礼功能我的家庭和数据统计 总结 大家好&#xff0c;这里是程序猿代码之路&#xff0c;先说说为什么想搞这一个小程序呢&#xff0c;主要是…

Unity 编辑器扩展 一键替换指定物体下的所有材质球

先看效果 实现方案 1&#xff1a;创建几个用于测试的Cube 2&#xff1a;创建一个脚本 3:编写脚本内容 主要是这部分的逻辑 附上完整代码 using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine;public class Tool {[MenuItem(…

计算机基础(8)——音频数字化(模电与数电)

&#x1f497;计算机基础系列文章&#x1f497; &#x1f449;&#x1f340;计算机基础&#xff08;1&#xff09;——计算机的发展史&#x1f340;&#x1f449;&#x1f340;计算机基础&#xff08;2&#xff09;——冯诺依曼体系结构&#x1f340;&#x1f449;&#x1f34…

vscode输出控制台中文显示乱码最有效解决办法

当VSCode的输出控制台中文显示乱码时&#xff0c;一个有效的解决办法是通过设置环境变量来确保编码的正确性。以下是解决方式&#xff1a; 首先&#xff0c;设置环境变量以修正乱码问题&#xff1a; 如果上述方法没有解决乱码问题&#xff0c;请继续以下步骤&#xff1a; 右键…

JSON 格式说明

文章目录 一、关于 JSON二、JSON 常见格式1、对象2、数组3、值4、字符串5、数值6、空白 三、各语言对 Json 的支持 官网&#xff1a;https://www.json.org/json-en.html (本文翻译自此) 一、关于 JSON JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数…

【CS.CN】深入探讨下HTTP的Connection头:通过keep-alive实现高效网络连接

文章目录 0 序言0.1 由来0.2 使用场景0.3 现在还需要吗&#xff1f; 1 Connection: keep-alive的机制2 语法 && 通过设置Connection: keep-alive优化性能3 验证与性能提升4 总结References 0 序言 0.1 由来 Connection头部字段在HTTP/1.1中被引入&#xff0c;主要用于…

Linux安装RocketMQ教程【带图文命令巨详细】

巨详细Linux安装Nacos教程RocketMQ教程 1、检查残留版本2、上传压缩包至服务器2.1压缩包获取2.2创建相关目录 3、安装RocketMQ4、配置RocketMQ4.1修改runserver.sh和runbroker.sh启动脚本4.2新增broker.conf配置信息4.3启动关闭rocketmq4.4配置开机自启动&#xff08;扩展项&am…

Vxe UI vue 使用 VxeUI.previewImage() 图片预览方法

Vxe UI vue 使用 VxeUI.previewImage() 图片预览方法的调用 查看 github 代码 调用全局方法 VxeUI.previewImage() 参数说明&#xff1a; urlList&#xff1a;图片列表&#xff0c;支持传字符串&#xff0c;也可以传对象数组 [{url: xx’l}] activeIndex&#xff1a;指定默…

力扣经典面试题-旋转链表(Java)

1.题目描述&#xff1a;给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k …

stanfordcorenlp+python做中文nlp任务,得到的结果中全是空字符串,而不是中文字符串

问题描述 代码&#xff1a; from stanfordcorenlp import StanfordCoreNLP import logging#中文中的应用&#xff0c;一定记得下载中文jar包&#xff0c;并标志lang‘zh’ nlp_zh StanfordCoreNLP(rD:\stanford-corenlp-full-2016-10-31, port8094, langzh,quietFalse,logg…

基于YOLOv8的海面石油泄露检测实例分割完整含数据集

需要收集包含海面石油泄漏的图像数据集&#xff0c;并进行标注以指示泄漏区域。接下来&#xff0c;可以使用深度学习框架如PyTorch或TensorFlow&#xff0c;基于YOLO&#xff08;You Only Look Once&#xff09;系列的目标检测模型结构&#xff0c;进行训练。YOLO系列的模型具有…

电压模式 R-2R DAC 的工作原理和特性

在本文中&#xff0c;我们将探索什么是 R-2R DAC 以及如何实现它们。 首先&#xff0c;我们将简要回顾一下开尔文分频器 DAC。这种结构很简单&#xff0c;但需要大量电阻和开关来实现高分辨率 DAC。此问题的一种解决方案是称为 R-2R DAC 的 DAC 结构。这些结构巧妙地利用梯形网…

Elasticsearch 认证模拟题 - 14

一、题目 在集群中输入以下指令&#xff1a; PUT phones/_doc/1 {"brand":"Samsumg","model":"Galaxy S9","features":[{"type":"os", "value":"Android"},{"type":&q…

李飞飞解读创业方向:「空间智能」

在AI领域&#xff0c;李飞飞教授一直是一个举足轻重的存在。她的研究和见解不仅推动了计算机视觉的发展&#xff0c;更对人工智能的未来方向产生了深远的影响。在最近的一次演讲中&#xff0c;李飞飞详细解读了她对于「空间智能」的见解。本文将对她的演讲内容进行详细解读&…

如何使用GPT-4o函数调用构建一个实时应用程序?

本教程介绍了如何使用OpenAI最新的LLM GPT-4o通过函数调用将实时数据引入LLM。 我们在LLM函数调用指南(详见https://thenewstack.io/a-comprehensive-guide-to-function-calling-in-llms/)中讨论了如何将实时数据引入聊天机器人和代理。现在&#xff0c;我们将通过将来自Fligh…

持续警惕火灾风险:学校可燃气体报警器的定期校准检验

可燃气体报警器在学校中的安装、检验和校准对于保护师生生命安全至关重要。 接下来&#xff0c;佰德将探讨可燃气体报警器在学校中的必要性&#xff0c;以及相关实际案例和数据&#xff0c;为您呈现一个安全的学习环境。 一、学校安全不能掉以轻心 学校是培养未来的摇篮&…