key, tag, bootstrap_template
This commit is contained in:
parent
31f1fd5e2b
commit
1555258d31
@ -1,18 +1,12 @@
|
||||
require "commands/bootstrap_templates"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Handler
|
||||
class BootstrapTemplates
|
||||
extend BootstrapTemplatesCommands
|
||||
|
||||
def self.get_bootstrap_templates
|
||||
lambda {
|
||||
check_privileges("templates", "r")
|
||||
# broadcast(:cancel_order_failed, "hello")
|
||||
json BootstrapTemplates.get_templates
|
||||
}
|
||||
end
|
||||
include BootstrapTemplatesCommands
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,56 +1,41 @@
|
||||
require "db/mongo/models/key"
|
||||
require "fileutils"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Handler
|
||||
class Key
|
||||
|
||||
def self.get_keys
|
||||
lambda {
|
||||
check_privileges("key", "r")
|
||||
keys = settings.mongo.keys.map {|i| i.to_hash}
|
||||
def keys
|
||||
keys = Devops::DB.connector.keys.map {|i| i.to_hash}
|
||||
keys.each {|k| k.delete("path")} # We should not return path to the key
|
||||
json keys
|
||||
}
|
||||
end
|
||||
|
||||
def self.create_key
|
||||
lambda {
|
||||
check_privileges("key", "w")
|
||||
key = create_object_from_json_body
|
||||
fname = check_filename(key["file_name"], "Parameter 'file_name' must be a not empty string")
|
||||
kname = check_string(key["key_name"], "Parameter 'key_name' should be a not empty string")
|
||||
content = check_string(key["content"], "Parameter 'content' should be a not empty string")
|
||||
file_name = File.join(settings.keys_dir, fname)
|
||||
halt(400, "File '#{fname}' already exist") if File.exists?(file_name)
|
||||
def create body, file_name
|
||||
File.open(file_name, "w") do |f|
|
||||
f.write(content)
|
||||
f.write(body["content"])
|
||||
f.chmod(0400)
|
||||
end
|
||||
|
||||
key = Devops::Model::Key.new({"path" => file_name, "id" => kname})
|
||||
settings.mongo.key_insert key
|
||||
create_response("Created", nil, 201)
|
||||
}
|
||||
key = Devops::Model::Key.new({"path" => file_name, "id" => body["key_name"]})
|
||||
Devops::DB.connector.key_insert key
|
||||
end
|
||||
|
||||
def self.delete_key
|
||||
lambda {
|
||||
check_privileges("key", "w")
|
||||
servers = settings.mongo.servers_by_key params[:key]
|
||||
def delete key_id
|
||||
mongo = Devops::DB.connector
|
||||
servers = mongo.servers_by_key key_id
|
||||
unless servers.empty?
|
||||
s_str = servers.map{|s| s.id}.join(", ")
|
||||
raise DependencyError.new "Deleting is forbidden: Key is used in servers: #{s_str}"
|
||||
end
|
||||
|
||||
k = settings.mongo.key params[:key]
|
||||
k = mongo.key key_id
|
||||
begin
|
||||
FileUtils.rm(k.path)
|
||||
rescue
|
||||
logger.error "Missing key file for #{params[:key]} - #{k.filename}"
|
||||
logger.error "Missing key file for #{key_id} - #{k.filename}"
|
||||
end
|
||||
r = settings.mongo.key_delete params[:key]
|
||||
return [500, r["err"].inspect] unless r["err"].nil?
|
||||
create_response("Key '#{params[:key]}' removed")
|
||||
}
|
||||
mongo.key_delete key_id
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -14,7 +14,7 @@ require "workers/create_server_worker"
|
||||
require "workers/bootstrap_worker"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Handler
|
||||
class Server
|
||||
|
||||
@ -24,32 +24,16 @@ module Devops
|
||||
|
||||
scheduler = Rufus::Scheduler.new
|
||||
|
||||
def self.get_servers
|
||||
lambda {
|
||||
check_privileges("server", "r")
|
||||
fields = []
|
||||
if params.key?("fields") and params["fields"].is_a?(Array)
|
||||
Devops::Model::Server.fields.each do |k|
|
||||
fields.push k if params["fields"].include?(k)
|
||||
end
|
||||
end
|
||||
reserved = (params.key?("reserved") ? true : nil)
|
||||
json settings.mongo.servers(nil, nil, nil, reserved, fields).map {|s| s.to_hash}
|
||||
}
|
||||
def servers fields, reserved
|
||||
Devops::DB.connector.servers(nil, nil, nil, reserved, fields).map {|s| s.to_hash}
|
||||
end
|
||||
|
||||
def self.get_chef_servers
|
||||
lambda {
|
||||
check_privileges("server", "r")
|
||||
json KnifeCommands.chef_node_list
|
||||
}
|
||||
def chef_servers
|
||||
KnifeCommands.chef_node_list
|
||||
end
|
||||
|
||||
def self.get_provider_servers
|
||||
lambda {
|
||||
check_privileges("server", "r")
|
||||
json ::Provider::ProviderFactory.get(params[:provider]).servers
|
||||
}
|
||||
def provider_servers provider
|
||||
::Provider::ProviderFactory.get(provider).servers
|
||||
end
|
||||
|
||||
def self.get_server
|
||||
|
||||
@ -1,48 +1,31 @@
|
||||
require "commands/knife_commands"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Handler
|
||||
class Tag
|
||||
|
||||
def self.get_tags
|
||||
lambda {
|
||||
check_privileges("server", "r")
|
||||
server = settings.mongo.server_by_chef_node_name(params[:node_name])
|
||||
halt_response("No servers found for name '#{params[:node_name]}'", 404) if server.nil?
|
||||
chef_node_name = server.chef_node_name
|
||||
json(KnifeCommands.tags_list(chef_node_name))
|
||||
}
|
||||
def initialize node_name
|
||||
@node_name = node_name
|
||||
@server = Devops::DB.connector.server_by_chef_node_name(@node_name)
|
||||
#TODO: raise
|
||||
halt_response("No servers found for name '#{@node_name}'", 404) if @server.nil?
|
||||
end
|
||||
|
||||
def self.set_tags
|
||||
lambda {
|
||||
check_privileges("server", "w")
|
||||
tags = create_object_from_json_body(Array)
|
||||
check_array(tags, "Request body should be a not empty array of strings")
|
||||
server = settings.mongo.server_by_chef_node_name(params[:node_name])
|
||||
halt_response("No servers found for name '#{params[:node_name]}'", 404) if server.nil?
|
||||
chef_node_name = server.chef_node_name
|
||||
def tags
|
||||
KnifeCommands.tags_list(@node_name)
|
||||
end
|
||||
|
||||
def set_tags tags
|
||||
tagsStr = tags.join(" ")
|
||||
cmd = KnifeCommands.tags_create(chef_node_name, tagsStr)
|
||||
halt_response("Error: Cannot add tags #{tagsStr} to server #{chef_node_name}", 500) unless cmd[1]
|
||||
create_response("Set tags for #{chef_node_name}: #{tagsStr}")
|
||||
}
|
||||
cmd = KnifeCommands.tags_create(@node_name, tagsStr)
|
||||
halt_response("Error: Cannot add tags #{tagsStr} to server #{@node_name}", 500) unless cmd[1]
|
||||
end
|
||||
|
||||
def self.unset_tags
|
||||
lambda {
|
||||
check_privileges("server", "w")
|
||||
tags = create_object_from_json_body(Array)
|
||||
check_array(tags, "Request body should be a not empty array of strings")
|
||||
server = settings.mongo.server_by_chef_node_name(params[:node_name])
|
||||
halt_response("No servers found for name '#{params[:node_name]}'", 404) if server.nil?
|
||||
chef_node_name = server.chef_node_name
|
||||
tagsStr = tags.join(" ")
|
||||
cmd = KnifeCommands.tags_delete(chef_node_name, tagsStr)
|
||||
halt_response("Cannot delete tags #{tagsStr} from server #{chef_node_name}: #{cmd[0]}", 500) unless cmd[1]
|
||||
create_response("Deleted tags for #{chef_node_name}: #{tagsStr}")
|
||||
}
|
||||
cmd = KnifeCommands.tags_delete(@node_name, tagsStr)
|
||||
halt_response("Cannot delete tags #{tagsStr} from server #{@node_name}: #{cmd[0]}", 500) unless cmd[1]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Routes
|
||||
module BootstrapTemplatesRoutes
|
||||
|
||||
@ -18,7 +18,10 @@ module Devops
|
||||
# [
|
||||
# "omnibus"
|
||||
# ]
|
||||
app.get_with_headers "/templates", :headers => [:accept], &Devops::Version2_0::Handler::BootstrapTemplates.get_bootstrap_templates
|
||||
app.get_with_headers "/templates", :headers => [:accept] do
|
||||
check_privileges("templates", "r")
|
||||
json Devops::API2_0::Handler::BootstrapTemplates.new.get_templates
|
||||
end
|
||||
|
||||
puts "Bootstrap templates routes initialized"
|
||||
end
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
require "json"
|
||||
require "db/mongo/models/key"
|
||||
require "fileutils"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Routes
|
||||
module KeyRoutes
|
||||
|
||||
@ -22,7 +20,10 @@ module Devops
|
||||
# "id": "devops"
|
||||
# }
|
||||
# ]
|
||||
app.get_with_headers "/keys", :headers => [:accept], &Devops::Version2_0::Handler::Key.get_keys
|
||||
app.get_with_headers "/keys", :headers => [:accept] do
|
||||
check_privileges("key", "r")
|
||||
json Devops::API2_0::Handler::Key.new.keys
|
||||
end
|
||||
|
||||
# Create ssh key on devops server
|
||||
#
|
||||
@ -40,7 +41,17 @@ module Devops
|
||||
#
|
||||
# * *Returns* :
|
||||
# 201 - Created
|
||||
app.post_with_headers "/key", :headers => [:accept, :content_type], &Devops::Version2_0::Handler::Key.create_key
|
||||
app.post_with_headers "/key", :headers => [:accept, :content_type] do
|
||||
check_privileges("key", "w")
|
||||
key = create_object_from_json_body
|
||||
fname = check_filename(key["file_name"], "Parameter 'file_name' must be a not empty string")
|
||||
kname = check_string(key["key_name"], "Parameter 'key_name' should be a not empty string")
|
||||
content = check_string(key["content"], "Parameter 'content' should be a not empty string")
|
||||
file_name = File.join(settings.keys_dir, fname)
|
||||
halt(400, "File '#{fname}' already exist") if File.exists?(file_name)
|
||||
Devops::API2_0::Handler::Key.new.create(key, file_name)
|
||||
create_response("Created", nil, 201)
|
||||
end
|
||||
|
||||
# Delete ssh key from devops server
|
||||
#
|
||||
@ -51,7 +62,27 @@ module Devops
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
app.delete_with_headers "/key/:key", :headers => [:accept], &Devops::Version2_0::Handler::Key.delete_key
|
||||
app.delete_with_headers "/key/:key", :headers => [:accept] do
|
||||
check_privileges("key", "w")
|
||||
servers = settings.mongo.servers_by_key params[:key]
|
||||
unless servers.empty?
|
||||
s_str = servers.map{|s| s.id}.join(", ")
|
||||
raise DependencyError.new "Deleting is forbidden: Key is used in servers: #{s_str}"
|
||||
end
|
||||
|
||||
k = settings.mongo.key params[:key]
|
||||
begin
|
||||
FileUtils.rm(k.path)
|
||||
rescue
|
||||
logger.error "Missing key file for #{params[:key]} - #{k.filename}"
|
||||
end
|
||||
r = settings.mongo.key_delete params[:key]
|
||||
|
||||
r = Devops::API2_0::Handler::Key.new.delete params[:key]
|
||||
return [500, r["err"].inspect] unless r["err"].nil?
|
||||
create_response("Key '#{params[:key]}' removed")
|
||||
|
||||
end
|
||||
|
||||
puts "Key routes initialized"
|
||||
end
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
require "json"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Routes
|
||||
module ServerRoutes
|
||||
|
||||
@ -23,7 +23,17 @@ module Devops
|
||||
# "chef_node_name": "chef name"
|
||||
# }
|
||||
# ]
|
||||
app.get_with_headers "/servers", :headers => [:accept], &Devops::Version2_0::Handler::Server.get_servers
|
||||
app.get_with_headers "/servers", :headers => [:accept] do
|
||||
check_privileges("server", "r")
|
||||
fields = []
|
||||
if params.key?("fields") and params["fields"].is_a?(Array)
|
||||
Devops::Model::Server.fields.each do |k|
|
||||
fields.push k if params["fields"].include?(k)
|
||||
end
|
||||
end
|
||||
reserved = (params.key?("reserved") ? true : nil)
|
||||
json Devops::Version2_0::Handler::Server.new.servers(fields, reserved)
|
||||
end
|
||||
|
||||
# Get chef nodes list
|
||||
#
|
||||
@ -38,7 +48,10 @@ module Devops
|
||||
# "chef_node_name": "chef name"
|
||||
# }
|
||||
# ]
|
||||
app.get_with_headers "/servers/chef", :headers => [:accept], &Devops::Version2_0::Handler::Server.get_chef_servers
|
||||
app.get_with_headers "/servers/chef", :headers => [:accept] do
|
||||
check_privileges("server", "r")
|
||||
json Devops::Version2_0::Handler::Server.new.chef_servers
|
||||
end
|
||||
|
||||
# Get provider servers list
|
||||
#
|
||||
@ -76,7 +89,10 @@ module Devops
|
||||
# "private_ip": "172.17.0.1"
|
||||
# }
|
||||
# ]
|
||||
app.get_with_headers "/servers/:provider", :headers => [:accept], &Devops::Version2_0::Handler::Server.get_provider_servers
|
||||
app.get_with_headers "/servers/:provider", :headers => [:accept] do
|
||||
check_privileges("server", "r")
|
||||
json Devops::Version2_0::Handler::Server.provider_servers(params[:provider])
|
||||
end
|
||||
|
||||
# Get server info by :name
|
||||
#
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
module Devops
|
||||
module Version2_0
|
||||
module API2_0
|
||||
module Routes
|
||||
module TagRoutes
|
||||
|
||||
@ -17,7 +17,10 @@ module Devops
|
||||
# [
|
||||
# "tag_1"
|
||||
# ]
|
||||
hash["GET"] = Devops::Version2_0::Handler::Tag.get_tags
|
||||
hash["GET"] = lambda {
|
||||
check_privileges("server", "r")
|
||||
json Devops::API2_0::Handler::Tag.new(params[:node_name]).tags()
|
||||
}
|
||||
|
||||
# Set tags list to :node_name
|
||||
#
|
||||
@ -33,7 +36,13 @@ module Devops
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200
|
||||
hash["POST"] = Devops::Version2_0::Handler::Tag.set_tags
|
||||
hash["POST"] = lambda {
|
||||
check_privileges("server", "w")
|
||||
tags = create_object_from_json_body(Array)
|
||||
check_array(tags, "Request body should be a not empty array of strings")
|
||||
Devops::Version2_0::Handler::Tag.new(params[:node_name]).set_tags(tags)
|
||||
create_response("Set tags for #{params[:node_name]}", tags: tags)
|
||||
}
|
||||
|
||||
# Delete tags from :node_name
|
||||
#
|
||||
@ -49,7 +58,13 @@ module Devops
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200
|
||||
hash["DELETE"] = Devops::Version2_0::Handler::Tag.unset_tags
|
||||
hash["DELETE"] = lambda {
|
||||
check_privileges("server", "w")
|
||||
tags = create_object_from_json_body(Array)
|
||||
check_array(tags, "Request body should be a not empty array of strings")
|
||||
Devops::Version2_0::Handler::Tag.new(params[:node_name]).unset_tags(tags)
|
||||
create_response("Deleted tags for #{params[:node_name]}", tags: tags)
|
||||
}
|
||||
app.multi_routes "/tags/:node_name", {:headers => [:accept, :content_type]}, hash
|
||||
|
||||
puts "Tag routes initialized"
|
||||
|
||||
@ -8,17 +8,17 @@ module Devops
|
||||
require_relative "api2/handlers/filter"
|
||||
require_relative "api2/handlers/group"
|
||||
require_relative "api2/handlers/user"
|
||||
require_relative "api2/handlers/bootstrap_templates"
|
||||
require_relative "api2/handlers/key"
|
||||
require_relative "api2/handlers/tag"
|
||||
require_relative "api2/handlers/server"
|
||||
=begin
|
||||
require "routes/v2.0/handlers/bootstrap_templates"
|
||||
require "routes/v2.0/handlers/deploy"
|
||||
require "routes/v2.0/handlers/image"
|
||||
require "routes/v2.0/handlers/network"
|
||||
require "routes/v2.0/handlers/key"
|
||||
require "routes/v2.0/handlers/project"
|
||||
require "routes/v2.0/handlers/script"
|
||||
require "routes/v2.0/handlers/status"
|
||||
require "routes/v2.0/handlers/tag"
|
||||
require "routes/v2.0/handlers/server"
|
||||
require "routes/v2.0/handlers/stack"
|
||||
require "routes/v2.0/handlers/stack_template"
|
||||
require "routes/v2.0/handlers/report"
|
||||
|
||||
@ -2,7 +2,8 @@ module BootstrapTemplatesCommands
|
||||
|
||||
def get_templates
|
||||
res = []
|
||||
Dir.foreach("#{ENV["HOME"]}/.chef/bootstrap/") {|f| res.push(f[0..-5]) if f.end_with?(".erb")} if File.exists? "#{ENV["HOME"]}/.chef/bootstrap/"
|
||||
dir = "#{ENV["HOME"]}/.chef/bootstrap/"
|
||||
Dir.foreach(dir) {|f| res.push(f[0..-5]) if f.end_with?(".erb")} if File.exists? dir
|
||||
res
|
||||
end
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user