some fixes
This commit is contained in:
parent
ddbdc80dd3
commit
5f813eed7a
@ -47,7 +47,9 @@ class Image < Handler
|
|||||||
def get_templates
|
def get_templates
|
||||||
bt = BootstrapTemplates.new(@host, self.options)
|
bt = BootstrapTemplates.new(@host, self.options)
|
||||||
bt.auth = self.auth
|
bt.auth = self.auth
|
||||||
return bt.list_handler(["templates", "list"]), bt.table
|
list = bt.list_handler(["templates", "list"])
|
||||||
|
return list, nil if list.empty?
|
||||||
|
return list, bt.table
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_handler
|
def create_handler
|
||||||
@ -74,11 +76,16 @@ class Image < Handler
|
|||||||
|
|
||||||
q["bootstrap_template"] = if options[:bootstrap_template].nil? and options[:no_bootstrap_template] == false
|
q["bootstrap_template"] = if options[:bootstrap_template].nil? and options[:no_bootstrap_template] == false
|
||||||
bt, bt_t = get_templates
|
bt, bt_t = get_templates
|
||||||
i = choose_number_from_list(I18n.t("handler.image.create.template"), bt, bt_t, -1)
|
if bt.empty?
|
||||||
if i == -1
|
puts I18n.t("handler.image.create.template_empty")
|
||||||
nil
|
nil
|
||||||
else
|
else
|
||||||
bt[i]
|
i = choose_number_from_list(I18n.t("handler.image.create.template"), bt, bt_t, -1)
|
||||||
|
if i == -1
|
||||||
|
nil
|
||||||
|
else
|
||||||
|
bt[i]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
module DevopsClient
|
module DevopsClient
|
||||||
VERSION = "2.1.33"
|
VERSION = "2.1.34"
|
||||||
end
|
end
|
||||||
|
|||||||
@ -53,6 +53,7 @@ en:
|
|||||||
create:
|
create:
|
||||||
ssh_user: "The ssh username"
|
ssh_user: "The ssh username"
|
||||||
template: "Bootstrap template or empty value"
|
template: "Bootstrap template or empty value"
|
||||||
|
template_empty: "No bootatrap template found, it will be used default template"
|
||||||
filter:
|
filter:
|
||||||
question:
|
question:
|
||||||
delete: "Are you sure to delete image filter(s) '%{name}'?"
|
delete: "Are you sure to delete image filter(s) '%{name}'?"
|
||||||
|
|||||||
@ -51,6 +51,7 @@ ru:
|
|||||||
create:
|
create:
|
||||||
ssh_user: "Имя пользоватлея ssh"
|
ssh_user: "Имя пользоватлея ssh"
|
||||||
template: "Шаблон загрузки или пустое значение"
|
template: "Шаблон загрузки или пустое значение"
|
||||||
|
template_empty: "Нет ни одного шаблона загрузки, будет использован шаблон по умолчанию"
|
||||||
filter:
|
filter:
|
||||||
question:
|
question:
|
||||||
delete: "Вы уверены, что хотите удалить фильтр(ы) образа '%{name}'?"
|
delete: "Вы уверены, что хотите удалить фильтр(ы) образа '%{name}'?"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
ruby "~>2"
|
ruby "2.0.0"
|
||||||
|
|
||||||
gem "thin", "~>1.5.1"
|
gem "thin", "~>1.5.1"
|
||||||
gem "mime-types", "~>1.25.1"
|
gem "mime-types", "~>1.25.1"
|
||||||
@ -12,6 +12,6 @@ gem "mixlib-shellout"
|
|||||||
gem "chef", ">=11"
|
gem "chef", ">=11"
|
||||||
gem "mongo"
|
gem "mongo"
|
||||||
gem "bson_ext"
|
gem "bson_ext"
|
||||||
gem "multi_json"
|
gem "multi_json", "1.7.8"
|
||||||
gem "rufus-scheduler", "2.0.24"
|
gem "rufus-scheduler", "2.0.24"
|
||||||
gem "sidekiq", "3.2.6"
|
gem "sidekiq", "3.2.6"
|
||||||
|
|||||||
@ -91,6 +91,30 @@ EOH
|
|||||||
return lline
|
return lline
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.knife_bootstrap out, ip, options
|
||||||
|
knife_stream(out, "bootstrap", options + [ ip ])
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.knife_stream out, cmd, options=[]
|
||||||
|
knife_cmd = "knife #{cmd} #{options.join(" ")}"
|
||||||
|
out << "\nExecuting '#{knife_cmd}' \n\n"
|
||||||
|
out.flush if out.respond_to?(:flush)
|
||||||
|
status = nil
|
||||||
|
IO.popen(knife_cmd + " 2>&1") do |o|
|
||||||
|
while line = o.gets do
|
||||||
|
out << line
|
||||||
|
out.flush if out.respond_to?(:flush)
|
||||||
|
end
|
||||||
|
o.close
|
||||||
|
status = $?.to_i
|
||||||
|
end
|
||||||
|
return status
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.set_run_list node, list
|
||||||
|
knife("node run_list set #{node} '#{list.join("','")}'")
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def self.get_config
|
def self.get_config
|
||||||
File.join(ENV["HOME"], ".chef", "knife.rb")
|
File.join(ENV["HOME"], ".chef", "knife.rb")
|
||||||
|
|||||||
@ -1,8 +1,34 @@
|
|||||||
require "commands/knife_commands"
|
require "commands/knife_commands"
|
||||||
|
require "commands/deploy"
|
||||||
require "db/exceptions/record_not_found"
|
require "db/exceptions/record_not_found"
|
||||||
|
|
||||||
module ServerCommands
|
module ServerCommands
|
||||||
|
|
||||||
|
include DeployCommands
|
||||||
|
|
||||||
|
def create_server_proc
|
||||||
|
lambda do |out, s, provider, mongo|
|
||||||
|
begin
|
||||||
|
out << "Create server...\n"
|
||||||
|
out.flush if out.respond_to?(:flush)
|
||||||
|
unless provider.create_server(s, out)
|
||||||
|
return 3
|
||||||
|
end
|
||||||
|
mongo.server_insert s
|
||||||
|
out.flush if out.respond_to?(:flush)
|
||||||
|
logger.info "Server with parameters: #{s.to_hash.inspect} is running"
|
||||||
|
key = mongo.key(s.key)
|
||||||
|
s.chef_node_name = provider.create_default_chef_node_name(s) if s.chef_node_name.nil?
|
||||||
|
return two_phase_bootstrap(s, out, provider, mongo, key.path, logger)
|
||||||
|
rescue IOError => e
|
||||||
|
logger.error e.message
|
||||||
|
logger.warn roll_back(s, provider)
|
||||||
|
mongo.server_delete s.id
|
||||||
|
return 5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def create_server_proc
|
def create_server_proc
|
||||||
lambda do |out, s, provider, mongo|
|
lambda do |out, s, provider, mongo|
|
||||||
begin
|
begin
|
||||||
@ -64,6 +90,45 @@ module ServerCommands
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def two_phase_bootstrap s, out, provider, mongo, cert_path, logger
|
||||||
|
out << "\n\nBootstrap..."
|
||||||
|
out.flush if out.respond_to?(:flush)
|
||||||
|
run_list = s.options[:run_list]
|
||||||
|
s.options[:run_list] = provider.run_list
|
||||||
|
out << "\nBootstrap with provider run list: #{s.options[:run_list].inspect}"
|
||||||
|
status = bootstrap(s, out, cert_path, logger)
|
||||||
|
out.flush if out.respond_to?(:flush)
|
||||||
|
if status == 0
|
||||||
|
mongo.server_set_chef_node_name s
|
||||||
|
logger.info "Server with id '#{s.id}' is bootstraped"
|
||||||
|
if check_server(s)
|
||||||
|
out << "Server #{s.chef_node_name} is created"
|
||||||
|
else
|
||||||
|
out << roll_back(s, provider)
|
||||||
|
mongo.server_delete s.id
|
||||||
|
return 5
|
||||||
|
end
|
||||||
|
out << "\n"
|
||||||
|
out.flush if out.respond_to?(:flush)
|
||||||
|
|
||||||
|
out << "\nAdd project run list: #{run_list.inspect}"
|
||||||
|
s.options[:run_list] += run_list
|
||||||
|
KnifeCommands.set_run_list(s.chef_node_name, s.options[:run_list])
|
||||||
|
status = deploy_server(out, s, cert_path)
|
||||||
|
if status != 0
|
||||||
|
msg = "Failed on chef-client with project run list, server with id '#{s.id}'"
|
||||||
|
logger.error msg
|
||||||
|
out << "\n" + msg + "\n"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
msg = "Failed while bootstraping server with id '#{s.id}'"
|
||||||
|
logger.error msg
|
||||||
|
out << "\n" + msg + "\n"
|
||||||
|
out << roll_back(s, provider)
|
||||||
|
mongo.server_delete s.id
|
||||||
|
end
|
||||||
|
return status
|
||||||
|
end
|
||||||
|
|
||||||
def extract_servers provider, project, env, params, user, mongo
|
def extract_servers provider, project, env, params, user, mongo
|
||||||
flavors = provider.flavors
|
flavors = provider.flavors
|
||||||
|
|||||||
@ -40,5 +40,5 @@ run Rack::URLMap.new({
|
|||||||
"#{config[:url_prefix]}/client" => Client.new(config),
|
"#{config[:url_prefix]}/client" => Client.new(config),
|
||||||
"#{config[:url_prefix]}/v2.0/report" => Report.new(config, "v2"),
|
"#{config[:url_prefix]}/v2.0/report" => Report.new(config, "v2"),
|
||||||
"#{config[:url_prefix]}/sidekiq" => Sidekiq::Web,
|
"#{config[:url_prefix]}/sidekiq" => Sidekiq::Web,
|
||||||
"#{config[:url_prefix]}/version" => "hello"
|
"#{config[:url_prefix]}/version" => DevopsVersion.new
|
||||||
})
|
})
|
||||||
|
|||||||
@ -29,6 +29,7 @@ class DevopsService < Sinatra::Base
|
|||||||
[:keys_dir, :scripts_dir].each {|key| d = @@config[key]; FileUtils.mkdir_p(d) unless File.exists?(d) }
|
[:keys_dir, :scripts_dir].each {|key| d = @@config[key]; FileUtils.mkdir_p(d) unless File.exists?(d) }
|
||||||
mongo = DevopsService.mongo
|
mongo = DevopsService.mongo
|
||||||
mongo.create_root_user
|
mongo.create_root_user
|
||||||
|
::Provider::ProviderFactory.init(config)
|
||||||
::Provider::ProviderFactory.all.each do |p|
|
::Provider::ProviderFactory.all.each do |p|
|
||||||
next if p.certificate_path.nil?
|
next if p.certificate_path.nil?
|
||||||
begin
|
begin
|
||||||
|
|||||||
@ -3,7 +3,7 @@ require "fog"
|
|||||||
module Provider
|
module Provider
|
||||||
class BaseProvider
|
class BaseProvider
|
||||||
|
|
||||||
attr_accessor :ssh_key, :certificate_path, :connection_options
|
attr_accessor :ssh_key, :certificate_path, :connection_options, :run_list
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def connection_compute options
|
def connection_compute options
|
||||||
|
|||||||
@ -17,6 +17,7 @@ module Provider
|
|||||||
:aws_secret_access_key => config[:aws_secret_access_key]
|
:aws_secret_access_key => config[:aws_secret_access_key]
|
||||||
}
|
}
|
||||||
self.availability_zone = config[:aws_availability_zone] || "us-east-1a"
|
self.availability_zone = config[:aws_availability_zone] || "us-east-1a"
|
||||||
|
self.run_list = config[:aws_integration_run_list] || []
|
||||||
end
|
end
|
||||||
|
|
||||||
def configured?
|
def configured?
|
||||||
@ -189,6 +190,7 @@ module Provider
|
|||||||
def convert_groups list
|
def convert_groups list
|
||||||
res = {}
|
res = {}
|
||||||
list.each do |g|
|
list.each do |g|
|
||||||
|
next if g["groupName"].nil?
|
||||||
res[g["groupName"]] = {
|
res[g["groupName"]] = {
|
||||||
"description" => g["groupDescription"],
|
"description" => g["groupDescription"],
|
||||||
"id" => g["groupId"]
|
"id" => g["groupId"]
|
||||||
|
|||||||
@ -16,6 +16,7 @@ module Provider
|
|||||||
:openstack_auth_url => config[:openstack_auth_url],
|
:openstack_auth_url => config[:openstack_auth_url],
|
||||||
:openstack_tenant => config[:openstack_tenant]
|
:openstack_tenant => config[:openstack_tenant]
|
||||||
}
|
}
|
||||||
|
self.run_list = config[:openstack_integration_run_list] || []
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns 'true' if all parameters defined
|
# Returns 'true' if all parameters defined
|
||||||
|
|||||||
@ -24,10 +24,15 @@ module Provider
|
|||||||
begin
|
begin
|
||||||
require "providers/#{p}"
|
require "providers/#{p}"
|
||||||
o = Provider.const_get(p.capitalize).new(conf)
|
o = Provider.const_get(p.capitalize).new(conf)
|
||||||
@@providers[p] = o if o.configured?
|
if o.configured?
|
||||||
|
@@providers[p] = o
|
||||||
|
puts "Provider '#{p}' has been loaded"
|
||||||
|
end
|
||||||
rescue => e
|
rescue => e
|
||||||
|
puts "Error while loading provider '#{p}': " + e.message
|
||||||
next
|
next
|
||||||
rescue LoadError
|
rescue LoadError => e
|
||||||
|
puts "Can not load provider '#{p}': " + e.message
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user