add run list validator
This commit is contained in:
parent
0cb4fe9214
commit
73f4d4d540
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
devops-service/tests/features/support/config.yml
|
devops-service/tests/features/support/config.yml
|
||||||
|
.devops_files/
|
||||||
|
|||||||
@ -20,8 +20,7 @@ class DeployEnvBase < MongoModel
|
|||||||
|
|
||||||
def validate!
|
def validate!
|
||||||
super
|
super
|
||||||
e = DeployEnvBase.validate_run_list(self.run_list)
|
Validators::DeployEnv::RunList.new(self).validate!
|
||||||
raise InvalidRecord.new "Invalid run list elements: '#{e.join("', '")}'" unless e.empty?
|
|
||||||
|
|
||||||
unless self.expires.nil?
|
unless self.expires.nil?
|
||||||
check_expires!(self.expires)
|
check_expires!(self.expires)
|
||||||
@ -39,9 +38,4 @@ class DeployEnvBase < MongoModel
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.validate_run_list list
|
|
||||||
rl = /\Arole|recipe\[[\w-]+(::[\w-]+)?\]\Z/
|
|
||||||
list.select {|l| (rl =~ l).nil?}
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
8
devops-service/db/validators/all.rb
Normal file
8
devops-service/db/validators/all.rb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module Validators
|
||||||
|
class Helpers; end
|
||||||
|
class DeployEnv; end
|
||||||
|
end
|
||||||
|
|
||||||
|
require "db/validators/base"
|
||||||
|
require "db/validators/helpers/run_list"
|
||||||
|
require "db/validators/deploy_env/run_list"
|
||||||
18
devops-service/db/validators/base.rb
Normal file
18
devops-service/db/validators/base.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
class Validators::Base
|
||||||
|
|
||||||
|
def initialize(model)
|
||||||
|
@model = model
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate!
|
||||||
|
raise InvalidRecord.new(message) unless valid?
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid?
|
||||||
|
raise 'override me'
|
||||||
|
end
|
||||||
|
|
||||||
|
def message
|
||||||
|
raise 'override me'
|
||||||
|
end
|
||||||
|
end
|
||||||
20
devops-service/db/validators/deploy_env/run_list.rb
Normal file
20
devops-service/db/validators/deploy_env/run_list.rb
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Use helper to avoid code duplication: we have run_list validation in server routes,
|
||||||
|
# not only in deploy env model
|
||||||
|
|
||||||
|
module Validators
|
||||||
|
class DeployEnv::RunList < Base
|
||||||
|
|
||||||
|
def initialize(model)
|
||||||
|
super(model)
|
||||||
|
@helper_validator = Helpers::RunList.new(@model.run_list)
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid?
|
||||||
|
@helper_validator.valid?
|
||||||
|
end
|
||||||
|
|
||||||
|
def message
|
||||||
|
@helper_validator.message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
15
devops-service/db/validators/helpers/run_list.rb
Normal file
15
devops-service/db/validators/helpers/run_list.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module Validators
|
||||||
|
class Helpers::RunList < Base
|
||||||
|
|
||||||
|
def valid?
|
||||||
|
rl = /\Arole|recipe\[[\w-]+(::[\w-]+)?\]\Z/
|
||||||
|
@invalid_elements = @model.select {|l| (rl =~ l).nil?}
|
||||||
|
@invalid_elements.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
def message
|
||||||
|
invalid_elements_as_string = @invalid_elements.join("', '")
|
||||||
|
"Invalid run list elements: '#{invalid_elements_as_string}'. Each element should be role or recipe."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -9,6 +9,7 @@ $:.push File.dirname(__FILE__)
|
|||||||
require "db/exceptions/invalid_record"
|
require "db/exceptions/invalid_record"
|
||||||
require "db/exceptions/record_not_found"
|
require "db/exceptions/record_not_found"
|
||||||
require "db/mongo/mongo_connector"
|
require "db/mongo/mongo_connector"
|
||||||
|
require "db/validators/all"
|
||||||
require "providers/provider_factory"
|
require "providers/provider_factory"
|
||||||
|
|
||||||
require "routes/v2.0"
|
require "routes/v2.0"
|
||||||
|
|||||||
@ -396,8 +396,8 @@ module Version2_0
|
|||||||
name = check_string(body["name"], "Parameter 'name' should be a not empty string", true)
|
name = check_string(body["name"], "Parameter 'name' should be a not empty string", true)
|
||||||
rl = check_array(body["run_list"], "Parameter 'run_list' should be a not empty array of string", String, true)
|
rl = check_array(body["run_list"], "Parameter 'run_list' should be a not empty array of string", String, true)
|
||||||
unless rl.nil?
|
unless rl.nil?
|
||||||
e = DeployEnv.validate_run_list(rl)
|
validator = Validators::Helpers::RunList.new(rl)
|
||||||
halt_response("Invalid run list elements: '#{e.join("', '")}'") unless e.empty?
|
halt_response(validator.message) unless validator.valid?
|
||||||
end
|
end
|
||||||
t = check_string(body["bootstrap_template"], "Parameter 'bootstrap_template' should be a not empty string", true)
|
t = check_string(body["bootstrap_template"], "Parameter 'bootstrap_template' should be a not empty string", true)
|
||||||
s = BaseRoutes.mongo.server_by_instance_id(id)
|
s = BaseRoutes.mongo.server_by_instance_id(id)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user