Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
de3eed6
update:后端apscheduler使用自定义scheduler
4linuxfun Jul 19, 2024
a2352c2
update:后端增加job相关接口
4linuxfun Jul 19, 2024
86d82ec
update:前端增加job页面
4linuxfun Jul 19, 2024
23d1d91
update:后端CRUD增加通过ID查询
4linuxfun Jul 19, 2024
253076b
update:其他配置更新
4linuxfun Jul 19, 2024
0c7eb3f
后端:修复hosts inventory错误
4linuxfun Jul 22, 2024
9e2cbf0
前端:更新ConfirmDel函数
4linuxfun Jul 22, 2024
0cbe6e9
前端:任务管理-更新实现
4linuxfun Jul 22, 2024
0001783
后端:rpyc执行日志写入redis和数据库
4linuxfun Jul 31, 2024
0ae3e14
后端:rpyc修改任务逻辑调整
4linuxfun Jul 31, 2024
80c38f3
alembic排除部分表
4linuxfun Jul 31, 2024
cda5580
后端:增加任务管理接口
4linuxfun Jul 31, 2024
c338dd1
后端:增加主机管理接口
4linuxfun Jul 31, 2024
f0c6d3b
前端:任务管理界面实现
4linuxfun Jul 31, 2024
f1773c3
后端:rpyc自定义jobstore
4linuxfun Jul 31, 2024
72c00f7
后端:主机管理、任务管理CRUD部分修改
4linuxfun Jul 31, 2024
c0de28e
前端:增加主机管理相关API
4linuxfun Jul 31, 2024
c8c8e78
前端:独立terminal组件,用于日志展示
4linuxfun Jul 31, 2024
9a426bd
前端:主机管理实现
4linuxfun Jul 31, 2024
0ddd9be
后端:更新统计值方式
4linuxfun Aug 1, 2024
1872ca3
后端:实现主机管理查询功能
4linuxfun Aug 1, 2024
81ed345
后端:修复主机管理分组查找逻辑
4linuxfun Aug 2, 2024
97d94db
前端:增加common函数
4linuxfun Aug 6, 2024
1f94a59
前端:主机管理相关页面功能实现
4linuxfun Aug 6, 2024
c1e7406
前端:增加更新主机分组接口
4linuxfun Aug 6, 2024
6adcc11
后端:更新host、user接口
4linuxfun Aug 6, 2024
1cb2281
前端:主机管理-分页点击查询位置调整
4linuxfun Aug 6, 2024
3eb2a87
后端:主机管理接口实现
4linuxfun Aug 6, 2024
a348e06
前端:任务管理-主机选择对话框功能实现
4linuxfun Aug 8, 2024
1bde445
前端:任务管理-主机选择列表功能实现
4linuxfun Aug 8, 2024
0229736
前端:hosts接口调整
4linuxfun Aug 8, 2024
d4cdd91
后端:主机管理增加多主机信息查询接口
4linuxfun Aug 8, 2024
4bc5ab7
前端:update package.json
4linuxfun Aug 8, 2024
9f4491e
前端:任务管理-用户手动输入模板名称
4linuxfun Aug 8, 2024
190cf9f
前端:任务管理-执行方式使用radio实现
4linuxfun Aug 8, 2024
0b2b127
前端:update
4linuxfun Aug 8, 2024
3a15622
后端:pydantic语法更新
4linuxfun Aug 8, 2024
3b310c8
前端:任务管理-任务日志:修复stats为null时异常报错
4linuxfun Aug 12, 2024
1df1880
scheduler:增加playbook业务逻辑实现
4linuxfun Aug 14, 2024
1c6d460
scheduler:增加注释
4linuxfun Aug 14, 2024
deb50aa
后端:增加playbook管理后端接口
4linuxfun Aug 14, 2024
9d8fe9a
后端:update
4linuxfun Aug 14, 2024
05723cc
前端:任务管理,修订module或playbook为null
4linuxfun Aug 14, 2024
42a5bae
前端:任务管理-脚本管理页面功能实现
4linuxfun Aug 14, 2024
98c5193
scheduler:修复ansible playbook传值为id
4linuxfun Aug 14, 2024
bd9a763
后端:playbook增加部分接口
4linuxfun Aug 14, 2024
4fc8a24
前端:任务管理页面调整,playbook传值改为id
4linuxfun Aug 14, 2024
d175f26
update README.md
4linuxfun Aug 14, 2024
ae12682
update:README.md
4linuxfun Aug 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
后端:修复hosts inventory错误
  • Loading branch information
