运维如何开发-看我腾讯云AI代码助手

2024-08-20 20:02:13 浏览数 (2)

一、引言

作为一个运维人员,每次看到开发嗷嗷一顿敲代码就可以实现自己想要的功能属实十分羡慕,但奈何能力有限只能想想罢了,但是现在不一样了,有了腾讯云AI代码助手,我感觉作为运维的我行了,我站起来了~。这次使用腾讯云AI代码助手成功的写出了一个基于docker的应用安装小工具,类似于一个小的应用商店,可以快速安装各种应用。特意写一篇文章与大家分享我的喜悦。

二、开发环境介绍

开发使用的是go语言,工具的名称就叫做install-tool好了。开发工具使用goland。和开发的同事聊过这个话题,同时建议我使用go语言进行开发,因为主要使用场景是在linux服务器上执行,基于docker进行应用的安装,go打包二进制可以在linux上直接执行,就非常符合我的需求。其次开发完的工具大小也非常小,真的很适合作为小工具的开发开发语言。腾讯云AI代码助手安装方式可以参考官方文档。

三、腾讯云AI代码助手使用实践

3.1、我想要实现的功能

其实我想要实现的功能很简单。因为经常要安装各种软件比如nginx,redis,mysql等等,所以就想能不能做一个应用商店,把需要安装的软件打包成tar包,因为都是基于docker安装的,所以只需要将这个tar包下载下来,解压,加载镜像,启动应用就可以完成安装,我对需要的功能总结如下

1、可以获取商店中可以安装的应用和版本

2、可以指定安装商店中的应用和版本

3、商店就是用nginx来存放tar包

3.2、主要的流程

1、应用tar包存储到nginx的web服务器上,/repo/app /version,app为对应应用的名称,version代表应用的版本,存放应用tar包和install.yaml,install.yaml中存储安装信息

2、所有可以安装的应用信息放到这个位置/repo/meta.yaml

3、install-tool通过访问/repo/meta.yaml,获取所有可以安装的应用以及版本

4、install-tool访问nginx,下载/repo/app /version上的安装包,并读取该目录下的install.yaml进行应用安装

3.3、编码实现

定义meta.yaml格式。

采用这种格式可以将所能安装的应用以及版本进行记录,客户端进行查询时返回相关信息,

代码语言:javascript复制
applications:
  - name: redis
    versions:
      - "6.2.10"
  - name: nginx
    versions:
      - "0.9"
      - "1.0"
      - "1.1"

我需要我的程序可以解析这个yaml文件的格式,请求AI大佬支援!!!

我们直接复制腾讯云AI代码助手给出的示例,放到mian.go中,需要先安装gopkg.in/yaml.v2这个包

代码语言:javascript复制
func parseYAMLFile(filename string) ([]interface{}, error) {
    // 读取文件内容
    data, err := ioutil.ReadFile(filename)
    if err != nil {
        return nil, err
    }
​
    // 解析YAML数据
    var result []interface{}
    err = yaml.Unmarshal(data, &result)
    if err != nil {
        return nil, err
    }
​
    return result, nil
}

可是这个代码和我想要的不太一样,我需要从nginx上取回这个文件,并解析,所以我们继续提出问题

腾讯云代码助手有给出了一个通过http请求获取yaml文件的方法,并修改了原来的解析yaml文件方法。

代码语言:javascript复制
func fetchYAMLFile(url string) ([]byte, error) {
    // 发送GET请求
    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
​
    // 读取响应体
    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return nil, err
    }
​
    return data, nil
}
​
func parseYAMLFile(url string) ([]interface{}, error) {
    // 获取YAML文件内容
    data, err := fetchYAMLFile(url)
    if err != nil {
        return nil, err
    }
​
    // 解析YAML数据
    var result []interface{}
    err = yaml.Unmarshal(data, &result)
    if err != nil {
        return nil, err
    }
​
    return result, nil
}
​
func main() {
    // YAML文件的URL
    url := "http://127.0.0.1/repo/meta.yaml"
​
    // 解析YAML文件
    data, err := parseYAMLFile(url)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
​
    // 打印解析结果
    fmt.Printf("% vn", data)
}

现在可以正常获取到meta文件,我们的程序需要接收到一个-l的参数,返回所有可以安装的软件和版本信息

修改后的mian方法

代码语言:javascript复制
func main() {
    // 解析命令行参数
    var flagL bool
    flag.BoolVar(&flagL, "l", false, "显示可安装的软件和版本号")
    flag.Parse()
​
    if flagL {
        // YAML文件的URL
        url := "http://127.0.0.1/repo/meta.yaml"
​
        // 解析YAML文件
        data, err := parseYAMLFile(url)
        if err != nil {
            log.Fatalf("error: %v", err)
        }
​
        // 打印软件列表
        printSoftwareList(data)
        return
    }
}

测试了一下好像不太对。。。于是开启了和腾讯云AI代码助手N轮的相爱相杀,同时也去找开发同事帮忙看了一下。最后结论就是即便是一个小功能,也不能把所有代码都放到一个文件里面。解析后的yaml也不应该直接处理需要绑定到一个具体的类上,可以很好的复用。最后在同事以及腾讯云AI代码助手的帮助下,修改为一下结构,并编写了对应的struct接收yaml数据

中间大量重复的和腾讯AI代码助手互动就直接跳过(折磨了我四天,哦不对是我折磨了AI四天。。。),最后开发完代码结构如下

但是腾讯云AI代码助手真的是太优秀了,尤其是这个代码补全功能,我写个开头就能帮我把代码补充完整

然后就是有部分给出的示例代码读不懂,可以让腾讯AI代码助手直接解释这段代码

3.4、验证

四、获得帮助与提升

整个工具写了大概四天吧,其中不断积累,不断学习,好在腾讯云AI代码助手是个AI不是真人,要不然估计要被我气死,突然发现他最大的优点不是那是那些能看得见摸得着的功能,也是他不会生气。。。。通过腾讯云AI助手的帮助完成了这个小工具的开发也算是我这个运维入门了开发吗,姑且勉强我就这么认为吧。最起码降低了程序员的入门门槛,这个帮助对于我来说无疑是巨大的。

五、建议

因为刚刚使用,说实话没有什么特别有建树的意见,以下内容纯属个人想法,如果说的不对勿喷

1、问答形式给出的示例,好像不会告诉如何划分程序路径,只是给出一段代码,并不会说这个属于工具类型的,应该放到utils目录这样的提示

2、解释代码还是不够清晰,可能是由于我太菜的原因,这个不好说。。。

3、代码补全为啥有时候补全出来的代码不能用,goland直接就显示红色

六、结语

非常有意思的一次开发之旅,说实话我也不知道我写的代码是什么逻辑,但是就按照腾讯云AI代码助手的提示编写修改,最后就完成了只不过对于我这个小白来说用时太长了,一边写一边改一边测试写了三四天才完成,但结果终归是好的,在腾讯云AI代码助手和同事的帮助下,算是顺利的完成我想要的功能。过程是痛苦的结果是喜悦的,下次还是尝试一下用腾讯AI代码助手写shell脚本吧,这个我666

0 人点赞