Sha256: 386c9ac5f9a0e0ea6d307e687226a7bd18c0dd33e579ab6f0f624622e5919524

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

class Stack < CloudstackCli::Base
	include CloudstackCli::Helper

	desc "create STACKFILE", "create a stack of servers"
  def create(stackfile)
  	stack = parse_stackfile(stackfile)
    say "Create stack #{stack["name"]}..."
    threads = []
    stack["servers"].each do |server|
      server["name"].split(', ').each_with_index do |name, i|
        threads << Thread.new(i) {
          bootstrap_server(
            name: name,
            displayname: server["decription"],
            zone: server["zone"] || stack["zone"],
            template: server["template"],
            iso: server["iso"] ,
            offering: server["offering"],
            networks: server["networks"] ? server["networks"].split(', ') : nil,
            port_rules: server["port_rules"] ? server["port_rules"].split(', ') : nil,
            project: stack["project"],
            disk_offering: server["disk_offering"],
            disk_size: server["disk_size"],
            group: server["group"] || stack["group"],
            keypair: server["keypair"] || stack["keypair"]
          )
        }
      end
    end
    threads.each {|t| t.join }
  end

  desc "destroy STACKFILE", "destroy a stack of servers"
  option :force,
    description: "destroy without asking",
    type: :boolean,
    default: false,
    aliases: '-f'
  def destroy(stackfile)
    stack = parse_stackfile(stackfile)
    servers = []
    server = stack["servers"].collect do |server|
      server["name"].split(', ').each {|name| servers << name}
    end
    say "Destroy stack #{stack["name"]}...", :yellow
    puts
    invoke "server:destroy", servers, project: stack["project"], force: options[:force]
  end

  no_commands do
    def parse_stackfile(stackfile)
      begin
        return JSON.parse File.read(stackfile)
      rescue SystemCallError
        $stderr.puts "Can't find the stack file #{stackfile}."
      rescue JSON::ParserError => e
        $stderr.puts "Error parsing json file.\n#{e.message}."
        exit
      end
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cloudstack-cli-0.3.1 lib/cloudstack-cli/commands/stack.rb
cloudstack-cli-0.2.2 lib/cloudstack-cli/commands/stack.rb