Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. require 'optparse'
  4. require 'rbvmomi'
  5.  
  6. # but have
  7. OptionParser.new do |opts|
  8. opts.on('-h', '--host=HOST', 'vCenter host') { |v| HOST=v }
  9. opts.on('-u', '--user=NAME', 'vCenter login user') { |v| USER=v }
  10. opts.on('-p', '--password=PASSWORD', 'vCenter password') { |v| PSWD=v }
  11. end.parse!
  12.  
  13. # take defaults from env
  14. unless defined? HOST
  15. HOST=ENV["VC_HOST"]
  16. end
  17.  
  18. unless defined? USER
  19. USER=ENV["VC_USER"]
  20. end
  21.  
  22. unless defined? PSWD
  23. PSWD=ENV["VC_PASSWORD"]
  24. end
  25.  
  26. unless HOST && USER && PSWD
  27. puts <<EOT
  28. Usage: #{$0} [arguments]
  29.  
  30. Mandatory arguments:
  31. --host=name .... vCenter hostname
  32. --user=name .... vCenter login user name
  33. --password=text .... vCenter password
  34. EOT
  35. exit 1
  36. end
  37.  
  38. #####
  39.  
  40. def get(folder, type, entities=[])
  41. return nil if folder == []
  42.  
  43. folder.childEntity.each do |child|
  44. name, junk = child.to_s.split('(')
  45.  
  46. case name
  47. when "Folder"
  48. get(child, type, entities)
  49. when type
  50. entities.push(child)
  51. end
  52. end
  53.  
  54. return entities
  55. end
  56.  
  57. # vCenter connection
  58. VIM = RbVmomi::VIM
  59.  
  60. begin
  61. vim = RbVmomi::VIM.connect(
  62. host: HOST,
  63. user: USER,
  64. password: PSWD,
  65. insecure: true)
  66. rescue RbVmomi::Fault => e
  67. puts "ERROR: #{e.message}"
  68. exit 1
  69. end
  70.  
  71. sc = vim.serviceInstance.content
  72. rf = sc.rootFolder
  73.  
  74. # about
  75. puts "Name: " + sc.about.name.to_s
  76. puts "Version: " + sc.about.version.to_s
  77. puts "Build: " + sc.about.build.to_s
  78. puts "API version: " + sc.about.apiVersion.to_s
  79. puts "Login user: " + USER
  80. puts
  81.  
  82. dirs = [
  83. 'segfault_test/10/test',
  84. 'segfault_test/11/test',
  85. 'segfault_test/12/test',
  86. 'segfault/'
  87. ]
  88.  
  89. get(rf, 'Datacenter').each { |dc|
  90. puts "Datacenter: #{dc.name}"
  91. dc.datastore.each { |ds|
  92. puts "Datastore: #{ds.name}"
  93.  
  94. # create
  95. dirs.each { |n|
  96. directory_name = "[#{ds.name}] #{n}"
  97.  
  98. directory_params = {
  99. :name => directory_name,
  100. :datacenter => dc,
  101. :createParentDirectories => true
  102. }
  103.  
  104. sc.fileManager.MakeDirectory(directory_params)
  105. }
  106.  
  107. # delete
  108. dirs.each { |n|
  109. directory_name = "[#{ds.name}] #{n}"
  110.  
  111. directory_params = {
  112. :name => directory_name,
  113. :datacenter => dc,
  114. }
  115.  
  116. begin
  117. sc.fileManager.DeleteDatastoreFile_Task(directory_params).wait_for_complete
  118. rescue
  119. end
  120. }
  121.  
  122. # Note: if there is sleep enough to process the tasks
  123. # before exit, the vpxd doesn't crash anymore
  124. #sleep 5
  125.  
  126. sc.sessionManager.Logout
  127. vim.close
  128. exit
  129. }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement