289 lines
9.7 KiB
Ruby
289 lines
9.7 KiB
Ruby
require "json"
|
|
|
|
module Devops
|
|
module Version2_0
|
|
module Routes
|
|
module ServerRoutes
|
|
|
|
def self.registered(app)
|
|
app.before %r{\A/server/[\w]+/(pause|unpouse|reserve|unreserve)\z} do
|
|
check_headers :accept, :content_type
|
|
check_privileges("server", "w")
|
|
body = create_object_from_json_body(Hash, true)
|
|
@key = (body.nil? ? nil : body["key"])
|
|
end
|
|
|
|
app.after %r{\A/server(/[\w]+)?\z | \A/server/(add|bootstrap)\z | \A/server/[\w]+/(un)?pause\z} do
|
|
statistic
|
|
end
|
|
|
|
# Get devops servers list
|
|
#
|
|
# * *Request*
|
|
# - method : GET
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - params :
|
|
# - fields - show server fields, available values: project, deploy_env, provider, remote_user, private_ip, public_ip, created_at, created_by, static, key, reserved_by
|
|
#
|
|
# * *Returns* :
|
|
# [
|
|
# {
|
|
# "id": "instance id",
|
|
# "chef_node_name": "chef name"
|
|
# }
|
|
# ]
|
|
app.before "/servers" do
|
|
check_headers :accept
|
|
check_privileges("server", "r")
|
|
end
|
|
app.get "/servers", &Devops::Version2_0::Handler::Server.get_servers
|
|
|
|
# Get chef nodes list
|
|
#
|
|
# * *Request*
|
|
# - method : GET
|
|
# - headers :
|
|
# - Accept: application/json
|
|
#
|
|
# * *Returns* :
|
|
# [
|
|
# {
|
|
# "chef_node_name": "chef name"
|
|
# }
|
|
# ]
|
|
app.before "/servers/chef" do
|
|
check_headers :accept
|
|
check_privileges("server", "r")
|
|
end
|
|
app.get "/servers/chef", &Devops::Version2_0::Handler::Server.get_chef_servers
|
|
|
|
# Get provider servers list
|
|
#
|
|
# * *Request*
|
|
# - method : GET
|
|
# - headers :
|
|
# - Accept: application/json
|
|
#
|
|
# * *Returns* :
|
|
# -ec2
|
|
# [
|
|
# {
|
|
# "state": "running",
|
|
# "name": "name",
|
|
# "image": "ami-83e4bcea",
|
|
# "flavor": "m1.small",
|
|
# "keypair": "ssh key",
|
|
# "instance_id": "i-8441bfd4",
|
|
# "dns_name": "ec2-204-236-199-49.compute-1.amazonaws.com",
|
|
# "zone": "us-east-1d",
|
|
# "private_ip": "10.215.217.210",
|
|
# "public_ip": "204.236.199.49",
|
|
# "launched_at": "2014-04-25 07:56:33 UTC"
|
|
# }
|
|
# ]
|
|
# -openstack
|
|
# [
|
|
# {
|
|
# "state": "ACTIVE",
|
|
# "name": "name",
|
|
# "image": "image id",
|
|
# "flavor": null,
|
|
# "keypair": "ssh key",
|
|
# "instance_id": "instance id",
|
|
# "private_ip": "172.17.0.1"
|
|
# }
|
|
# ]
|
|
app.before "/servers/:provider" do
|
|
check_headers :accept
|
|
check_privileges("server", "r")
|
|
end
|
|
app.get "/servers/:provider", &Devops::Version2_0::Handler::Server.get_provider_servers
|
|
|
|
# Get server info by :name
|
|
#
|
|
# * *Request*
|
|
# - method : GET
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - parameters:
|
|
# key=instance -> search server by instance_id rather then chef_node_name
|
|
#
|
|
# * *Returns* :
|
|
# [
|
|
# {
|
|
# "chef_node_name": "chef name"
|
|
# }
|
|
# ]
|
|
app.before "/server/:name" do
|
|
if request.get?
|
|
check_headers :accept
|
|
check_privileges("server", "r")
|
|
elsif request.delete?
|
|
check_headers
|
|
check_privileges("server", "w")
|
|
end
|
|
end
|
|
app.get "/server/:name", &Devops::Version2_0::Handler::Server.get_server
|
|
|
|
# Delete devops server
|
|
#
|
|
# * *Request*
|
|
# - method : DELETE
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "key": "instance", -> search server by instance_id rather then chef_node_name
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 - Deleted
|
|
app.delete "/server/:id", &Devops::Version2_0::Handler::Server.delete_server
|
|
|
|
# Create devops server
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "project": "project name", -> mandatory parameter
|
|
# "deploy_env": "env", -> mandatory parameter
|
|
# "name": "server_name", -> if null, name will be generated
|
|
# "without_bootstrap": null, -> do not install chef on instance if true
|
|
# "force": null, -> do not delete server on error
|
|
# "groups": [], -> specify special security groups, overrides value from project env
|
|
# "key": "ssh key", -> specify ssh key for server, overrides value from project env
|
|
# "trace": true -> return output in stream
|
|
# }
|
|
#
|
|
# * *Returns* : text stream
|
|
app.before "/server" do
|
|
check_headers :content_type
|
|
check_privileges("server", "w")
|
|
end
|
|
app.post "/server", &Devops::Version2_0::Handler::Server.create_server
|
|
|
|
# Pause devops server by name
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "key": "instance", -> search server by instance_id rather then chef_node_name
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 - Paused
|
|
app.post "/server/:node_name/pause", &Devops::Version2_0::Handler::Server.pause_server
|
|
|
|
# Unpause devops server by name
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "key": "instance", -> search server by instance_id rather then chef_node_name
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 - Unpaused
|
|
app.post "/server/:node_name/unpause", &Devops::Version2_0::Handler::Server.unpause_server
|
|
|
|
# Reserve devops server
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "key": "instance", -> search server by instance_id rather then chef_node_name
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 - Reserved
|
|
app.post "/server/:node_name/reserve", &Devops::Version2_0::Handler::Server.reserve_server
|
|
|
|
# Unreserve devops server
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "key": "instance", -> search server by instance_id rather then chef_node_name
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 - Unreserved
|
|
app.post "/server/:node_name/unreserve", &Devops::Version2_0::Handler::Server.unreserve_server
|
|
|
|
# Bootstrap devops server
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "instance_id": "instance id", -> mandatory parameter
|
|
# "name": "server_name", -> if null, name will be generated
|
|
# "run_list": [], -> specify list of roles and recipes
|
|
# "bootstrap_template": "template" -> specify ssh key for server, overrides value from project env
|
|
# }
|
|
#
|
|
# * *Returns* : text stream
|
|
app.before "/server/bootstrap" do
|
|
check_headers
|
|
check_privileges("server", "w")
|
|
end
|
|
app.post "/server/bootstrap", &Devops::Version2_0::Handler::Server.bootstrap_server
|
|
|
|
# Add external server to devops
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# {
|
|
# "project": "project name", -> mandatory parameter
|
|
# "deploy_env": "env", -> mandatory parameter
|
|
# "key": "ssh key", -> mandatory parameter
|
|
# "remote_user": "ssh user", -> mandatory parameter
|
|
# "private_ip": "ip", -> mandatory parameter
|
|
# "public_ip": "ip"
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 - Added
|
|
app.before "/server/add" do
|
|
check_headers
|
|
check_privileges("server", "w")
|
|
end
|
|
app.post "/server/add", &Devops::Version2_0::Handler::Server.add_server
|
|
|
|
puts "Server routes initialized"
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|