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 semaphoresudo semaphore user add --admin \
--login john \
--name=John \
--email=john1996@gmail.com \
--password=12345sudo 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:3000image: semaphoreui/semaphore:latestenvironment:SEMAPHORE_DB_DIALECT: boltSEMAPHORE_ADMIN_PASSWORD: changemeSEMAPHORE_ADMIN_NAME: adminSEMAPHORE_ADMIN_EMAIL: admin@localhostSEMAPHORE_ADMIN: adminTZ: Asia/Shanghaivolumes:- ./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: k8sroles:- 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.shregister: 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:latestUSER root
RUN apk add --no-cache python3 py3-pip
RUN pip install pywinrm jmespath netaddr passlib requests matrix_clientUSER semaphore
或者在容器启动时安装依赖,如下文中的/etc/semaphore/requirements.txt
services:# Semaphoresemaphore-mariadb:restart: unless-stoppedimage: mariadb:latesthostname: mariadbvolumes:- /srv/semaphore/data:/var/lib/mysqlexpose:- 3306environment:MYSQL_RANDOM_ROOT_PASSWORD: 'yes'MYSQL_DATABASE: 'semaphore'MYSQL_USER: 'semaphore'MYSQL_PASSWORD: '<redacted>'semaphore:image: semaphoreui/semaphore:developrestart: unless-stoppedenvironment:SEMAPHORE_DB_USER: 'semaphore'SEMAPHORE_DB_PASS: 'changeme'SEMAPHORE_DB_HOST: 'semaphore-mariadb'SEMAPHORE_DB_PORT: 3306SEMAPHORE_DB_DIALECT: 'mysql'SEMAPHORE_DB: 'semaphore'depends_on:- semaphore-mariadbvolumes:- ./config.json:/etc/semaphore/config.json:ro- ./requirements.txt:/etc/semaphore/requirements.txt:roexpose:- 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.执行脚本-cmdwin_command: ipconfigregister: script_result- name: 3.打印日志debug:var: script_result.stdout_lines- name: 使用 PowerShell 创建目录win_shell: New-Item -Path C:\testfile -ItemType Directoryregister: script_result_ps- name: 打印日志debug:var: script_result_ps.stdout_lines- name: 使用 CMD 创建目录win_shell: mkdir C:\testfilecmdregister: 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-NetIPAddressregister: 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 测试脚本执行
测试运行正常