背景
昨天(2024年9月5日),一个运维同事在群里发布了一个需求,聊天记录如下。
解决过程
此时,我们直接将配置文件图片丢给GPT,并给它一个解决需求的提示词。这里就直接复制群里兄弟的聊天昨天需求提示词:
提示词如下:
比如我过滤出这个服务名,怎么删除包含这个服务名的location,整个location,因为不一定有多少行,没法按照行数删
GPT理解了我们的意思,但是没有理解很准确,群友的需求是匹配到proxy_pass 后面的地址,然后删除整个location块的内容,这里线验证下基础localhost 路由的匹配删除,再来调试其他的。
测试验证
$ cat nginx.conf
location /dataCenterService {
proxy_pass http://semantic-datacenter-service:31001/;
}
location /uploadDemo {
client_max_body_size 20M;
proxy_send_timeout 1200s;
proxy_read_timeout 1200s;
proxy_connect_timeout 1200s;
send_timeout 1200s;
proxy_pass http://intelligent-quality-inspection-service:31001/;
}
location /accountService {
proxy_pass http://hc-account-analysis-service:31001/;
}
location /qa2020Service{
proxy_pass http://10.0.0.22:9188/;
}
执行命令测试:
这里专门把 -i参数去掉了,这样防止意外修改文件。
$ sed '/location \/accountService {/,/}/d' nginx.conf
location /dataCenterService {
proxy_pass http://semantic-datacenter-service:31001/;
}
location /uploadDemo {
client_max_body_size 20M;
proxy_send_timeout 1200s;
proxy_read_timeout 1200s;
proxy_connect_timeout 1200s;
send_timeout 1200s;
proxy_pass http://intelligent-quality-inspection-service:31001/;
}
location /qa2020Service{
proxy_pass http://10.0.0.22:9188/;
}
可以看到结果是符合预期了,可以将包含某个location路由的nginx块给去掉。接下来我继续通过提示词调试GPT的输出,满足匹配到proxy_pass 后面的地址,然后删除整个localhost 块的内容.
我们继续向chatgpt 发送提示词:
很棒,但我的需求是匹配到proxy_pass 后面的地址,然后删除整个localhost 块的内容.
GPT给了一条命令我们来测试下:
命令执行结果如下:
$ sed '/location \//,/}/ {/proxy_pass .*hc-account-analysis-service/!b};/location \//,/}/d' nginx.conf
location /dataCenterService {
proxy_pass http://semantic-datacenter-service:31001/;
}
location /uploadDemo {
client_max_body_size 20M;
proxy_send_timeout 1200s;
proxy_read_timeout 1200s;
proxy_connect_timeout 1200s;
send_timeout 1200s;
proxy_pass http://intelligent-quality-inspection-service:31001/;
}
location /accountService {
proxy_pass http://hc-account-analysis-service:31001/;
}
location /qa2020Service{
proxy_pass http://10.0.0.22:9188/;
}
可以看到没有任何变化,于是我继续调整提示词:
结果不太符合预期
附上命令及输出结果
GPT很快理解了我的意思,又给我生成了一条命令:
$ sed '/location \//{N;/: {/,/proxy_pass .*hc-account-analysis-service/!b};/}/d}' nginx.conf
sed: -e expression #1, char 73: unexpected `}'
接着我继续将命令输出结果发送给gpt:
这次还是错的,经历了几轮调试之后,gpt终于给出了符合需求的命令:
配置文件
$ cat nginx.conf
location /dataCenterService {
proxy_pass http://semantic-datacenter-service:31001/;
}
location /uploadDemo {
client_max_body_size 20M;
proxy_send_timeout 1200s;
proxy_read_timeout 1200s;
proxy_connect_timeout 1200s;
send_timeout 1200s;
proxy_pass http://intelligent-quality-inspection-service:31001/;
}
location /accountService {
proxy_pass http://hc-account-analysis-service:31001/;
}
location /qa2020Service{
proxy_pass http://10.0.0.22:9188/;
}
删除proxy_pass 包含hc-account-analysis-service
的块:
$ sed -n '/location \//{:a;N;/}/!ba;/proxy_pass .*hc-account-analysis-service/{d};p}' nginx.conf
location /dataCenterService {
proxy_pass http://semantic-datacenter-service:31001/;
}
location /uploadDemo {
client_max_body_size 20M;
proxy_send_timeout 1200s;
proxy_read_timeout 1200s;
proxy_connect_timeout 1200s;
send_timeout 1200s;
proxy_pass http://intelligent-quality-inspection-service:31001/;
}
location /qa2020Service{
proxy_pass http://10.0.0.22:9188/;
}
删除proxy_pass 包含intelligent-quality-inspection-service
的块
$ sed -n '/location \//{:a;N;/}/!ba;/proxy_pass .*intelligent-quality-inspection-service/{d};p}' nginx.conf
location /dataCenterService {
proxy_pass http://semantic-datacenter-service:31001/;
}
location /accountService {
proxy_pass http://hc-account-analysis-service:31001/;
}
location /qa2020Service{
proxy_pass http://10.0.0.22:9188/;
}
大功告成!
扫码加入,即可免费试用!