class Gogetit::CLI

Attributes

result[RW]
config[R]
libvirt[R]
logger[R]
lxd[R]
providers[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/gogetit/cli.rb, line 18
def initialize(*args)
  super
  @config = Gogetit.config
  @logger = Gogetit.logger
  @lxd = Gogetit.lxd
  @libvirt = Gogetit.libvirt
  @providers = {
    lxd: lxd,
    libvirt: libvirt
  }
end

Public Instance Methods

create(name) click to toggle source
# File lib/gogetit/cli.rb, line 83
def create(name)
  abort(":vlans and :ipaddresses can not be set together.") \
    if options[:vlans] and options[:ipaddresses]
  abort(":chef and :zero can not be set together.") \
    if options[:chef] and options[:zero]
  abort("when :'no-maas', the network configuration have to be set by :file.") \
    if options[:'no-maas'] and (options[:vlans] or options[:ipaddresses])
  abort(":'no-maas' and :file have to be set together.") \
    if options[:'no-maas'] ^ !!options[:file]
  abort(":distro has to be set only with libvirt provider.") \
    if options[:distro] and options[:provider] == 'lxd'
  abort(":alias has to be set with lxd provider.") \
    if options[:alias] and options[:provider] == 'libvirt'
  abort(":spec has to be set only with libvirt provider.") \
    if options[:spec] and options[:provider] == 'lxd'

  case options[:provider]
  when 'lxd'
    Gogetit::CLI.result = lxd.create(name, options)
  when 'libvirt'
    Gogetit::CLI.result = libvirt.create(name, options)
  else
    abort('Invalid argument entered.')
  end

  # post-tasks
  if options[:chef]
    knife_bootstrap_chef(name, options[:provider], config)
    update_databags(config)
  elsif options[:zero]
    knife_bootstrap_zero(name, options[:provider], config)
  end
end
deploy(name) click to toggle source
# File lib/gogetit/cli.rb, line 153
def deploy(name)
  abort(":chef and :zero can not be set together.") \
    if options[:chef] and options[:zero]

  Gogetit::CLI.result = libvirt.deploy(name, options)

  # post-tasks
  if options[:chef]
    knife_bootstrap(name, options[:provider], config)
    update_databags(config)
  elsif options[:zero]
    knife_bootstrap_zero(name, options[:provider], config)
  end
end
destroy(name) click to toggle source
# File lib/gogetit/cli.rb, line 122
def destroy(name)
  abort(":chef and :zero can not be set together.") \
    if options[:chef] and options[:zero]

  provider = get_provider_of(name, providers)
  if provider
    case provider
    when 'lxd'
      Gogetit::CLI.result = lxd.destroy(name)
    when 'libvirt'
      Gogetit::CLI.result = libvirt.destroy(name)
    else
      abort('Invalid argument entered.')
    end
  end
  # post-tasks
  if options[:chef]
    knife_remove(name, options)
    update_databags(config)
  elsif options[:zero]
    knife_remove(name, options)
  end
end
list() click to toggle source
# File lib/gogetit/cli.rb, line 33
def list
  case options[:out]
  when 'custom'
    Gogetit.list_all_types
  when 'all'
    config[:lxd][:nodes].each do |node|
      puts "Listing LXD containers on #{node[:url]}.."
      system("lxc list #{node[:name]}:")
    end
    puts "Listing KVM domains on #{config[:libvirt][:nodes][0][:url]}.."
    system("virsh -c #{config[:libvirt][:nodes][0][:url]} list --all")
  when ''
    puts "Listing LXD containers on #{config[:lxd][:nodes][0][:url]}.."
    system("lxc list #{config[:lxd][:nodes][0][:name]}:")
    puts ''
    puts "Listing KVM domains on #{config[:libvirt][:nodes][0][:url]}.."
    system("virsh -c #{config[:libvirt][:nodes][0][:url]} list --all")
  else
    puts "Invalid option or command"
  end
end
rebuild(name) click to toggle source
# File lib/gogetit/cli.rb, line 195
def rebuild(name)
  abort(":chef and :zero can not be set together.") \
    if options[:chef] and options[:zero]

  provider = get_provider_of(name, providers)
  if provider
    case provider
    when 'lxd'
      1.upto(100) { print '_' }; puts
      puts "Destroying #{name}.."
      invoke :destroy, [name]
      alias_name = YAML.load(
        Gogetit::CLI.result[:info][:config][:"user.user-data"]
      )['source_image_alias']
      1.upto(100) { print '_' }; puts
      puts "Creating #{name}.."
      invoke :create, [name], :alias => alias_name
    when 'libvirt'
      invoke :release, [name]
      distro_name = Gogetit::CLI.result[:info][:machine]['distro_series']
      invoke :deploy, [name], :distro => distro_name
    else
      abort('Invalid argument entered.')
    end
  end
  # post-tasks
  if options[:chef]
    knife_remove(name) if options[:chef]
    update_databags(config)
  end
end
release(name) click to toggle source
# File lib/gogetit/cli.rb, line 174
def release(name)
  abort(":chef and :zero can not be set together.") \
    if options[:chef] and options[:zero]

  Gogetit::CLI.result = libvirt.release(name)

  # post-tasks
  if options[:chef]
    knife_remove(name, options)
    update_databags(config)
  elsif options[:zero]
    knife_remove(name, options)
  end
end