class DanarchySys::ConfigManager::Config

Public Class Methods

config_template() click to toggle source
# File lib/danarchy_sys/config_manager.rb, line 25
def self.config_template
  config_template = {
    global_settings: {
      ssh_key_path: nil
    },
    accounts: {}
  }
end
global_setting_add(config, name, value) click to toggle source
# File lib/danarchy_sys/config_manager.rb, line 110
def self.global_setting_add(config, name, value)
  config[:global_settings][name.to_sym] = value
end
global_setting_delete(config, name) click to toggle source
# File lib/danarchy_sys/config_manager.rb, line 114
def self.global_setting_delete(config, name)
  config[:global_settings].delete(name.to_sym)
end
new() click to toggle source
# File lib/danarchy_sys/config_manager.rb, line 9
def self.new
  danarchysys_cfg_path = File.join(File.realpath(ENV['HOME']), '.danarchy', 'danarchy_sys')
  config_json = File.join(danarchysys_cfg_path, 'danarchy_sys.json')

  if File.exists?(config_json)
    return JSON.parse(File.read(config_json), symbolize_names: true)
  else
    puts 'No existing configuration found!'
    return new_config(danarchysys_cfg_path, config_json)
  end
end
new_config(danarchysys_cfg_path, config_json) click to toggle source
# File lib/danarchy_sys/config_manager.rb, line 34
def self.new_config(danarchysys_cfg_path, config_json)
  config = config_template
  ssh_path = File.join(danarchysys_cfg_path, 'ssh')

  puts "dAnarchy_sys config location: #{danarchysys_cfg_path}"
  FileUtils.mkdir_p(danarchysys_cfg_path, mode: 0700) unless Dir.exist?(danarchysys_cfg_path)

  print "Default ssh key location: #{ssh_path}. Is this location okay?: (Y/N) "
  answer = gets.chomp

  until answer =~ /^y(es)?$/i
    print 'Enter a path for SSH keys: '
    ssh_path = gets.chomp
    print "Setting SSH key path to: #{ssh_path}. Is this location okay? (Y/N): "
    answer = gets.chomp
  end

  puts "SSH key path set to: #{ssh_path}"
  FileUtils.mkdir_p(ssh_path, mode: 0700) unless Dir.exist?(ssh_path)
  global_setting_add(config, 'ssh_key_path', ssh_path)

  provider = nil
  if providers.count > 1
    num_providers = Helpers.array_to_numhash(providers)
    fields = PrintFormats.printf_hash(num_providers)

    printf("#{fields}\n", 'Id', 'Provider')
    num_providers.each do |k, v|
      printf("#{fields}\n", "#{k}.", v)
    end

    provider = nil
    until providers.include?(provider)
      print 'Please choose a provider: '
      provider = gets.chomp

      if provider =~ /^[0-9]*$/
        if num_providers.keys.include?(provider.to_i)
          provider = num_providers[provider.to_i]
        else
          print "#{provider} is not a valid Id. "
        end
      end

      if provider.empty? || providers.include?(provider) == false
        print 'Invalid input! '
      end
    end
  else
    provider = providers[0] # default to OpenStack
  end

  if provider == 'danarchy'
    puts 'Need to implement setup for dAnarchy!'
  elsif provider == 'openstack'
    puts 'Adding a new OpenStack account!'
    print 'Enter a provider name for this account: '
    provider = gets.chomp
    cfg_openstack = DanarchySys::ConfigManager::OpenStack.new(provider, config)
    config = cfg_openstack.new_account_prompt
  elsif provider == 'aws'
    # Placeholder
    puts 'AWS not yet implemented!'
  end

  save(config_json, config)
  puts "Configuration has been saved to #{config_json}"
  puts "Copy any existing #{provider} SSH keys to: #{ssh_path}"
  config
end
providers() click to toggle source
# File lib/danarchy_sys/config_manager.rb, line 21
def self.providers
  ['openstack', 'danarchy'] # , 'aws']
end
save(config_file, param_hash) click to toggle source
# File lib/danarchy_sys/config_manager.rb, line 105
def self.save(config_file, param_hash)
  File.write(config_file, JSON.pretty_generate(param_hash))
end