fuel-plugin-nsxv/deployment_scripts/puppet/modules/nsxv/lib/puppet/parser/functions/get_vcenter_cluster_id.rb

45 lines
1.5 KiB
Ruby

require 'rbvmomi'
module Puppet::Parser::Functions
newfunction(:get_vcenter_cluster_id, :type => :rvalue, :doc => <<-EOS
Return a string of vcenter cluster moref id, clusters names get from hiera
vcenter hash. The first argument - vcenter datacenter moref id, where
search clusters, ex:
get_vcenter_cluster_id('datacenter-126')
EOS
) do |args|
datacenter_id=args[0]
vcenter_hash = function_hiera_hash(['vcenter'])
clusters_id=[]
retry_count = 4
vcenter_hash['computes'].each do |cluster_settings|
vc_cluster = cluster_settings['vc_cluster']
vc_host = cluster_settings['vc_host']
vc_password = cluster_settings['vc_password']
vc_user = cluster_settings['vc_user']
begin
vim = RbVmomi::VIM.connect(host: vc_host, ssl: true, insecure: true, user: vc_user, password: vc_password)
rootFolder = vim.serviceInstance.content.rootFolder
dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).find { |x| x.to_s == 'Datacenter("'+datacenter_id+'")' } or fail 'Can not search datacenter with id: ' + datacenter_id
cluster = dc.find_compute_resource(vc_cluster) or fail 'Can not search cluster: ' + vc_cluster
cluster_id = cluster.to_s.gsub!(/^[^"]+"([^"]+)"[^"]*/, '\1')
clusters_id.push(cluster_id)
rescue
retry_count -= 1
if retry_count > 0
sleep 5
retry
else
warning('Can not get moRefId for ' + vc_cluster + ' cluster')
raise
end
end
end
return clusters_id.sort.join(',')
end
end