青山くんが教えてくれなかったので書きました。
require 'yaml'
kind = "ClusterRoleBinding".freeze
before = "rbac.authorization.k8s.io/v1beta1".freeze
after = "rbac.authorization.k8s.io/v1".freeze
Dir.glob("manifests/**/*").each do |f|
next unless f =~ /yaml|yml/
line_buff = []
line_num = 0
api_line = 0
should_write = false
File.foreach(f) do |line|
line_num += 1
api_line = line_num - 1 if line =~ /^apiVersion:\s+#{before}$/
if line =~ /kind:\s*#{kind}$/ && api_line != 0
line_buff[api_line] = "apiVersion: #{after}\n"
should_write = true
end
api_line = 0 if line =~ /---/
line_buff << line
end
IO.write(f, line_buff.join) if should_write
end
引数とってあれこれとかもいいんですけど、こういうの手元でパキパキ書き換えて実効するほうが好きなのでもし同じような事する人がいたらネタにしてくだしあというレベルのコードです。
いやー、絶対便利ツールあるよなぁとか思ったりもする。k8sのバージョンとマニフェストを引数に渡したらいい感じにvalidにしてくれるやつ。DaemonSetにselector必要になったりしたときただlabelsをコピペするだけ行とかやったもんなぁ。。