#868: vpc support
This commit is contained in:
parent
27437914a1
commit
c671e7ed54
@ -1,3 +1,4 @@
|
|||||||
|
require "app/api2/parsers/security_groups"
|
||||||
require "providers/provider_factory"
|
require "providers/provider_factory"
|
||||||
require_relative "request_handler"
|
require_relative "request_handler"
|
||||||
|
|
||||||
@ -6,13 +7,15 @@ module Devops
|
|||||||
module Handler
|
module Handler
|
||||||
class Group < RequestHandler
|
class Group < RequestHandler
|
||||||
|
|
||||||
# TODO: vpc support for ec2
|
set_parser Devops::API2_0::Parser::SecurityGroupsParser
|
||||||
|
|
||||||
def groups provider
|
def groups provider
|
||||||
groups_with_account(provider, nil)
|
groups_with_account(provider, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def groups_with_account provider, account
|
def groups_with_account provider, account
|
||||||
::Provider::ProviderFactory.get(provider, account).groups()#params
|
available_keys = ["vpc-id"]
|
||||||
|
::Provider::ProviderFactory.get(provider, account).groups(parser.security_groups.select{|k,v| available_keys.include?(k)})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
require "app/api2/parsers/network"
|
||||||
require "providers/provider_factory"
|
require "providers/provider_factory"
|
||||||
require_relative "request_handler"
|
require_relative "request_handler"
|
||||||
|
|
||||||
@ -6,13 +7,16 @@ module Devops
|
|||||||
module Handler
|
module Handler
|
||||||
class Network < RequestHandler
|
class Network < RequestHandler
|
||||||
|
|
||||||
|
set_parser Devops::API2_0::Parser::NetworkParser
|
||||||
|
|
||||||
def networks provider
|
def networks provider
|
||||||
networks_with_account provider, nil
|
networks_with_account provider, nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def networks_with_account provider, account
|
def networks_with_account provider, account
|
||||||
p = ::Provider::ProviderFactory.get(provider, account)
|
p = ::Provider::ProviderFactory.get(provider, account)
|
||||||
p.networks_detail
|
available_keys = ["vpc-id"]
|
||||||
|
p.networks_detail(parser.networks.select{|k,v| available_keys.include?(k)})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -33,12 +33,17 @@ module Devops
|
|||||||
end
|
end
|
||||||
|
|
||||||
def delete_account name, provider
|
def delete_account name, provider
|
||||||
account = Devops::Db.connector.provider_accounts_show(name)
|
account = Devops::Db.connector.provider_account(provider, name)
|
||||||
Devops::Db.connector.provider_accounts_delete(name)
|
Devops::Db.connector.provider_accounts_delete(name)
|
||||||
::Provider::ProviderFactory.delete_account(provider, account)
|
::Provider::ProviderFactory.delete_account(provider, account)
|
||||||
account.to_hash
|
account.to_hash
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def account_vpcs provider, name
|
||||||
|
Devops::Db.connector.provider_account(provider, name)
|
||||||
|
::Provider::ProviderFactory.get(provider, name).describe_vpcs
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
15
devops-service/app/api2/parsers/network.rb
Normal file
15
devops-service/app/api2/parsers/network.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
require_relative "request_parser"
|
||||||
|
|
||||||
|
module Devops
|
||||||
|
module API2_0
|
||||||
|
module Parser
|
||||||
|
class NetworkParser < RequestParser
|
||||||
|
|
||||||
|
def networks
|
||||||
|
@params
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
15
devops-service/app/api2/parsers/security_groups.rb
Normal file
15
devops-service/app/api2/parsers/security_groups.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
require_relative "request_parser"
|
||||||
|
|
||||||
|
module Devops
|
||||||
|
module API2_0
|
||||||
|
module Parser
|
||||||
|
class SecurityGroupsParser < RequestParser
|
||||||
|
|
||||||
|
def security_groups
|
||||||
|
@params
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@ -13,6 +13,9 @@ module Devops
|
|||||||
# - headers :
|
# - headers :
|
||||||
# - Accept: application/json
|
# - Accept: application/json
|
||||||
#
|
#
|
||||||
|
# * Params:
|
||||||
|
# vpc-id - string
|
||||||
|
#
|
||||||
# * *Returns* :
|
# * *Returns* :
|
||||||
# - ec2:
|
# - ec2:
|
||||||
# {
|
# {
|
||||||
@ -43,7 +46,6 @@ module Devops
|
|||||||
# ]
|
# ]
|
||||||
# }
|
# }
|
||||||
# }
|
# }
|
||||||
# TODO: vpc support for ec2
|
|
||||||
app.get_with_headers "/groups/:provider", :headers => [:accept] do |provider|
|
app.get_with_headers "/groups/:provider", :headers => [:accept] do |provider|
|
||||||
check_privileges("group", "r")
|
check_privileges("group", "r")
|
||||||
check_provider(provider)
|
check_provider(provider)
|
||||||
|
|||||||
@ -13,6 +13,9 @@ module Devops
|
|||||||
# - headers :
|
# - headers :
|
||||||
# - Accept: application/json
|
# - Accept: application/json
|
||||||
#
|
#
|
||||||
|
# * Params:
|
||||||
|
# vpc-id - string
|
||||||
|
#
|
||||||
# * *Returns* : array of strings
|
# * *Returns* : array of strings
|
||||||
# - ec2:
|
# - ec2:
|
||||||
# [
|
# [
|
||||||
|
|||||||
@ -115,7 +115,23 @@ module Devops
|
|||||||
app.delete_with_headers "/provider/:provider/account/:account_name", :headers => [:accept, :content_type] do |provider, account_name|
|
app.delete_with_headers "/provider/:provider/account/:account_name", :headers => [:accept, :content_type] do |provider, account_name|
|
||||||
check_privileges("provider", "w")
|
check_privileges("provider", "w")
|
||||||
check_provider(provider)
|
check_provider(provider)
|
||||||
create_response("Deleted", {:account => Devops::API2_0::Handler::Provider.new(request).delete_account(provider)})
|
create_response("Deleted", {:account => Devops::API2_0::Handler::Provider.new(request).delete_account(account_name, provider)})
|
||||||
|
end
|
||||||
|
|
||||||
|
# Describe vpc for account with name :account_name for provider ec2
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : GET
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
# - Content-Type: application/json
|
||||||
|
#
|
||||||
|
# * *Returns* : 200
|
||||||
|
app.get_with_headers "/provider/ec2/account/:account_name/vpcs", :headers => [:accept, :content_type] do |account_name|
|
||||||
|
provider = "ec2"
|
||||||
|
check_privileges("provider", "r")
|
||||||
|
check_provider(provider)
|
||||||
|
json Devops::API2_0::Handler::Provider.new(request).account_vpcs(provider, account_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
puts "Provider routes initialized"
|
puts "Provider routes initialized"
|
||||||
|
|||||||
@ -13,6 +13,13 @@ module Connectors
|
|||||||
collection.find({provider: provider}).to_a.map{|bson| c.build_from_bson(bson)}
|
collection.find({provider: provider}).to_a.map{|bson| c.build_from_bson(bson)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def provider_account provider, account
|
||||||
|
c = Provider::ProviderFactory.get_account_class(provider)
|
||||||
|
bson = collection.find({provider: provider, _id: account}).to_a.first
|
||||||
|
raise RecordNotFound.new("'Account #{account}' for provider '#{provider}' not found") unless bson
|
||||||
|
c.build_from_bson(bson)
|
||||||
|
end
|
||||||
|
|
||||||
def collection_name
|
def collection_name
|
||||||
'provider_accounts'
|
'provider_accounts'
|
||||||
end
|
end
|
||||||
|
|||||||
@ -12,21 +12,7 @@ module Devops
|
|||||||
class CloudDeployEnv < DeployEnvBase
|
class CloudDeployEnv < DeployEnvBase
|
||||||
|
|
||||||
attr_accessor :flavor, :image, :subnets, :groups, :stack_template
|
attr_accessor :flavor, :image, :subnets, :groups, :stack_template
|
||||||
=begin
|
|
||||||
@Deprecated
|
|
||||||
types :identifier => {:type => String, :empty => false},
|
|
||||||
:image => {:type => String, :empty => false},
|
|
||||||
:flavor => {:type => String, :empty => false},
|
|
||||||
:provider => {:type => String, :empty => false},
|
|
||||||
:expires => {:type => String, :empty => false, :nil => true},
|
|
||||||
:run_list => {:type => Array, :empty => true},
|
|
||||||
:users => {:type => Array, :empty => true},
|
|
||||||
:subnets => {:type => Array, :empty => true},
|
|
||||||
:groups => {:type => Array, :empty => false},
|
|
||||||
:stack_template => {:type => String, :empty => false, :nil => true}
|
|
||||||
=end
|
|
||||||
|
|
||||||
#TODO: account validator
|
|
||||||
set_validators ::Validators::DeployEnv::Flavor,
|
set_validators ::Validators::DeployEnv::Flavor,
|
||||||
::Validators::DeployEnv::Image,
|
::Validators::DeployEnv::Image,
|
||||||
::Validators::DeployEnv::Groups,
|
::Validators::DeployEnv::Groups,
|
||||||
|
|||||||
@ -4,6 +4,11 @@ module Devops
|
|||||||
module Model
|
module Model
|
||||||
class DeployEnvEc2 < CloudDeployEnv
|
class DeployEnvEc2 < CloudDeployEnv
|
||||||
|
|
||||||
|
attr_accessor :vpc_id
|
||||||
|
|
||||||
|
set_field_validators :vpc_id, ::Validators::FieldValidator::Nil,
|
||||||
|
::Validators::FieldValidator::FieldType::String,
|
||||||
|
::Validators::FieldValidator::Vpc
|
||||||
=begin
|
=begin
|
||||||
@Deprecated
|
@Deprecated
|
||||||
types :identifier => {:type => String, :empty => false},
|
types :identifier => {:type => String, :empty => false},
|
||||||
@ -34,6 +39,11 @@ module Devops
|
|||||||
if self.subnets.size > 1
|
if self.subnets.size > 1
|
||||||
self.subnets = [ self.subnets[0] ]
|
self.subnets = [ self.subnets[0] ]
|
||||||
end
|
end
|
||||||
|
self.vpc_id = d["vpc_id"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_hash
|
||||||
|
super().merge({"vpc_id" => self.vpc_id})
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.create hash
|
def self.create hash
|
||||||
|
|||||||
@ -33,7 +33,7 @@ class MongoConnector
|
|||||||
[:keys, :key, :key_insert, :key_delete] => :keys_connector,
|
[:keys, :key, :key_insert, :key_delete] => :keys_connector,
|
||||||
[:save_report, :report, :reports, :set_report_status, :set_report_server_data, :add_report_subreports] => :reports_connector,
|
[:save_report, :report, :reports, :set_report_status, :set_report_server_data, :add_report_subreports] => :reports_connector,
|
||||||
[:insert_statistic, :search_statistic] => :statistics_connector,
|
[:insert_statistic, :search_statistic] => :statistics_connector,
|
||||||
[:provider_accounts, :provider_accounts_insert, :provider_accounts_delete, :provider_accounts_show] => :provider_accounts_connector
|
[:provider_accounts, :provider_accounts_insert, :provider_accounts_delete, :provider_account] => :provider_accounts_connector
|
||||||
)
|
)
|
||||||
|
|
||||||
def initialize(db, host, port=27017, user=nil, password=nil)
|
def initialize(db, host, port=27017, user=nil, password=nil)
|
||||||
|
|||||||
21
devops-service/db/validators/field_validators/vpc.rb
Normal file
21
devops-service/db/validators/field_validators/vpc.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
require_relative "base"
|
||||||
|
|
||||||
|
module Validators
|
||||||
|
module FieldValidator
|
||||||
|
class Vpc < Base
|
||||||
|
|
||||||
|
def valid?
|
||||||
|
provider = ::Provider::ProviderFactory.get(@model.provider, @model.provider_account)
|
||||||
|
vpcs = provider.describe_vpcs
|
||||||
|
vpcs.keys.include?(@value)
|
||||||
|
rescue
|
||||||
|
raise "Invalid provider account '#{@model.provider_account}'"
|
||||||
|
end
|
||||||
|
|
||||||
|
def message
|
||||||
|
"Invalid vpc '#{@value}'."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@ -14,6 +14,15 @@ module Provider
|
|||||||
"stack_#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
|
"stack_#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def networks filters={}
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
|
||||||
|
def groups filters={}
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def connection_compute options
|
def connection_compute options
|
||||||
Fog::Compute.new( options )
|
Fog::Compute.new( options )
|
||||||
|
|||||||
@ -51,14 +51,8 @@ module Provider
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def groups filters=nil
|
def groups filters={}
|
||||||
buf = {}
|
g = self.compute.describe_security_groups(filters)
|
||||||
buf = filters.select{|k,v| ["vpc-id"].include?(k)} unless filters.nil?
|
|
||||||
g = if buf.empty?
|
|
||||||
self.compute.describe_security_groups
|
|
||||||
else
|
|
||||||
self.compute.describe_security_groups(buf)
|
|
||||||
end
|
|
||||||
convert_groups(g.body["securityGroupInfo"])
|
convert_groups(g.body["securityGroupInfo"])
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -72,12 +66,12 @@ module Provider
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def networks_detail
|
def networks_detail filters={}
|
||||||
self.networks
|
self.networks(filters)
|
||||||
end
|
end
|
||||||
|
|
||||||
def networks
|
def networks filters={}
|
||||||
self.compute.describe_subnets.body["subnetSet"].select{|n| n["state"] == "available"}.map do |n|
|
self.compute.describe_subnets(filters).body["subnetSet"].select{|n| n["state"] == "available"}.map do |n|
|
||||||
{
|
{
|
||||||
"cidr" => n["cidrBlock"],
|
"cidr" => n["cidrBlock"],
|
||||||
"vpcId" => n["vpcId"],
|
"vpcId" => n["vpcId"],
|
||||||
@ -327,6 +321,10 @@ module Provider
|
|||||||
def create_default_stack_name s
|
def create_default_stack_name s
|
||||||
"stack-#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}".gsub('_', '-')
|
"stack-#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}".gsub('_', '-')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def describe_vpcs
|
||||||
|
self.compute.describe_vpcs.body["vpcSet"].select{|v| v["state"] == "available"}.map{|v| {"vpc_id" => v["vpcId"], "cidr" => v["cidrBlock"] } }
|
||||||
|
end
|
||||||
private
|
private
|
||||||
|
|
||||||
def convert_groups list
|
def convert_groups list
|
||||||
|
|||||||
@ -30,7 +30,7 @@ module Provider
|
|||||||
PROVIDER
|
PROVIDER
|
||||||
end
|
end
|
||||||
|
|
||||||
def groups filter=nil
|
def groups filters={}
|
||||||
convert_groups(compute.list_security_groups.body["security_groups"])
|
convert_groups(compute.list_security_groups.body["security_groups"])
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -55,8 +55,8 @@ module Provider
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def networks_detail
|
def networks_detail filters={}
|
||||||
net = self.network
|
net = self.network(filters)
|
||||||
subnets = net.list_subnets.body["subnets"].select{|s| net.current_tenant["id"] == s["tenant_id"]}
|
subnets = net.list_subnets.body["subnets"].select{|s| net.current_tenant["id"] == s["tenant_id"]}
|
||||||
net.list_networks.body["networks"].select{|n| n["router:external"] == false and n["status"] == "ACTIVE" and net.current_tenant["id"] == n["tenant_id"]}.map{|n|
|
net.list_networks.body["networks"].select{|n| n["router:external"] == false and n["status"] == "ACTIVE" and net.current_tenant["id"] == n["tenant_id"]}.map{|n|
|
||||||
sn = subnets.detect{|s| n["subnets"][0] == s["id"]}
|
sn = subnets.detect{|s| n["subnets"][0] == s["id"]}
|
||||||
@ -68,7 +68,7 @@ module Provider
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def networks
|
def networks filters={}
|
||||||
net = self.network
|
net = self.network
|
||||||
net.list_networks.body["networks"].select{|n| n["router:external"] == false and n["status"] == "ACTIVE" and net.current_tenant["id"] == n["tenant_id"]}.map{|n|
|
net.list_networks.body["networks"].select{|n| n["router:external"] == false and n["status"] == "ACTIVE" and net.current_tenant["id"] == n["tenant_id"]}.map{|n|
|
||||||
{
|
{
|
||||||
|
|||||||
@ -23,18 +23,10 @@ module Provider
|
|||||||
[]
|
[]
|
||||||
end
|
end
|
||||||
|
|
||||||
def groups filter=nil
|
|
||||||
{}
|
|
||||||
end
|
|
||||||
|
|
||||||
def images filters
|
def images filters
|
||||||
[]
|
[]
|
||||||
end
|
end
|
||||||
|
|
||||||
def networks
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
|
|
||||||
def networks_detail
|
def networks_detail
|
||||||
self.networks
|
self.networks
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user