Class: Cloud::Sh::Commands::Refresh
- Defined in:
- lib/cloud/sh/commands/refresh.rb
Instance Attribute Summary collapse
-
#aliases ⇒ Object
readonly
Returns the value of attribute aliases.
Attributes inherited from Base
Instance Method Summary collapse
- #add_alias(*parts, cmd) ⇒ Object
- #build_aliases ⇒ Object
- #build_db_aliases(account) ⇒ Object
- #build_k8s_aliases(account) ⇒ Object
- #build_ssh_aliases(account) ⇒ Object
- #cloud_provider(account) ⇒ Object
- #execute ⇒ Object
- #kubectl(*parts) ⇒ Object
- #mysql_command(database) ⇒ Object
- #mysql_connection_params(uri) ⇒ Object
- #mysqldump_command(database) ⇒ Object
- #normalize_alias_part(part) ⇒ Object
- #pgdump_command(database) ⇒ Object
- #save_aliases ⇒ Object
Methods inherited from Base
Methods included from Helpers::Commands
Constructor Details
This class inherits a constructor from Cloud::Sh::Commands::Base
Instance Attribute Details
#aliases ⇒ Object (readonly)
Returns the value of attribute aliases.
9 10 11 |
# File 'lib/cloud/sh/commands/refresh.rb', line 9 def aliases @aliases end |
Instance Method Details
#add_alias(*parts, cmd) ⇒ Object
121 122 123 124 |
# File 'lib/cloud/sh/commands/refresh.rb', line 121 def add_alias(*parts, cmd) alias_name = parts.map { |part| normalize_alias_part(part) }.compact.join("-") aliases[alias_name] = cmd end |
#build_aliases ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/cloud/sh/commands/refresh.rb', line 17 def build_aliases @aliases = {} config.accounts.each do |account| puts "Refreshing account #{account.name}" build_ssh_aliases(account) build_db_aliases(account) build_k8s_aliases(account) end end |
#build_db_aliases(account) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/cloud/sh/commands/refresh.rb', line 45 def build_db_aliases(account) print " Refreshing DB aliases ... " provider = cloud_provider(account) provider.databases do |database| next if database.cluster.ignore if database.cluster.engine == "pg" add_alias(:do, account, :psql, database.cluster, database.name, "psql \\\"#{database.uri}\\\"") add_alias(:do, account, :pgdump, database.cluster, database.name, pgdump_command(database)) add_alias(:do, account, :pgcli, database.cluster, database.name, "pgcli \\\"#{database.uri}\\\"") elsif database.cluster.engine == "mysql" add_alias(:do, account, :mysql, database.cluster, database.name, mysql_command(database)) add_alias(:do, account, :mysqldump, database.cluster, database.name, mysqldump_command(database)) add_alias(:do, account, :mycli, database.cluster, database.name, "mycli \\\"#{database.uri}\\\"") elsif database.cluster.engine == "redis" add_alias(:do, account, :redis, database.cluster, "redli -u \\\"#{database.uri}\\\"") else puts "Don't know how to handle database engine #{database.cluster.engine}" end end puts "DONE" end |
#build_k8s_aliases(account) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/cloud/sh/commands/refresh.rb', line 68 def build_k8s_aliases(account) print " Refreshing K8S aliases ... " add_alias(:k8s, account, :ctl, kubectl) provider = cloud_provider(account) provider.clusters do |cluster| add_alias(:k8s, account, :switch, :to, cluster, kubectl("config use-context", cluster.context)) add_alias(:k8s, account, :ctl, cluster, kubectl("--context #{cluster.context}")) cluster.pods.each do |namespace, pods| add_alias(:k8s, account, cluster, namespace, :tail, :all, "cloud-sh k8s tail --context #{cluster.context} --namespace #{namespace}") pods.each do |pod| add_alias(:k8s, account, cluster, namespace, :tail, pod.name, "cloud-sh k8s tail --context #{cluster.context} --namespace #{namespace} --pod #{pod.name}") unless pod.name == "console" add_alias(:k8s, account, cluster, namespace, :exec, pod.name, "cloud-sh k8s exec --context #{cluster.context} --namespace #{namespace} --pod #{pod.name}") add_alias(:k8s, account, cluster, namespace, :rails, :console, "cloud-sh k8s exec --context #{cluster.context} --namespace #{namespace} --pod #{pod.name} --cmd 'bundle exec rails console'") if pod.name == "console" end end end puts "DONE" end |
#build_ssh_aliases(account) ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/cloud/sh/commands/refresh.rb', line 36 def build_ssh_aliases(account) print " Refreshing SSH aliases ... " provider = cloud_provider(account) provider.servers do |server| add_alias(:do, account, :ssh, server.name, "ssh #{server.ip}") end puts "DONE" end |
#cloud_provider(account) ⇒ Object
139 140 141 142 |
# File 'lib/cloud/sh/commands/refresh.rb', line 139 def cloud_provider(account) @cloud_providers ||= {} @cloud_providers[account] ||= Cloud::Sh::Providers.build(account) end |
#execute ⇒ Object
11 12 13 14 15 |
# File 'lib/cloud/sh/commands/refresh.rb', line 11 def execute Cloud::Sh::Providers::DigitalOcean.refresh_k8s_configs(force: [:force]) build_aliases save_aliases end |
#kubectl(*parts) ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/cloud/sh/commands/refresh.rb', line 87 def kubectl(*parts) [ "kubectl", "--kubeconfig=#{Cloud::Sh::Providers::DigitalOcean.kube_config}", parts ].flatten.join(" ") end |
#mysql_command(database) ⇒ Object
95 96 97 98 |
# File 'lib/cloud/sh/commands/refresh.rb', line 95 def mysql_command(database) uri = URI.parse(database.uri) [ :mysql, mysql_connection_params(uri), uri.path.delete("/")].join(" ") end |
#mysql_connection_params(uri) ⇒ Object
106 107 108 109 110 111 112 113 114 |
# File 'lib/cloud/sh/commands/refresh.rb', line 106 def mysql_connection_params(uri) [ "--host=#{uri.host}", "--user=#{uri.user}", "--password=#{uri.password}", "--port=#{uri.port}", "--ssl-mode=REQUIRED" ].join(" ") end |
#mysqldump_command(database) ⇒ Object
100 101 102 103 104 |
# File 'lib/cloud/sh/commands/refresh.rb', line 100 def mysqldump_command(database) uri = URI.parse(database.uri) dump_name = "#{database.name}-`date +%Y%m%d%H%M`.sql" [ :mysqldump, mysql_connection_params(uri), uri.path.delete("/"), "> #{dump_name}"].join(" ") end |
#normalize_alias_part(part) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/cloud/sh/commands/refresh.rb', line 126 def normalize_alias_part(part) return nil if part.respond_to?(:default) && part.default if part.respond_to?(:alias) part = part.alias elsif part.respond_to?(:name) part = part.name elsif part.respond_to?(:to_s) part = part.to_s end part.tr("._", "-") end |
#pgdump_command(database) ⇒ Object
116 117 118 119 |
# File 'lib/cloud/sh/commands/refresh.rb', line 116 def pgdump_command(database) dump_name = "#{database.name}-`date +%Y%m%d%H%M`.sql" "pg_dump \\\"#{database.uri}\\\" -f #{dump_name}" end |
#save_aliases ⇒ Object
27 28 29 30 31 32 33 34 |
# File 'lib/cloud/sh/commands/refresh.rb', line 27 def save_aliases print "Saving aliases ... " aliases_text = aliases.map do |alias_name, cmd| "alias #{alias_name}=\"#{cmd}\"" end.join("\n") File.write(config.aliases_file, aliases_text) puts "DONE" end |