Class: Cloud::Sh::Commands::Refresh

Inherits:
Base
  • Object
show all
Defined in:
lib/cloud/sh/commands/refresh.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#args, #options

Instance Method Summary collapse

Methods inherited from Base

#config, execute, #initialize

Methods included from Helpers::Commands

#command_chain

Constructor Details

This class inherits a constructor from Cloud::Sh::Commands::Base

Instance Attribute Details

#aliasesObject (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_aliasesObject



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 ||
    puts "Refreshing account #{account.name}"
    build_ssh_aliases()
    build_db_aliases()
    build_k8s_aliases()
  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()
  print " Refreshing DB aliases ... "
  provider = cloud_provider()
  provider.databases do |database|
    next if database.cluster.ignore

    if database.cluster.engine == "pg"
      add_alias(:do, , :psql, database.cluster, database.name, "psql \\\"#{database.uri}\\\"")
      add_alias(:do, , :pgdump, database.cluster, database.name, pgdump_command(database))
      add_alias(:do, , :pgcli, database.cluster, database.name, "pgcli \\\"#{database.uri}\\\"")
    elsif database.cluster.engine == "mysql"
      add_alias(:do, , :mysql, database.cluster, database.name, mysql_command(database))
      add_alias(:do, , :mysqldump, database.cluster, database.name, mysqldump_command(database))
      add_alias(:do, , :mycli, database.cluster, database.name, "mycli \\\"#{database.uri}\\\"")
    elsif database.cluster.engine == "redis"
      add_alias(:do, , :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()
  print " Refreshing K8S aliases ... "
  add_alias(:k8s, , :ctl, kubectl)
  provider = cloud_provider()
  provider.clusters do |cluster|
    add_alias(:k8s, , :switch, :to, cluster, kubectl("config use-context", cluster.context))
    add_alias(:k8s, , :ctl, cluster, kubectl("--context #{cluster.context}"))
    cluster.pods.each do |namespace, pods|
      add_alias(:k8s, , cluster, namespace, :tail, :all, "cloud-sh k8s tail --context #{cluster.context} --namespace #{namespace}")
      pods.each do |pod|
        add_alias(:k8s, , cluster, namespace, :tail, pod.name, "cloud-sh k8s tail --context #{cluster.context} --namespace #{namespace} --pod #{pod.name}") unless pod.name == "console"
        add_alias(:k8s, , cluster, namespace, :exec, pod.name, "cloud-sh k8s exec  --context #{cluster.context} --namespace #{namespace} --pod #{pod.name}")
        add_alias(:k8s, , 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()
  print " Refreshing SSH aliases ... "
  provider = cloud_provider()
  provider.servers do |server|
    add_alias(:do, , :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()
  @cloud_providers ||= {}
  @cloud_providers[] ||= Cloud::Sh::Providers.build()
end

#executeObject



11
12
13
14
15
# File 'lib/cloud/sh/commands/refresh.rb', line 11

def execute
  Cloud::Sh::Providers::DigitalOcean.refresh_k8s_configs(force: options[: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_aliasesObject



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