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

测试运行正常

相关推荐
2301_819287121 小时前
ce第六次作业
linux·运维·服务器·网络
CIb0la1 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
武汉联从信息1 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20151 小时前
STUN服务器实现NAT穿透
运维·服务器
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
m0_748255022 小时前
前端常用算法集合
前端·算法
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203982 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2343 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts