On Sat, Jan 23, 2021 at 02:40:04PM +0800, Xiao Shenwei wrote:
request url: http://$SCHED_HOST:$SCHED_PORT/boot.libvirt/mac/$mac
There are many functions in the file, you can more detail information about the public function.
Thanks, Xueliang
Signed-off-by: Xiao Shenwei xiaoshenwei96@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://#%7B@sched_host%7D:#%7B@sched_port%7D/boot.libvirt/mac/#%7B@info%5B%2...")
- 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