fluke/devops-service/app/api2/routes/server.rb
2015-07-16 17:18:55 +03:00

248 lines
8.8 KiB
Ruby

require "json"
module Devops
module Version2_0
module Routes
module ServerRoutes
def self.registered(app)
# 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.get_with_headers "/servers", :headers => [:accept], &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.get_with_headers "/servers/chef", :headers => [:accept], &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.get_with_headers "/servers/:provider", :headers => [:accept], &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"
# }
# ]
hash = {}
hash["GET"] = 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
hash["DELETE"] = Devops::Version2_0::Handler::Server.delete_server
app.multi_routes "/server/:id", {:headers => [:accept, :content_type]}, hash
# 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.post_with_headers "/server", :headers => [:content_type], &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_with_headers "/server/:node_name/pause", :headers => [:accept, :content_type], &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_with_headers "/server/:node_name/unpause", :headers => [:accept, :content_type], &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_with_headers "/server/:node_name/reserve", :headers => [:accept, :content_type], &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_with_headers "/server/:node_name/unreserve", :headers => [:accept, :content_type], &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.post_with_headers "/server/bootstrap", :headers => [:accept, :content_type], &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.post_with_headers "/server/add", :headers => [:accept, :content_type], &Devops::Version2_0::Handler::Server.add_server
puts "Server routes initialized"
end
end
end
end
end