今天差点被一个YAML空格送走!

草!今天真是日了狗了!
早上刚来,屁股还没坐热,就被DBA那边拉过去救火。他们一个新上的业务,死活连不上数据库。报错信息那叫一个五花八门,什么“连接超时”、“认证失败”、“找不到服务”……反正你能想到的网络问题,它都给你报一遍。
一开始我以为是网络策略或者防火墙的问题,抓包一看,TMD三层都没通。这还玩个屁?
然后就去查K8S的Service和Endpoint,确认服务暴露没问题,Pod也正常Running。再往下看,傻逼的地方就来了。
DBA那边自己瞎JB改了一个ConfigMap,里面存着数据库的连接信息,包括地址、端口、用户名、密码。我一看,地址和端口都是对的,用户名密码也没问题。但是!尼玛在password:后面多加了一个空格!

database:
  host: db.example.com
  port: 3306
  username: app_user
  password:  your_secret_password # 注意这里,SB空格!

你敢信?就这么一个空格,卡了老子半天!
这个SB的程序,直接把your_secret_password(后面带个空格)当密码去连接数据库。数据库一看,你这什么玩意?认证直接给你拒了。
草,一个ConfigMap,YAML文件,最基本的格式都没搞明白,key: value,冒号后面加空格是规范,不是让你在value后面加空格!这是小学生都会的东西!他妈的还DBA,我看就是个Delicate Boy Adjuster!
更操蛋的是,这SB出问题了也不自己好好查,直接跑过来找我,浪费老子时间!
我直接把kubectl edit命令甩他脸上,让他自己看,自己改。
改完之后,连上了,屁事没有了。
这件事让我意识到,这些傻逼玩意儿根本不理解YAML的本质。YAML他妈的本质就是数据!是配置文件!是给人读,给程序用的!你加个空格,程序就认不出来,就报错!这和你在JSON里乱加逗号有什么区别?
教做人时间:
记住!以后写YAML,特别是涉及到敏感信息的,一定要用编辑器或者IDE自带的YAML校验功能!别他妈的手贱瞎JB敲空格!
更重要的是,程序读取ConfigMap里的配置信息的时候,一定要进行Trim操作!去掉字符串两端的空格!这是一个最基本的安全原则!也是一个良好的编程习惯!

import os
# 从环境变量中读取数据库密码,并进行trim操作
database_password = os.environ.get("DATABASE_PASSWORD").strip()
# 或者,如果你用的是字典
config = {
    "database": {
        "password": os.getenv("DATABASE_PASSWORD").strip()
    }
}

如果你用的是Java,也一样,用String.trim()方法。
别再他妈的犯这种低级错误了!丢人!真他妈丢人!浪费老子时间!