mirror of
https://github.com/OpenNebula/one.git
synced 2024-12-23 17:33:56 +03:00
This reverts commit d6ec6fad07
.
This commit is contained in:
parent
f1e860ee14
commit
9bf063b1a2
@ -193,35 +193,6 @@ class OneFlowTemplateHelper < OpenNebulaHelper::OneHelper
|
||||
ret
|
||||
end
|
||||
|
||||
# Get custom role attributes values from user
|
||||
#
|
||||
# @param role [Hash] Service role with custom attributes
|
||||
#
|
||||
# @return [Hash] Role with custom attributes values
|
||||
def custom_role_attrs(roles)
|
||||
return if roles.nil? || roles.empty?
|
||||
|
||||
ret = {}
|
||||
role_with_custom_attrs = false
|
||||
|
||||
roles.each do |role|
|
||||
next unless role.key?('custom_attrs')
|
||||
|
||||
####################################################################
|
||||
# Display Role Information
|
||||
####################################################################
|
||||
header = "> Please insert the user inputs for the role \"#{role['name']}\""
|
||||
puts header
|
||||
|
||||
role.merge!(custom_attrs(role['custom_attrs']))
|
||||
role_with_custom_attrs = true
|
||||
end
|
||||
|
||||
ret['roles'] = roles if role_with_custom_attrs
|
||||
|
||||
ret
|
||||
end
|
||||
|
||||
def networks(vnets)
|
||||
return unless vnets
|
||||
|
||||
|
@ -61,7 +61,6 @@ require 'command_parser'
|
||||
require 'opennebula/oneflow_client'
|
||||
require 'cli_helper'
|
||||
require 'one_helper/oneflowtemplate_helper'
|
||||
require 'one_helper/onetemplate_helper'
|
||||
|
||||
USER_AGENT = 'CLI'
|
||||
|
||||
@ -254,18 +253,14 @@ CommandParser::CmdParser.new(ARGV) do
|
||||
break
|
||||
end
|
||||
|
||||
params['merge_template'] = {}
|
||||
body = JSON.parse(response.body)['DOCUMENT']['TEMPLATE']['BODY']
|
||||
|
||||
# Check global custom attributes
|
||||
custom_attrs = helper.custom_attrs(body['custom_attrs'])
|
||||
params['merge_template'].merge!(custom_attrs) unless custom_attrs.nil?
|
||||
params['merge_template'] = helper.custom_attrs(
|
||||
body['custom_attrs']
|
||||
)
|
||||
|
||||
# Check role level custom attributes
|
||||
custom_role_attrs = helper.custom_role_attrs(body['roles'])
|
||||
params['merge_template'].merge!(custom_role_attrs) unless custom_role_attrs.nil?
|
||||
params['merge_template'] = {} unless params['merge_template']
|
||||
|
||||
# Check vnets attributes
|
||||
vnets = helper.networks(body['networks'])
|
||||
params['merge_template'].merge!(vnets) unless vnets.nil?
|
||||
end
|
||||
|
@ -323,9 +323,6 @@ module OpenNebula
|
||||
|
||||
template['start_time'] = Integer(Time.now)
|
||||
|
||||
# Replace $attibute by the corresponding value
|
||||
resolve_attributes(template)
|
||||
|
||||
super(template.to_json, template['name'])
|
||||
end
|
||||
|
||||
@ -663,7 +660,7 @@ module OpenNebula
|
||||
end if deploy
|
||||
|
||||
# Replace $attibute by the corresponding value
|
||||
resolve_networks(body)
|
||||
resolve_attributes(body)
|
||||
|
||||
# @body = template.to_hash
|
||||
|
||||
@ -787,49 +784,31 @@ module OpenNebula
|
||||
end
|
||||
|
||||
# rubocop:disable Layout/LineLength
|
||||
def resolve_networks(template)
|
||||
template['roles'].each do |role|
|
||||
next unless role['vm_template_contents']
|
||||
|
||||
# $CUSTOM1_VAR Any word character
|
||||
# (letter, number, underscore)
|
||||
role['vm_template_contents'].scan(/\$(\w+)/).each do |key|
|
||||
net = template['networks_values'].find {|att| att.key? key[0] }
|
||||
|
||||
next if net.nil?
|
||||
|
||||
role['vm_template_contents'].gsub!(
|
||||
'$'+key[0],
|
||||
net[net.keys[0]]['id'].to_s
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def resolve_attributes(template)
|
||||
template['roles'].each do |role|
|
||||
if role['vm_template_contents']
|
||||
# $CUSTOM1_VAR Any word character
|
||||
# (letter, number, underscore)
|
||||
role['vm_template_contents'].scan(/\$(\w+)/).each do |key|
|
||||
# Check if $ var value is in custom_attrs_values within the role
|
||||
if !role['custom_attrs_values'].nil? && \
|
||||
role['custom_attrs_values'].key?(key[0])
|
||||
# Check if $ var value is in custom_attrs_values
|
||||
if !template['custom_attrs_values'].nil? &&
|
||||
template['custom_attrs_values'].key?(key[0])
|
||||
role['vm_template_contents'].gsub!(
|
||||
'$'+key[0],
|
||||
role['custom_attrs_values'][key[0]]
|
||||
template['custom_attrs_values'][key[0]]
|
||||
)
|
||||
next
|
||||
end
|
||||
|
||||
# Check if $ var value is in custom_attrs_values
|
||||
# Check if $ var value is in networks
|
||||
net = template['networks_values']
|
||||
.find {|att| att.key? key[0] }
|
||||
|
||||
next unless !template['custom_attrs_values'].nil? && \
|
||||
template['custom_attrs_values'].key?(key[0])
|
||||
next if net.nil?
|
||||
|
||||
role['vm_template_contents'].gsub!(
|
||||
'$'+key[0],
|
||||
template['custom_attrs_values'][key[0]]
|
||||
net[net.keys[0]]['id'].to_s
|
||||
)
|
||||
end
|
||||
end
|
||||
|
@ -186,22 +186,6 @@ def one_error_to_http(error)
|
||||
end
|
||||
end
|
||||
|
||||
# Check if the custom_attrs and their respective values are correct
|
||||
#
|
||||
# @param custom_attrs [Hash] Custom attrs of the service/role
|
||||
# @param custom_attrs_values [Hash] Custom attrs values to check
|
||||
def check_custom_attrs(custom_attrs, custom_attrs_values)
|
||||
return if custom_attrs.nil? || custom_attrs.empty?
|
||||
|
||||
if !custom_attrs.is_a?(Hash) || !custom_attrs_values.is_a?(Hash)
|
||||
raise 'Wrong custom_attrs or custom_attrs_values format'
|
||||
end
|
||||
|
||||
return if (custom_attrs.keys - custom_attrs_values.keys).empty?
|
||||
|
||||
raise 'Verify that every custom attribute have its corresponding value defined'
|
||||
end
|
||||
|
||||
##############################################################################
|
||||
# Defaults
|
||||
##############################################################################
|
||||
@ -645,40 +629,36 @@ post '/service_template/:id/action' do
|
||||
merge_template = opts['merge_template']
|
||||
service_json = JSON.parse(service_template.to_json)
|
||||
|
||||
body = service_json['DOCUMENT']['TEMPLATE']['BODY']
|
||||
# Check custom_attrs
|
||||
body = service_json['DOCUMENT']['TEMPLATE']['BODY']
|
||||
custom_attrs = body['custom_attrs']
|
||||
|
||||
begin
|
||||
# Check service custom_attrs
|
||||
custom_attrs = body['custom_attrs']
|
||||
if merge_template
|
||||
custom_attrs_values = merge_template['custom_attrs_values']
|
||||
check_custom_attrs(custom_attrs, custom_attrs_values)
|
||||
end
|
||||
|
||||
# Check custom attrs in each role
|
||||
body['roles'].each do |role|
|
||||
next if role['custom_attrs'].nil?
|
||||
if custom_attrs && !(custom_attrs.is_a? Hash)
|
||||
return internal_error('Wrong custom_attrs format',
|
||||
VALIDATION_EC)
|
||||
end
|
||||
|
||||
roles_merge_template = merge_template['roles']
|
||||
if custom_attrs_values && !(custom_attrs_values.is_a? Hash)
|
||||
return internal_error('Wrong custom_attrs_values format',
|
||||
VALIDATION_EC)
|
||||
end
|
||||
|
||||
# merge_template must have 'role' key if role has custom attributes
|
||||
if roles_merge_template.nil?
|
||||
raise 'The Service template specifies custom attributes for roles ' \
|
||||
'but no values have been found'
|
||||
end
|
||||
if custom_attrs && !custom_attrs.empty? && !custom_attrs_values
|
||||
return internal_error('No custom_attrs_values found',
|
||||
VALIDATION_EC)
|
||||
end
|
||||
|
||||
if !roles_merge_template.is_a?(Array) || roles_merge_template.empty?
|
||||
raise 'The role custom attributes are empty or do not have a valid format'
|
||||
end
|
||||
|
||||
# Select role from merge_template by role name
|
||||
merge_role = roles_merge_template.find {|item| item['name'] == role['name'] }
|
||||
|
||||
role_custom_attrs = role['custom_attrs']
|
||||
role_custom_attrs_values = merge_role['custom_attrs_values']
|
||||
|
||||
check_custom_attrs(role_custom_attrs, role_custom_attrs_values)
|
||||
end
|
||||
rescue StandardError => e
|
||||
return internal_error(e.message, VALIDATION_EC)
|
||||
if custom_attrs &&
|
||||
!custom_attrs.empty? &&
|
||||
custom_attrs_values &&
|
||||
!(custom_attrs.keys - custom_attrs_values.keys).empty?
|
||||
return internal_error('Every custom_attrs key must have its ' \
|
||||
'value defined at custom_attrs_value',
|
||||
VALIDATION_EC)
|
||||
end
|
||||
|
||||
# Check networks
|
||||
|
@ -42,16 +42,6 @@ module OpenNebula
|
||||
:type => :string,
|
||||
:required => false
|
||||
},
|
||||
'custom_attrs' => {
|
||||
:type => :object,
|
||||
:properties => {},
|
||||
:required => false
|
||||
},
|
||||
'custom_attrs_values' => {
|
||||
:type => :object,
|
||||
:properties => {},
|
||||
:required => false
|
||||
},
|
||||
'parents' => {
|
||||
:type => :array,
|
||||
:items => {
|
||||
@ -497,7 +487,7 @@ module OpenNebula
|
||||
instantiate_template = JSON.parse(@body.to_json)
|
||||
else
|
||||
instantiate_template = JSON.parse(@body.to_json)
|
||||
.deep_merge(merge_template)
|
||||
.merge(merge_template)
|
||||
end
|
||||
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user