116 lines
4.4 KiB
Ruby
116 lines
4.4 KiB
Ruby
# Copyright 2013 Mirantis, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
require 'naily/reporter'
|
|
|
|
module Naily
|
|
class Dispatcher
|
|
def initialize(producer)
|
|
@orchestrator = Astute::Orchestrator.new(nil, log_parsing=true)
|
|
@producer = producer
|
|
@default_result = {'status' => 'ready', 'progress' => 100}
|
|
@provisionLogParser = Astute::LogParser::ParseProvisionLogs.new
|
|
end
|
|
|
|
def echo(args)
|
|
Naily.logger.info 'Running echo command'
|
|
args
|
|
end
|
|
|
|
def download_release(data)
|
|
# Example of message = {
|
|
# {'method': 'download_release',
|
|
# 'respond_to': 'download_release_resp',
|
|
# 'args':{
|
|
# 'task_uuid': 'task UUID',
|
|
# 'release_info':{
|
|
# 'release_id': 'release ID',
|
|
# 'redhat':{
|
|
# 'license_type' :"rhn" or "rhsm",
|
|
# 'username': 'username',
|
|
# 'password': 'password',
|
|
# 'satellite': 'satellite host (for RHN license)'
|
|
# 'activation_key': 'activation key (for RHN license)'
|
|
# }
|
|
# }
|
|
# }}
|
|
Naily.logger.info("'download_release' method called with data: #{data.inspect}")
|
|
reporter = Naily::Reporter.new(@producer, data['respond_to'], data['args']['task_uuid'])
|
|
release_info = data['args']['release_info']['redhat']
|
|
begin
|
|
result = @orchestrator.download_release(reporter, data['args']['task_uuid'], release_info)
|
|
rescue Timeout::Error
|
|
msg = "Timeout of release download is exceeded."
|
|
Naily.logger.error msg
|
|
reporter.report({'status' => 'error', 'error' => msg})
|
|
return
|
|
end
|
|
end
|
|
|
|
def provision(data)
|
|
Naily.logger.info("'Orchestrator.provision' method called with data: #{data.inspect}")
|
|
|
|
reporter = Naily::Reporter.new(@producer, data['respond_to'], data['args']['task_uuid'])
|
|
|
|
@orchestrator.provision(reporter, data['args']['engine'], data['args']['nodes'])
|
|
Naily.logger.info("'Orchestrator.provision' method end")
|
|
return
|
|
end
|
|
|
|
def deploy(data)
|
|
Naily.logger.info("'Orchestrator.deploy' method called with data: #{data.inspect}")
|
|
|
|
reporter = Naily::Reporter.new(@producer, data['respond_to'], data['args']['task_uuid'])
|
|
@orchestrator.naily_deploy(reporter, data['args']['task_uuid'], data['args']['nodes'], data['args']['attributes'])
|
|
end
|
|
|
|
def verify_networks(data)
|
|
reporter = Naily::Reporter.new(@producer, data['respond_to'], data['args']['task_uuid'])
|
|
args = data['args']
|
|
result = @orchestrator.verify_networks(reporter, data['args']['task_uuid'], args['nodes'])
|
|
report_result(result, reporter)
|
|
end
|
|
|
|
def remove_nodes(data)
|
|
reporter = Naily::Reporter.new(@producer, data['respond_to'], data['args']['task_uuid'])
|
|
nodes = data['args']['nodes']
|
|
provision_engine = Astute::Provision::Cobbler.new(data['args']['engine'])
|
|
data['args']['engine_nodes'].each do |name|
|
|
if provision_engine.system_exists(name)
|
|
Naily.logger.info("Removing system from cobbler: #{name}")
|
|
provision_engine.remove_system(name)
|
|
if not provision_engine.system_exists(name)
|
|
Naily.logger.info("System has been successfully removed from cobbler: #{name}")
|
|
else
|
|
Naily.logger.error("Cannot remove node from cobbler: #{name}")
|
|
end
|
|
else
|
|
Naily.logger.info("System is not in cobbler: #{name}")
|
|
end
|
|
end
|
|
Naily.logger.debug("Cobbler syncing")
|
|
provision_engine.sync
|
|
result = @orchestrator.remove_nodes(reporter, data['args']['task_uuid'], nodes)
|
|
report_result(result, reporter)
|
|
end
|
|
|
|
private
|
|
def report_result(result, reporter)
|
|
result = {} unless result.instance_of?(Hash)
|
|
status = @default_result.merge(result)
|
|
reporter.report(status)
|
|
end
|
|
end
|
|
end
|