bin/tl in testlab-0.3.1 vs bin/tl in testlab-0.4.0
- old
+ new
@@ -25,57 +25,71 @@
include TestLab::Utility::Misc
version TestLab::VERSION
program_desc %(A framework for building lightweight virtual infrastructure using LXC)
-program_long_desc %(Program Long Description)
+# program_long_desc %(Program Long Description)
sort_help :manually
default_command :help
+# LAB CREATE
+#############
desc 'Create the test lab'
command :create do |create|
create.action do |global_options,options,args|
@testlab.create
end
end
+# LAB DESTROY
+##############
desc 'Destroy the test lab'
command :destroy do |destroy|
destroy.action do |global_options,options,args|
@testlab.destroy
end
end
+# LAB ONLINE
+#############
desc 'Online the test lab'
command :up do |up|
up.action do |global_options,options,args|
@testlab.up
end
end
+# LAB OFFLINE
+##############
desc 'Offline the test lab'
command :down do |down|
down.action do |global_options,options,args|
@testlab.down
end
end
+# LAB SETUP
+############
desc 'Setup the test lab infrastructure'
command :setup do |setup|
setup.action do |global_options,options,args|
@testlab.setup
end
end
+# LAB TEARDOWN
+###############
desc 'Teardown the test lab infrastructure'
command :teardown do |teardown|
teardown.action do |global_options,options,args|
@testlab.teardown
end
end
+# LAB STATUS
+#############
desc 'Display information on the status of the test lab'
command :status do |status|
status.action do |global_options,options,args|
@testlab.ui.stdout.puts("\nNODES:".green.bold)
commands[:node].commands[:status].execute({}, {}, [])
@@ -86,18 +100,22 @@
@testlab.ui.stdout.puts("\nCONTAINERS:".green.bold)
commands[:container].commands[:status].execute({}, {}, [])
end
end
+# NODES
+########
desc 'Manage nodes'
arg_name 'Describe arguments to node here'
command :node do |c|
c.desc 'Node ID or Name'
c.arg_name 'node'
c.flag [:i, :id]
+ # NODE SSH
+ ###########
c.desc 'Open an SSH console to a node'
c.command :ssh do |ssh|
ssh.action do |global_options,options,args|
help_now!('id is required') if options[:id].nil?
@@ -106,19 +124,23 @@
node.ssh.console
end
end
+ # NODE STATUS
+ ##############
c.desc 'Display the status of node(s)'
- c.long_desc 'Displays the status of all nodes or a single node if supplied via the id parameter.'
+ c.long_desc 'Displays the status of all nodes or a single node if supplied via the ID parameter.'
c.command :status do |status|
status.action do |global_options, options, args|
if options[:id].nil?
+ # No ID supplied; show everything
ZTK::Report.new(:ui => @testlab.ui).spreadsheet(@testlab.nodes, TestLab::Node::STATUS_KEYS) do |node|
OpenStruct.new(node.status)
end
else
+ # ID supplied; show just that item
node = @testlab.nodes.select{ |c| c.id.to_sym == options[:id].to_sym }.first
node.nil? and raise TestLab::TestLabError, "We could not find the node you supplied!"
ZTK::Report.new(:ui => @testlab.ui).list(node, TestLab::Node::STATUS_KEYS) do |node|
OpenStruct.new(node.status)
@@ -127,27 +149,38 @@
end
end
end
+# NETWORKS
+###########
desc 'Manage networks'
arg_name 'Describe arguments to network here'
command :network do |c|
c.desc 'Network ID or Name'
c.arg_name 'network'
c.flag [:i, :id]
+ # NETWORK STATUS
+ #################
c.desc 'Display the status of network(s)'
- c.long_desc 'Displays the status of all networks or a single network if supplied via the id parameter.'
+ c.long_desc 'Displays the status of all networks or a single network if supplied via the ID parameter.'
c.command :status do |status|
status.action do |global_options, options, args|
if options[:id].nil?
- ZTK::Report.new(:ui => @testlab.ui).spreadsheet(@testlab.networks, TestLab::Network::STATUS_KEYS) do |network|
- OpenStruct.new(network.status)
+ # No ID supplied; show everything
+ networks = @testlab.networks.delete_if{|n| n.node.dead? }
+ if networks.count == 0
+ @testlab.ui.stderr.puts("You either have no networks defined or dead nodes!".yellow)
+ else
+ ZTK::Report.new(:ui => @testlab.ui).spreadsheet(networks, TestLab::Network::STATUS_KEYS) do |network|
+ OpenStruct.new(network.status)
+ end
end
else
+ # ID supplied; show just that item
network = @testlab.networks.select{ |c| c.id.to_sym == options[:id].to_sym }.first
network.nil? and raise TestLab::TestLabError, "We could not find the network you supplied!"
ZTK::Report.new(:ui => @testlab.ui).list(network, TestLab::Network::STATUS_KEYS) do |network|
OpenStruct.new(network.status)
@@ -156,18 +189,22 @@
end
end
end
+# CONTAINERS
+#############
desc 'Manage containers'
arg_name 'Describe arguments to container here'
command :container do |c|
c.desc 'Container ID or Name'
c.arg_name 'container'
c.flag [:i, :id]
+ # CONTAINER SSH
+ ################
c.desc 'Open an SSH console to a container'
c.command :ssh do |ssh|
ssh.action do |global_options, options, args|
help_now!('id is required') if options[:id].nil?
@@ -176,34 +213,111 @@
container.ssh.console
end
end
+ # CONTAINER STATUS
+ ###################
c.desc 'Display the status of container(s)'
- c.long_desc 'Displays the status of all containers or a single container if supplied via the id parameter.'
+ c.long_desc <<-EOF
+Displays the status of all containers or a single container if supplied via the ID parameter.
+EOF
c.command :status do |status|
status.action do |global_options, options, args|
if options[:id].nil?
- ZTK::Report.new(:ui => @testlab.ui).spreadsheet(@testlab.containers, TestLab::Container::STATUS_KEYS) do |container|
- OpenStruct.new(container.status)
+ # No ID supplied; show everything
+ containers = @testlab.containers.delete_if{ |c| c.node.dead? }
+ if containers.count == 0
+ @testlab.ui.stderr.puts("You either have no containers defined or dead nodes!".yellow)
+ else
+ ZTK::Report.new(:ui => @testlab.ui).spreadsheet(containers, TestLab::Container::STATUS_KEYS.reject{|k| k == :fqdn}) do |container|
+ OpenStruct.new(container.status.reject{|k,v| k == :fqdn})
+ end
end
else
+ # ID supplied; show just that item
container = @testlab.containers.select{ |c| c.id.to_sym == options[:id].to_sym }.first
container.nil? and raise TestLab::TestLabError, "We could not find the container you supplied!"
ZTK::Report.new(:ui => @testlab.ui).list(container, TestLab::Container::STATUS_KEYS) do |container|
OpenStruct.new(container.status)
end
end
end
end
+ # CONTAINER RECYCLE
+ ####################
+ c.desc 'Recycles a container'
+ c.long_desc <<-EOF
+Recycles a container. The container is taken through a series of state changes to ensure it is pristine.
+
+The containers is cycled in this order:
+
+Down -> Destroy -> Create -> Up
+EOF
+ c.command :recycle do |recycle|
+ recycle.action do |global_options, options, args|
+ if options[:id].nil?
+ help_now!('id is required') if options[:id].nil?
+ else
+ container = @testlab.containers.select{ |c| c.id.to_sym == options[:id].to_sym }.first
+ container.nil? and raise TestLab::TestLabError, "We could not find the container you supplied!"
+
+ container.teardown
+ container.setup
+ end
+ end
+ end
+
+ # CONTAINER SETUP
+ ####################
+ c.desc 'Setup a container'
+ c.long_desc <<-EOF
+Setup a container. The container is created, started and provisioned.
+EOF
+ c.command :setup do |setup|
+ setup.action do |global_options, options, args|
+ if options[:id].nil?
+ help_now!('id is required') if options[:id].nil?
+ else
+ container = @testlab.containers.select{ |c| c.id.to_sym == options[:id].to_sym }.first
+ container.nil? and raise TestLab::TestLabError, "We could not find the container you supplied!"
+
+ container.setup
+ end
+ end
+ end
+
+ # CONTAINER TEARDOWN
+ ####################
+ c.desc 'Teardown a container'
+ c.long_desc <<-EOF
+Teardown a container. The container is offlined and destroyed.
+EOF
+ c.command :teardown do |teardown|
+ teardown.action do |global_options, options, args|
+ if options[:id].nil?
+ help_now!('id is required') if options[:id].nil?
+ else
+ container = @testlab.containers.select{ |c| c.id.to_sym == options[:id].to_sym }.first
+ container.nil? and raise TestLab::TestLabError, "We could not find the container you supplied!"
+
+ container.teardown
+ end
+ end
+ end
+
end
+# ROUTES
+#########
desc 'Manage routes'
command :route do |c|
+ # ROUTE ADD
+ ############
c.desc 'Add routes to lab networks'
c.command :add do |add|
add.action do |global_options,options,args|
@testlab.nodes.each do |node|
node.route_setup(:add)
@@ -211,9 +325,11 @@
@testlab.ui.stdout.puts %x(netstat -nr | grep '#{node.ip}').strip
end
end
end
+ # ROUTE DEL
+ ############
c.desc 'Delete routes to lab networks'
c.command :del do |del|
del.action do |global_options,options,args|
@testlab.nodes.each do |node|
node.route_setup(:del)