Module: Central::Cli::Common

Included in:
Apps::BuildCommand, Apps::DeployCommand, Apps::InitCommand, Apps::ListCommand, Apps::LogsCommand, Apps::MonitorCommand, Apps::RemoveCommand, Apps::RestartCommand, Apps::ScaleCommand, Apps::ShowCommand, Apps::StartCommand, Apps::StopCommand, Auth::Aws::CreateCommand, Auth::ListCommand, Central::Cli::Containers::ExecCommand, Central::Cli::Containers::InspectCommand, Etcd::GetCommand, Etcd::ListCommand, Etcd::MkdirCommand, Etcd::RemoveCommand, Etcd::SetCommand, ExternalRegistries::AddCommand, ExternalRegistries::DeleteCommand, ExternalRegistries::ListCommand, ExternalRegistries::RemoveCommand, LoginCommand, LogoutCommand, Master::Aws::CreateCommand, Master::Azure::CreateCommand, Master::DigitalOcean::CreateCommand, Master::ListCommand, Master::UseCommand, Master::Users::AddRoleCommand, Master::Users::InviteCommand, Master::Users::ListCommand, Master::Users::RemoveCommand, Master::Users::RemoveRoleCommand, Master::Vagrant::CreateCommand, Master::Vagrant::RestartCommand, Master::Vagrant::SshCommand, Master::Vagrant::StartCommand, Master::Vagrant::StopCommand, Master::Vagrant::TerminateCommand, Nodes::AddLabelCommand, Nodes::Aws::CreateCommand, Nodes::Aws::RestartCommand, Nodes::Aws::TerminateCommand, Nodes::Azure::CreateCommand, Nodes::Azure::RestartCommand, Nodes::Azure::TerminateCommand, Nodes::DigitalOcean::CreateCommand, Nodes::DigitalOcean::RestartCommand, Nodes::DigitalOcean::TerminateCommand, Nodes::Labels::AddCommand, Nodes::Labels::RemoveCommand, Nodes::ListCommand, Nodes::RemoveCommand, Nodes::RemoveLabelCommand, Nodes::ShowCommand, Nodes::SshCommand, Nodes::UpdateCommand, Nodes::Vagrant::CreateCommand, Nodes::Vagrant::RestartCommand, Nodes::Vagrant::SshCommand, Nodes::Vagrant::StartCommand, Nodes::Vagrant::StopCommand, Nodes::Vagrant::TerminateCommand, RegisterCommand, Registry::CreateCommand, Registry::DeleteCommand, Registry::RemoveCommand, Services::AddEnvCommand, Services::AddSecretCommand, Services::ContainersCommand, Services::CreateCommand, Services::DeleteCommand, Services::DeployCommand, Services::Envs::AddCommand, Services::Envs::ListCommand, Services::Envs::RemoveCommand, Services::EnvsCommand, Services::LinkCommand, Services::ListCommand, Services::LogsCommand, Services::MonitorCommand, Services::RemoveCommand, Services::RemoveEnvCommand, Services::RemoveSecretCommand, Services::RestartCommand, Services::ScaleCommand, Services::Secrets::LinkCommand, Services::Secrets::UnlinkCommand, Services::ServicesHelper, Services::ShowCommand, Services::StartCommand, Services::StatsCommand, Services::StopCommand, Services::UnlinkCommand, Services::UpdateCommand, Stacks::AddUserCommand, Stacks::AuditLogCommand, Stacks::CloudConfigCommand, Stacks::CreateCommand, Stacks::CurrentCommand, Stacks::EnvCommand, Stacks::ListCommand, Stacks::ListUsersCommand, Stacks::LogsCommand, Stacks::RemoveCommand, Stacks::RemoveUserCommand, Stacks::ShowCommand, Stacks::TrustedSubnets::AddCommand, Stacks::TrustedSubnets::ListCommand, Stacks::TrustedSubnets::RemoveCommand, Stacks::UpdateCommand, Stacks::UseCommand, Stacks::Users::AddCommand, Stacks::Users::ListCommand, Stacks::Users::RemoveCommand, User::ForgotPasswordCommand, User::ResetPasswordCommand, User::VerifyCommand, Vault::ListCommand, Vault::ReadCommand, Vault::RemoveCommand, Vault::UpdateCommand, Vault::WriteCommand, VersionCommand, Vpn::ConfigCommand, Vpn::CreateCommand, Vpn::DeleteCommand, Vpn::RemoveCommand, WhoamiCommand
Defined in:
lib/central/cli/common.rb

Instance Method Summary collapse

Instance Method Details

#access_token=(token) ⇒ Object



126
127
128
129
# File 'lib/central/cli/common.rb', line 126

def access_token=(token)
  settings['servers'][current_master_index]['token'] = token
  save_settings
end

