request url:
http://#{@sched_host}:#{@sched_port}/boot.libvirt/mac/#{@info['mac']}
Signed-off-by: Xiao Shenwei <xiaoshenwei96(a)163.com>
---
providers/libvirt/lib/consumer.rb | 85 +++++++++++++++++++++++++++++++
1 file changed, 85 insertions(+)
create mode 100644 providers/libvirt/lib/consumer.rb
diff --git a/providers/libvirt/lib/consumer.rb b/providers/libvirt/lib/consumer.rb
new file mode 100644
index 0000000..f1477fe
--- /dev/null
+++ b/providers/libvirt/lib/consumer.rb
@@ -0,0 +1,85 @@
+# SPDX-License-Identifier: MulanPSL-2.0+
+# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved.
+# frozen_string_literal: true
+
+require 'set'
+require 'yaml'
+require 'json'
+require 'rest-client'
+require_relative "#{ENV['CCI_SRC']}/container/defconfig"
+
+# register hostname mac queues
+# request scheduler
+class Consumer
+ attr_reader :info
+
+ def initialize(hostname, queues, logger)
+ @logger = logger
+ @info = { 'hostname' => hostname, 'queues' => queues }
+ host_exists
+ parse_mac_from_hostname
+ defconfig
+ register_info
+ end
+
+ def connect
+ res = RestClient.get("http://#{@sched_host}:#{@sched_port}/boot.libvirt/mac/#{@info['mac']}")
+ if res.empty?
+ @logger.error('Can not connect scheduler')
+ raise 'Can not connect scheduler'
+ end
+ JSON.parse(res)
+ end
+
+ def clean_info
+ RestClient.put(
+ "http://#{@sched_host}:#{@sched_port}/del_host_mac?mac=#{@info['mac']}", {}
+ )
+ RestClient.put(
+ "http://#{@sched_host}:#{@sched_port}/del_host2queues?host=#{@info['hostname']}", {}
+ )
+ end
+
+ private
+
+ def defconfig
+ names = Set.new %w[
+ SCHED_HOST
+ SCHED_PORT
+ ]
+ defaults = relevant_defaults(names)
+ @sched_host = defaults['SCHED_HOST'] || '172.17.0.1'
+ @sched_port = defaults['SCHED_PORT'] || 3000
+ @logger.info("SCHED_HOST: #{@sched_host}")
+ @logger.info("SCHED_PORT: #{@sched_port}")
+ end
+
+ def parse_mac_from_hostname
+ # TODO
+ # use digest/md5 replace
+ cmd = %(echo #{@info['hostname']} |
+ md5sum |
+ sed "s/^\\(..\\)\\(..\\)\\(..\\)\\(..\\)\\(..\\).*$/0a-\\1-\\2-\\3-\\4-\\5/"
+ )
+ @info['mac'] = %x(#{cmd}).chomp
+ @logger.info("Mac address: #{@info['mac']}")
+ end
+
+ def register_info
+ RestClient.put(
+ "http://#{@sched_host}:#{@sched_port}/set_host_mac?hostname=#{@info['hostname']}&mac=#{@info['mac']}", {}
+ )
+ RestClient.put(
+ "http://#{@sched_host}:#{@sched_port}/set_host2queues?host=#{@info['hostname']}&queues=#{@info['queues']}", {}
+ )
+ end
+
+ def host_exists
+ @info['host'] = @info['hostname'].split('.')[0]
+ host_file = "#{ENV['LKP_SRC']}/hosts/#{@info['host']}"
+ return if FileTest.exists?(host_file)
+
+ @logger.error("The file does't exist: #{host_file}")
+ raise "The file does't exist: #{host_file}"
+ end
+end
--
2.23.0