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 传输方式
- Basic: 基本认证,适用于本地用户账户。它将用户名和密码以 base64 编码形式发送,如果不使用安全隧道(如 HTTPS),可能会被破解。此类型不支持域用户账户。
- Certificate: 使用证书进行认证,适用于本地用户和域用户账户。这种方式不需要发送用户名和密码,因此比 Basic 安全,但在配置上更复杂。
- Kerberos: 推荐在域环境中使用,支持认证委派和基于 HTTP 的消息加密,是较安全的认证方式。需要在 Ansible 控制机上安装 Kerberos 库并进行额外配置2。
- NTLM: NTLM 认证方式,不提供 Kerberos 的加密和委派功能,但在某些环境中可能更简单。
- 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 测试脚本执行
测试运行正常