285 lines
9.6 KiB
Ruby
285 lines
9.6 KiB
Ruby
require "./base_test"
|
|
require "json"
|
|
|
|
class CreateServer < BaseTest
|
|
TITLE = "Create server tests. "
|
|
|
|
def run
|
|
openstack = {
|
|
:name => "openstack",
|
|
:image => "36dc7618-4178-4e29-be43-286fbfe90f50",
|
|
:flavor => "m1.small",
|
|
:ssh_user => "root",
|
|
:server_name => "test_create_server_openstack",
|
|
:states => {:pause => "PAUSED", :unpause => "ACTIVE"}
|
|
}
|
|
ec2 = {
|
|
:name => "ec2",
|
|
:image => "ami-83e4bcea",
|
|
:flavor => "m1.small",
|
|
:ssh_user => "ec2-user",
|
|
:server_name => "test_create_server_ec2",
|
|
:states => {:pause => "stopped", :unpause => "running"}
|
|
}
|
|
|
|
project = {
|
|
"name" => "project_test",
|
|
"deploy_envs" => [
|
|
{
|
|
"flavor" => openstack[:flavor],
|
|
"groups" => [
|
|
"default"
|
|
],
|
|
"identifier" => "openstack",
|
|
"image" => openstack[:image],
|
|
"provider" => "openstack",
|
|
"run_list" => [
|
|
"role[project_test_openstack]"
|
|
],
|
|
"subnets" => [ "private" ],
|
|
"users" => [ "user_for_testing" ],
|
|
"expires" => nil
|
|
},
|
|
{
|
|
"flavor" => ec2[:flavor],
|
|
"groups" => [
|
|
"default"
|
|
],
|
|
"identifier" => "ec2",
|
|
"image" => ec2[:image],
|
|
"provider" => "ec2",
|
|
"run_list" => [
|
|
"role[project_test_ec2]"
|
|
],
|
|
"subnets" => [],
|
|
"users" => [ "user_for_testing" ],
|
|
"expires" => nil
|
|
}
|
|
|
|
]
|
|
}
|
|
|
|
self.config = CONFIGS[0]
|
|
|
|
prepare openstack
|
|
prepare ec2
|
|
|
|
env_os = project["deploy_envs"][0]
|
|
env_ec2 = project["deploy_envs"][1]
|
|
self.title = TITLE + "Create project '#{project["name"]}'"
|
|
run_tests [
|
|
"project create #{project["name"]} --groups #{env_os["groups"].join(",")} --deploy_env #{env_os["identifier"]} --subnets #{env_os["subnets"].join(",")} --flavor #{env_os["flavor"]} --image #{env_os["image"]} --run_list role[#{project["name"]}_#{env_os["identifier"]}] --users #{env_os["users"].join(",")} --provider openstack -y --no_expires",
|
|
"project create #{project["name"]} --groups #{env_ec2["groups"].join(",")} --deploy_env #{env_ec2["identifier"]} --flavor #{env_ec2["flavor"]} --image #{env_ec2["image"]} --run_list role[#{project["name"]}_#{env_ec2["identifier"]}] --users #{env_ec2["users"].join(",")} --provider ec2 -y --no_expires"
|
|
]
|
|
|
|
self.title = TITLE + "Project list"
|
|
run_test_with_block "project list --format json" do |l|
|
|
projects = JSON.parse(l)
|
|
projects.include? project["name"]
|
|
end
|
|
|
|
self.title = TITLE + "Show project '#{project["name"]}'"
|
|
run_test_with_block "project show #{project["name"]} --format json" do |p|
|
|
pr = JSON.parse(p)
|
|
name = (project["name"] == pr["name"])
|
|
envs = (project["deploy_envs"].size == pr["deploy_envs"].size)
|
|
o = pr["deploy_envs"].detect{|e| e["identifier"] == "openstack"}
|
|
po = project["deploy_envs"][0]
|
|
e = pr["deploy_envs"].detect{|e| e["identifier"] == "ec2"}
|
|
pe = project["deploy_envs"][1]
|
|
unless name
|
|
puts "Project name is not a '#{project["name"]}'"
|
|
end
|
|
unless envs
|
|
puts "Project environments not equals #{project["deploy_envs"].size}"
|
|
end
|
|
name and envs and check_envs(po, o) and check_envs(pe, e)
|
|
end
|
|
|
|
self.title = TITLE + "Add user 'root' to project '#{project["name"]}'"
|
|
run_tests [ "project user add #{project["name"]} root" ]
|
|
|
|
self.title = TITLE + "Show project '#{project["name"]}' with user 'root'"
|
|
run_test_with_block "project show #{project["name"]} --format json" do |p|
|
|
pr = JSON.parse(p)
|
|
envs = true
|
|
pr["deploy_envs"].each {|e| envs = (envs and e["users"].include?("root"))}
|
|
envs
|
|
end
|
|
|
|
self.title = TITLE + "Delete user 'root' from project '#{project["name"]}'"
|
|
run_tests [ "project user delete #{project["name"]} root -y" ]
|
|
|
|
self.title = TITLE + "Show project '#{project["name"]}' without user 'root'"
|
|
run_test_with_block "project show #{project["name"]} --format json" do |p|
|
|
pr = JSON.parse(p)
|
|
envs = true
|
|
pr["deploy_envs"].each {|e| envs = (envs and !e["users"].include?("root"))}
|
|
envs
|
|
end
|
|
|
|
create_server project["name"], env_os["identifier"], openstack
|
|
create_server project["name"], env_ec2["identifier"], ec2
|
|
|
|
self.title = TITLE + "Delete project '#{project["name"]}'"
|
|
run_tests [ "project delete #{project["name"]} -y" ]
|
|
|
|
clear openstack
|
|
clear ec2
|
|
|
|
end
|
|
|
|
def check_envs origin, created
|
|
r = true
|
|
%w(flavor groups identifier image provider run_list subnets users expires).each do |key|
|
|
flag = (origin[key] == created[key])
|
|
unless flag
|
|
puts "Environments params '#{key}' not equals ('#{origin[key].inspect}' and '#{created[key].inspect}')"
|
|
end
|
|
r = r and flag
|
|
end
|
|
r
|
|
end
|
|
|
|
def prepare conf
|
|
name = conf[:name]
|
|
self.title = TITLE + "Check #{name} flavor"
|
|
run_test_with_block "flavor list #{name} --format json" do |f|
|
|
flavors = JSON.parse(f)
|
|
!flavors.detect{|o| o["id"] == conf[:flavor]}.nil?
|
|
end
|
|
|
|
image_in_filter = false
|
|
self.title = TITLE + "Check #{name} filter"
|
|
run_test_with_block "filter image list #{name} --format json" do |i|
|
|
images = JSON.parse(i)
|
|
image_in_filter = !images.index(conf[:image]).nil?
|
|
true
|
|
end
|
|
|
|
if image_in_filter
|
|
puts_warn "Image '#{conf[:image]}' for '#{name}' already in filter"
|
|
else
|
|
self.title = TITLE + "Add #{name} filter"
|
|
run_tests [ "filter image add #{name} #{conf[:image]}" ]
|
|
end
|
|
|
|
image_created = false
|
|
self.title = TITLE + "Check image for #{name}"
|
|
run_test_with_block "image list #{name} --format json" do |s|
|
|
images = JSON.parse s
|
|
image_created = !images.detect{|i| i["id"] == conf[:image]}.nil?
|
|
true
|
|
end
|
|
|
|
if image_created
|
|
puts_warn "Image '#{conf[:image]}' for '#{name}' already created"
|
|
else
|
|
self.title = TITLE + "Create image for #{name}"
|
|
run_tests [ "image create --image #{conf[:image]} --ssh_user #{conf[:ssh_user]} --provider #{name} --no_bootstrap_template -y" ]
|
|
end
|
|
|
|
end
|
|
|
|
def create_server project, env, conf
|
|
|
|
self.title = TITLE + "Create server '#{conf[:server_name]}'"
|
|
run_tests [ "server create #{project} #{env} -N #{conf[:server_name]}" ]
|
|
|
|
self.title = TITLE + "Is server '#{conf[:server_name]}' created"
|
|
run_test_with_block "server list --format json" do |l|
|
|
servers = JSON.parse l
|
|
!servers.detect{|s| s["chef_node_name"] == conf[:server_name].to_s }.nil?
|
|
end
|
|
|
|
self.title = TITLE + "Pause server '#{conf[:server_name]}'"
|
|
run_tests [ "server pause #{conf[:server_name]}" ]
|
|
delay = (conf[:name] == "openstack" ? 5 : 90)
|
|
puts "Sleeping for #{delay} seconds"
|
|
sleep(delay)
|
|
|
|
self.title = TITLE + "Check server '#{conf[:server_name]}' state"
|
|
run_test_with_block "server list #{conf[:name]} --format json" do |s|
|
|
servers = JSON.parse s
|
|
state = servers.detect{|o| o["name"] == conf[:server_name]}["state"]
|
|
if state == conf[:states][:pause]
|
|
true
|
|
else
|
|
puts_error "State should be '#{conf[:states][:pause]}' but it is '#{state}'"
|
|
false
|
|
end
|
|
end
|
|
|
|
self.title = TITLE + "Unpause server '#{conf[:server_name]}'"
|
|
run_tests [ "server unpause #{conf[:server_name]}" ]
|
|
delay = (conf[:name] == "openstack" ? 5 : 90)
|
|
puts "Sleeping for #{delay} seconds"
|
|
sleep(delay)
|
|
|
|
self.title = TITLE + "Check server '#{conf[:server_name]}' state"
|
|
run_test_with_block "server list #{conf[:name]} --format json" do |s|
|
|
servers = JSON.parse s
|
|
state = servers.detect{|o| o["name"] == conf[:server_name]}["state"]
|
|
if state == conf[:states][:unpause]
|
|
true
|
|
else
|
|
puts_error "State should be '#{conf[:states][:unpause]}' but it is '#{state}'"
|
|
false
|
|
end
|
|
end
|
|
|
|
tag = "tag_" + conf[:name]
|
|
self.title = TITLE + "Add tag '#{tag}' to server '#{conf[:server_name]}'"
|
|
run_tests [
|
|
"tag create #{conf[:server_name]} #{tag}",
|
|
"tag create #{conf[:server_name]} #{tag}"
|
|
]
|
|
self.title = TITLE + "Check tag '#{tag}' for server '#{conf[:server_name]}'"
|
|
run_test_with_block "tag list #{conf[:server_name]} --format json" do |t|
|
|
JSON.parse(t).include?(tag)
|
|
end
|
|
|
|
tag2 = tag + "_2"
|
|
self.title = TITLE + "Check deploy with tag '#{tag2}' for server '#{conf[:server_name]}'"
|
|
run_tests ["deploy #{conf[:server_name]} -t #{tag2}"]
|
|
|
|
self.title = TITLE + "Check tag '#{tag}' for server '#{conf[:server_name]}'"
|
|
run_test_with_block "tag list #{conf[:server_name]} --format json" do |t|
|
|
JSON.parse(t).include?(tag)
|
|
!JSON.parse(t).include?(tag2)
|
|
end
|
|
|
|
self.title = TITLE + "Delete tag '#{tag}' from server '#{conf[:server_name]}'"
|
|
run_tests [
|
|
"tag delete #{conf[:server_name]} #{tag} -y",
|
|
"tag delete #{conf[:server_name]} #{tag} -y"
|
|
]
|
|
|
|
self.title = TITLE + "Delete server '#{conf[:server_name]}'"
|
|
run_tests [ "server delete #{conf[:server_name]} -y" ]
|
|
|
|
end
|
|
|
|
def clear conf
|
|
name = conf[:name]
|
|
self.title = TITLE + "Delete image for #{name}"
|
|
run_tests [ "image delete #{conf[:image]} -y" ]
|
|
|
|
self.title = TITLE + "Check image for #{name}"
|
|
run_test_with_block "image list #{name} --format json" do |s|
|
|
images = JSON.parse s
|
|
images.detect{|i| i["id"] == conf[:image]}.nil?
|
|
end
|
|
|
|
self.title = TITLE + "Delete #{name} filter"
|
|
run_tests [ "filter image delete #{name} #{conf[:image]} -y" ]
|
|
|
|
self.title = TITLE + "Check #{name} filter"
|
|
run_test_with_block "filter image list #{name} --format json" do |i|
|
|
images = JSON.parse(i)
|
|
images.index(conf[:image]).nil?
|
|
end
|
|
end
|
|
|
|
end
|