Skip to content

Commit 5764cd9

Browse files
committed
Support creating and editing secrets in multiple namespaces
1 parent 8ed2ce1 commit 5764cd9

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

k

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,8 @@ def print_commands
179179
puts "k run <application> <command>" + gray(" run a command using a one off pod")
180180
puts "k scale <application> <deployment>:<replicas>" + gray(" scale a deployment in an application")
181181
puts "k secrets [<specific-secret>]" + gray(" lists secrets including usage details")
182-
puts "k secrets:create <secret-name>" + gray(" create a new secret")
183-
puts "k secrets:edit <secret-name>" + gray(" edit a secret")
182+
puts "k secrets:create <secret-name> [<namespace>]" + gray(" create a new secret")
183+
puts "k secrets:edit <secret-name> [<namespace>]" + gray(" edit a secret")
184184
puts "k secrets:get <secret-name> <key>" + gray(" get a single secret value")
185185
puts "k secrets:set <secret-name> <key>=<value> [<key2>=<value2> ...]" + gray(" set new secret values")
186186
puts "k secrets:unset <secret-name> <key> [<key2> ...]" + gray(" unset / delete secret values")
@@ -1714,17 +1714,20 @@ end
17141714

17151715
def secrets_edit
17161716
shared_secret = ARGV.delete_at(0)
1717+
namespace = ARGV.delete_at(0) || "default"
17171718
abort "Must pass name of secret, eg. k secrets:edit <shared-secret-name>" unless shared_secret
17181719
abort "Missing $EDITOR environment variable, eg: export EDITOR='code --wait --new-window'" unless ENV.key?("EDITOR")
17191720

1721+
namespace_prefix = namespace == "default" ? "" : "#{namespace}__"
1722+
17201723
in_argo_repo do
17211724
require "base64"
17221725

1723-
original_secret = YAML.safe_load read_kubectl("get secret #{shared_secret} -o yaml")
1726+
original_secret = YAML.safe_load read_kubectl("get secret #{shared_secret} --namespace #{namespace} -o yaml")
17241727
original_env = original_secret.fetch("data").transform_values(&Base64.method(:strict_decode64))
17251728

17261729
# Write temporary file and launch editor
1727-
tmp_file = "/#{Dir.tmpdir}/#{shared_secret}.yaml"
1730+
tmp_file = "/#{Dir.tmpdir}/#{namespace_prefix}#{shared_secret}.yaml"
17281731
File.write tmp_file, original_env.to_yaml.delete_prefix("---\n")
17291732
system "#{ENV.fetch('EDITOR')} #{tmp_file}"
17301733

@@ -1740,7 +1743,7 @@ def secrets_edit
17401743
original_secret["data"] = data
17411744

17421745
File.write(tmp_file, original_secret.to_yaml)
1743-
kubeseal tmp_file, "applications/shared-secrets/#{shared_secret}.yaml"
1746+
kubeseal tmp_file, "applications/shared-secrets/#{namespace_prefix}#{shared_secret}.yaml"
17441747
File.delete tmp_file
17451748

17461749
changed_variables = new_env.keys.select do |name|
@@ -1749,7 +1752,7 @@ def secrets_edit
17491752
added_variables = new_env.keys - original_env.keys
17501753
deleted_variables = original_env.keys - new_env.keys
17511754

1752-
commit_message = "shared-secrets: edited #{shared_secret}\n\n"
1755+
commit_message = "shared-secrets: edited #{shared_secret} in namespace #{namespace}\n\n"
17531756
commit_message << "Changed: #{changed_variables.join(' ')}\n" unless changed_variables.empty?
17541757
commit_message << "Added: #{added_variables.join(' ')}\n" unless added_variables.empty?
17551758
commit_message << "Deleted: #{deleted_variables.join(' ')}\n" unless deleted_variables.empty?
@@ -1888,18 +1891,23 @@ end
18881891

18891892
def secrets_create
18901893
secret = ARGV.delete_at(0)
1894+
namespace = ARGV.delete_at(0) || "default"
1895+
18911896
abort "Must pass name of the new secret, eg. k secrets:create <secret-name>" unless secret
18921897
abort "Missing $EDITOR environment variable, eg: export EDITOR='code --wait --new-window'" unless ENV.key?("EDITOR")
18931898

18941899
require "base64"
18951900

18961901
in_argo_repo do
1897-
secret_path = "applications/shared-secrets/#{secret}.yaml"
1902+
namespace_prefix = namespace == "default" ? "" : "#{namespace}__"
1903+
secret_path = "applications/shared-secrets/#{namespace_prefix}#{secret}.yaml"
1904+
18981905
if File.exist?(secret_path)
1899-
abort "Error: A secret named '#{secret}' already exists, run 'k secrets:edit #{secret}' to edit it"
1906+
abort "Error: A secret named '#{secret}' in namespace #{namespace} already exists, run 'k secrets:edit #{secret}#{optional_namespace}' to edit it"
19001907
end
19011908

1902-
tmp_file = "/#{Dir.tmpdir}/#{secret}.yaml"
1909+
optional_namespace_in_cli_command = namespace == "default" ? "" : " #{namespace}"
1910+
tmp_file = "/#{Dir.tmpdir}/#{namespace_prefix}#{secret}.yaml"
19031911
File.write(
19041912
tmp_file,
19051913
<<~YAML,
@@ -1918,7 +1926,7 @@ def secrets_create
19181926
secret_yaml = {
19191927
"apiVersion" => "v1",
19201928
"kind" => "Secret",
1921-
"metadata" => { "name" => secret },
1929+
"metadata" => { "name" => secret, "namespace" => namespace },
19221930
"type" => "opaque",
19231931
"data" => data,
19241932
}.to_yaml
@@ -1928,10 +1936,10 @@ def secrets_create
19281936
File.delete tmp_file
19291937

19301938
system_or_die "git add #{secret_path}"
1931-
system_or_die %(git commit -m "shared-secrets: add #{secret}" --quiet)
1939+
system_or_die %(git commit -m "shared-secrets: add #{secret} in namespace #{namespace}" --quiet)
19321940
safe_git_push
19331941

1934-
puts "Successfully created the secret '#{secret}'"
1942+
puts "Successfully created the secret '#{secret}' in namespace #{namespace}"
19351943
end
19361944
end
19371945

0 commit comments

Comments
 (0)