#add_master(server_name, master_info) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
# File 'lib/central/cli/common.rb', line 131

def add_master(server_name, master_info)
  server_name ||= 'default'
  index = settings['servers'].find_index { |m| m['name'] == server_name }
  if index
    settings['servers'][index] = master_info
  else
    settings['servers'] << master_info
  end
  settings['current_server'] = server_name
  save_settings
end

#api_urlObject



60
61
62
63
64
65
66
67
# File 'lib/central/cli/common.rb', line 60

def api_url
  url = ENV['CENTRAL_URL'] || current_master['url']
  unless url
    fail ArgumentError.new("It seem's that you are not logged into Central master, please login with: cm login")
  end
  ensure_custom_ssl_ca(url)
  url
end

#api_url=(api_url) ⇒ Object



121
122
123
124
# File 'lib/central/cli/common.rb', line 121

def api_url=(api_url)
  settings['servers'][current_master_index]['url'] = api_url
  save_settings
end

#clear_current_stackObject



88
89
90
91
# File 'lib/central/cli/common.rb', line 88

def clear_current_stack
  settings['servers'][current_master_index].delete('stack')
  save_settings
end

#client(token = nil) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/central/cli/common.rb', line 19

def client(token = nil)
  if @client.nil?
    headers = {}
    headers['Authorization'] = "Bearer #{token}" unless token.nil?

    @client = Central::Client.new(api_url, headers)
  end
  @client
end

#current_masterObject



108
109
110
111
112
113
114
# File 'lib/central/cli/common.rb', line 108

def current_master
  index = current_master_index
  unless index
    fail ArgumentError.new("It seem's that you are not logged into ANY Central master, please login with: cm login")
  end
  settings['servers'][index]
end

#current_master=(master_alias) ⇒ Object



116
117
118
119
# File 'lib/central/cli/common.rb', line 116

def current_master=(master_alias)
  settings['current_server'] = master_alias
  save_settings
end

#current_master_indexObject



103
104
105
106
# File 'lib/central/cli/common.rb', line 103

def current_master_index
  current_server = settings['current_server'] || 'default'
  settings['servers'].find_index { |m| m['name'] == current_server }
end

#current_stackObject



93
94
95
96
97
98
99
100
101
# File 'lib/central/cli/common.rb', line 93

def current_stack
  if respond_to?(:stack)
    ENV['CENTRAL_STACK'] || stack || current_master['stack']
  else
    ENV['CENTRAL_STACK'] || current_master['stack']
  end
rescue ArgumentError => e
  nil
end

#current_stack=(stack) ⇒ Object



77
78
79
80
# File 'lib/central/cli/common.rb', line 77

def current_stack=(stack)
  settings['servers'][current_master_index]['stack'] = stack['id']
  save_settings
end

#ensure_custom_ssl_ca(url) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/central/cli/common.rb', line 69

def ensure_custom_ssl_ca(url)
  return if Excon.defaults[:ssl_ca_file]

  uri = URI.parse(url)
  cert_file = File.join(Dir.home, "/.central/certs/#{uri.host}.pem")
  Excon.defaults[:ssl_ca_file] = cert_file if File.exist?(cert_file)
end

#require_api_urlObject



7
8
9
# File 'lib/central/cli/common.rb', line 7

def require_api_url
  api_url
end

#require_current_stackObject



82
83
84
85
86
# File 'lib/central/cli/common.rb', line 82

def require_current_stack
  if current_stack.nil?
    fail ArgumentError.new('Please select stack first using: cm stack use <stack name>')
  end
end

#require_tokenObject



11
12
13
14
15
16
17
# File 'lib/central/cli/common.rb', line 11

def require_token
  token = ENV['CENTRAL_TOKEN'] || current_master['token']
  unless token
    fail ArgumentError.new('Please login first using: cm login')
  end
  token
end

#reset_clientObject



29
30
31
# File 'lib/central/cli/common.rb', line 29

def reset_client
  @client = nil
end

#save_settingsObject



143
144
145
# File 'lib/central/cli/common.rb', line 143

def save_settings
  File.write(settings_filename, JSON.pretty_generate(settings))
end

#settingsObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/central/cli/common.rb', line 37

def settings
  if @settings.nil?
    if File.exist?(settings_filename)
      @settings = JSON.parse(File.read(settings_filename))
      unless @settings['current_server']
        # Let's migrate the old settings model to new
        @settings['server']['name'] = 'default'
        @settings = {
          'current_server' => 'default',
          'servers' => [@settings['server']]
        }
        save_settings
      end
    else
      @settings = {
        'current_server' => 'default',
        'servers' => [{}]
      }
    end
  end
  @settings
end

#settings_filenameObject



33
34
35
# File 'lib/central/cli/common.rb', line 33

def settings_filename
  File.join(Dir.home, '/.central_client.json')
end