在做手里的项目的过程中,用到了Corba,过程中需要使用动态的help info, 目前Corba本身还不支持,所以手工绕了一些代码才实现。
但是在读Corba源码的过程中,发现只需要改动几个地方,就可以实现的更轻松,于是提交了一个PR,跟Owner贸易了几次,顺利给Merge了。
很惊喜,Marker一下。
https://github.com/spf13/cobra/pull/1760
通过docker registry的文件夹获取到所有的镜像
工作需要获取docker registry里所有的镜像和tag,但是系统在磁盘被占满的情况下出现无法工作的情况,无法通过dockers registry的API去获取。
所以尝试通过,registry的文件夹目录结构中取出想要的结果,最后证明可行。
1 | export docker_registry_dir=/opt/bcmt/storage/docker-registry/ # docker registry 的安装目录。 |
之前都是用notepad++手动替换处理,这次发现结合这几个命令awk, print, substr, tr就可以搞定,不错!
Cobra支持动态自定义flag
用GO实现了一个binary,这个binary会发送API请求去服务端,服务端完成对K8S环境的部署工作。
由于后端进行了大量封装,并且参数是非常多的,所以有了一个想法,具体的要求如下:
- 支持自定义flag列表
- help信息支持展示自定义的flag列表
- 列表信息来自于一个专门的API
基于这些需求,查询了很多文档后,并没有成功的例子,经过一下午的尝试,最后实现了预期的需求,分享一下。
回头准备写一篇post给cobra。
在Cobra的github repo里开了issue,询问是否有更加优雅和方便的方法,没想到Cobra的Collaborator竟然回复了,看起来现在的实现方法是一个正确的方向。
https://github.com/spf13/cobra/issues/1758
API部分, python flask实现的,简单定义了数据结构,然后返回一个json结果。
1 |
|
1 | package utils |
调用:
1 | import ( |
最后执行的结果:
1 | skeetw@N-20HEPF12NB62 MINGW64 /d/CSF_NCM/CSF-NUKE-CLI (1.0) |
在GO项目中使用Uber-zap日志框架
现在需要把一个日志框架加入到新的项目中,对比了一下GO语言里的几个日志框架,最后发现zap是个不错的选择。
https://github.com/uber-go/zap
官网也把zap和其他框架做了一些对比,看起挺不错。
不过在集成到Cobra里的过程中遇到了一点点小坑,记录一下。
1 | package utils |
代码中使用了单例,尝试过使用init(), preRun和postRun,发现都无法正常读取viper里的值,很明显是因为初始化先后顺序的问题。
不太确定最佳的解决方案是啥,但是这里弄一个单例,看似是最保险的。
初始后,在core里放了两个对象,可以同时输出到控制台和文件中,文件加了循环。
在别的文件用的时候
1 | utils.SugaredLogger().Infof("info log") |
Python判断一个函数是否被一个装饰器修饰
今天正在做新项目的框架,比如下面的gen_task方法是一个很耗时的方法,这样的方法在系统里有很多,于是就写了一个装饰器nuke_long_task用于处理长请求事务,用它去处理一些常规通用的业务,比如记录和更新状态等。
1 |
|
装饰器:
1 | def nuke_long_task(): |
遇到的问题是,当想把这个业务提交到线程池之前,想去判断一下这个方法gen_task有没有被正确加上这个装饰器nuke_long_task,找了一圈,没有发现好办法,从gen_task的函数中直接找到与nuke_long_task的相关性,于是换了个思路,在装饰器里给加了一行“wrapper.nuke_long_task_func = True”,就可以解决这个问题了。
提交任务:
1 | submit_jobs(gen_task, "datas", get_result) |
检查方法:
1 | def submit_jobs(task_func, task_func_args, callback_func=None): |
以上
linux下根据IP反查MAC
今天遇到一个问题,给一个VM上配置了两个IP,同时配置到了同一个网卡上,结果一个IP通,一个IP不通。
排查半天,最后发现可以在另外一个VM上利用arp命令,查出来两个配置的IP,发现IP对应的MAC不一样,说明其中一个IP的MAC地址是不对的。
这种情况一般是由于IP地址引起,更换一下IP就好了。
同时根据MAC的前几位可以查询一下设备生产厂家,这样大致能猜出来占用IP的是什么类型的设备。
1 | [root@skeet-deploy ~]# arp -n |
McAfee会误认为GoLang多线程程序是病毒
这几天在学习GoLang, 今天遇到一个有趣的现象,写了下面这段关于多线程routine的代码,一执行就会被McAfee认为是病毒。
程序被kill掉,甚至连VS code都被关掉,并且桌面上的VS code图标都被删掉了,有意思。
1 | package main |
预览FontAwesome
现在在用的HEXO主题里,有一个标题旁边的图片写错了,导致显示是个方块,挺丑,想从现在的字体里选一个,却不知道怎么弄出来全部的。
发现有个网站,https://icomoon.io/app/#/select
选择导入图标,然后选择SVG文件。
选择一个图标,点下面的产生字体,就能在下一页看到这个图标的16进制编码了。
GoLang的编程规范
分享一张Golang的编程规范,来源见水印。
新一轮学习开始了
新的产品release,经过两个多月的努力已经正式的发布了,突然感觉又要闲下来了。
过去的一段时间还是挺充实的,干的不少的活,下一步计划还没有完全确定下来,不过,现在可以准备学习一个Go Lang了。