一个go项目迁移后,某天swagger页面提示如下错误:
Errors
Hide
Resolver errorCannot read properties of undefined (reading '1')
回忆一下好像最近改了一些接口,于是想用swag init
来重新生成文档,但是提示我 ==Command 'swag' not found==。迁移后swag组件没装。按官网
一个go项目迁移后,某天swagger页面提示如下错误:
Errors
Hide
Resolver errorCannot read properties of undefined (reading '1')
回忆一下好像最近改了一些接口,于是想用swag init
来重新生成文档,但是提示我 ==Command 'swag' not found==。迁移后swag组件没装。按官网
由于给通达OA开发了个新模块,想让该模块某些权限开发给大部分人员。几百个角色,一个个改权限,还是挺麻烦的。于是看看能不能批量处理,让甲方爸爸加快结尾款$的速度。查看通达OA后台有导入导出功能,但导出时权限模块是中文的==显然不太符合常规逻辑==,应该要对应的模块ID才对。
那就改数据库吧,经查其数据库有两个关键表对应这里的功能实现。一个是sys_function
,用于存放模块信息;另一个是user_priv
,用于保存角色允许访问的模块列表。知道这两个表后,还有啥难度呢,备份当前表,一顿操作猛如虎,一会就搞定了!
某地数据中心不正常停电,导致vcenter中的esxi服务没正常启动,管理页面打不开,通过service-control --start --all
全部启动服务后,能正常进管理页面,但此时esxi全部离线。逐个esxi右键---reConnect主机,基本能正常添加。只有一台死活添加不上,在解决的过程中遇到的一连串无厘头问题(==实际还更多==),下面将重点列几个。
添加不上只能手动删除离线的esxi,但再重新添加时提示如下:
Datastore 'datastore_ssd' conflicts with an existing datastore in the datacenter that has the same URL
jumpServer添加自定义服务
项目中为了节省资源并且方便日后统一管理,需要将一些不太重要的服务整合到一起。一个mysql或redis容器同时为多个不同的系统提供服务,加快一些边缘服务的部署。jms本身自带一大堆组件服务,比如redis、mysql、nginx等,基本上全家桶了,开发测试都习贯连到jms的组件服务上。但是,有时候想要的服务在jms上又没有,比如要添加一个rabbit-mq或者caddy,单纯docker run xxx或docker-comose up的话,默认运行的容器网络与已有的jms网络不共存,而且各服务启停要分开管理,不太方便。
为了解决这个问题,开始研究怎么往jumpServer里添加自定义服务。通过分析jms源码,很顺利的实现了,这里以caddy为例做介绍。
机房服务器一般配备UPS,当市电停掉时,仍然到维持一段时间。但是,如果长时间停电,UPS也撑不了。此时就需要及时关机以确保数据安全。很多年以前用过winpower软件,通过目标系统安装agent,并用winPower连接UPS,当UPS电量低于设置的阈值时,给各个agent下发关机指令,以实现自动关机。这种方式可以充分利用UPS电量,较为精准的判断电池续航情况,并采取相应动作,但是操作起来有点麻烦。
另一种方式是采用自动化脚本的方式,通过循环ping 某个常接市电设备ip,当失败超过一定次数,触发powerOffVMs,最后shutdown esxi系统。这种方式无需与UPS通讯,只要市电断开,超过一段时间就执行关机指令,超作起来比较方便。但是,这种方式可能存在误判,比如交换机挂了,此时ping设备必然失败,最终会触发关机。因此下面介绍一种更为稳妥的方案。
原理
利用esxcli 来esxcli hardware ipmi sdr list | grep "Power\ Supply\ 1\ Status\|Power\ Supply\ 2\ Status"
来检测电源是否正常。当其中一路电源断开或异常时,调用powerOffVms.py
关闭各虚拟机,最后再调用poweroff
来关闭esxi。