4linuxfun committed Jul 22, 2024
commit 0c7eb3f2aef9e7a2db865514eb7cbf0302c269e6
3 changes: 2 additions & 1 deletion rpyc_scheduler/scheduler-server.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ def exposed_add_job(self, func, **kwargs):
end_date=trigger_args['end_date'])
return scheduler.add_job(func, CronTrigger.from_crontab(trigger), **kwargs)
elif trigger == 'date':
return scheduler.add_job(func, DateTrigger(run_date=trigger_args['run_date']), **kwargs)
return scheduler.add_job(func, DateTrigger(
run_date=trigger_args['run_date'] if trigger_args is not None else None), **kwargs)

def exposed_modify_job(self, job_id, jobstore=None, **changes):
logger.debug(changes)
Expand Down
33 changes: 25 additions & 8 deletions rpyc_scheduler/tasks.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import os.path
import subprocess
import json
import ansible_runner
from pathlib import Path
from pydantic import parse_obj_as
from typing import List, Dict, Any, Union
from datetime import datetime
from loguru import logger
from sqlmodel import text
from utils import Channel, hosts_to_inventory
from config import rpc_config
from models import engine
from models import engine, InventoryHost


def local_executor(job_id, host, command):
Expand All @@ -25,13 +28,27 @@ def local_executor(job_id, host, command):
return status, (end_time - start_time).total_seconds(), channel.msg


def ansible_task(**kwargs):
hosts = kwargs.pop('targets')
ansible_args = kwargs.pop('ansible')
logger.debug(f'task hosts:{hosts}')
logger.debug(f'ansible args:{ansible_args}')
# ansible_inventory = hosts_to_inventory(hosts)
# runner = ansible_runner.run(**kwargs)
def ansible_task(job_id, targets, ansible_args):
private_data_dir = Path(f'/tmp/ansible/{job_id}')
if not private_data_dir.exists():
private_data_dir.mkdir(parents=True)
logger.debug(f'job id:{job_id},task hosts:{targets},ansible_args:{ansible_args}')
hosts: List[InventoryHost] = []
with engine.connect() as conn:
sql = text(
"select id,name,ansible_host,ansible_port,ansible_user,ansible_password,ansible_ssh_private_key from host where id in :targets").bindparams(
targets=targets)
result = conn.execute(sql).fetchall()
logger.debug(result)
for row in result:
hosts.append(
InventoryHost(id=row[0], name=row[1], ansible_host=row[2], ansible_port=row[3], ansible_user=row[4],
ansible_password=row[5], ansible_ssh_private_key=row[6]))
ansible_inventory = hosts_to_inventory(hosts, private_data_dir)
logger.debug(ansible_inventory)
runner = ansible_runner.run(private_data_dir=str(private_data_dir), inventory=ansible_inventory,
host_pattern='all',
**ansible_args)


def run_command_with_channel(job_id=None, targets: List[str] = None, command=None):
Expand Down
11 changes: 9 additions & 2 deletions rpyc_scheduler/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import redis
import os
from loguru import logger
from pathlib import Path
from typing import Dict, Any, List
from models import InventoryHost

Expand Down Expand Up @@ -40,13 +42,14 @@ def close(self, ):
self.conn.close()


def hosts_to_inventory(hosts: List[InventoryHost], private_data_dir):
def hosts_to_inventory(hosts: List[InventoryHost], private_data_dir: Path):
"""
转换hosts为inventory格式的数据
:params hosts:
:params private_data_dir:ansible-runner的环境目录,其中保存runner执行过程的所有数据
"""
inventory = {}
logger.debug(hosts)
for host in hosts:
inventory[host.name] = {
"ansible_host": host.ansible_host,
Expand All @@ -57,4 +60,8 @@ def hosts_to_inventory(hosts: List[InventoryHost], private_data_dir):
inventory[host.name]["ansible_password"] = host.ansible_password
if host.ansible_ssh_private_key:
# 私钥保存到本地文件,并指向对应路径
inventory[host.name]["ansible_ssh_private_key_file"] = host.ansible_ssh_private_key
private_key_file = private_data_dir / f"{host.ansible_host}"
private_key_file.write_text(host.ansible_ssh_private_key)
os.chmod(str(private_key_file), 0o600)
inventory[host.name]["ansible_ssh_private_key_file"] = str(private_key_file)
return {'all': {'hosts': inventory}}