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

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

文章目录

    • 一、系统功能说明
    • 二、系统安装
      • [2.1 直接安装](#2.1 直接安装)
      • [2.2 docker 安装](#2.2 docker 安装)
    • 三、系统使用
      • [3.1 建立存储库](#3.1 建立存储库)
      • [3.2 编写代码](#3.2 编写代码)
      • [3.3 建立主机配置](#3.3 建立主机配置)
      • [3.3 建立用户凭据](#3.3 建立用户凭据)
      • [3.4 建立任务](#3.4 建立任务)
      • [3.5 执行任务](#3.5 执行任务)
    • [四、Windows 客户端配置](#四、Windows 客户端配置)
      • [4.1 安装模组](#4.1 安装模组)
      • [4.2 配置windows的脚本](#4.2 配置windows的脚本)
      • [4.3 配置windows主机清单](#4.3 配置windows主机清单)
      • [4.4 测试脚本执行](#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文件
yaml 复制代码
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地址和创建文件夹

yml 复制代码
# 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 测试脚本执行

测试运行正常

相关推荐
qiyi.sky2 分钟前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~6 分钟前
分析JS Crash(进程崩溃)
java·前端·javascript
码农小白11 分钟前
linux驱动:(22)中断节点和中断函数
linux·运维·服务器
4647的码农历程12 分钟前
Linux网络编程 -- 网络基础
linux·运维·网络
安冬的码畜日常15 分钟前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
醉颜凉37 分钟前
银河麒麟桌面操作系统V10 SP1:取消安装应用的安全授权认证
运维·安全·操作系统·国产化·麒麟·kylin os·安全授权认证
l1x1n042 分钟前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。1 小时前
案例-任务清单
前端·javascript·css
C++忠实粉丝1 小时前
Linux环境基础开发工具使用(2)
linux·运维·服务器
康熙38bdc2 小时前
Linux 环境变量
linux·运维·服务器