knife-vsphere 1.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef/knife/base_vsphere_command.rb +383 -371
  3. data/lib/chef/knife/customization_helper.rb +40 -0
  4. data/lib/chef/knife/vsphere_cluster_list.rb +47 -0
  5. data/lib/chef/knife/vsphere_cpu_ratio.rb +41 -45
  6. data/lib/chef/knife/vsphere_customization_list.rb +24 -29
  7. data/lib/chef/knife/vsphere_datastore_list.rb +68 -72
  8. data/lib/chef/knife/vsphere_datastore_maxfree.rb +48 -49
  9. data/lib/chef/knife/vsphere_datastorecluster_list.rb +66 -71
  10. data/lib/chef/knife/vsphere_datastorecluster_maxfree.rb +75 -84
  11. data/lib/chef/knife/vsphere_folder_list.rb +28 -30
  12. data/lib/chef/knife/vsphere_hosts_list.rb +42 -42
  13. data/lib/chef/knife/vsphere_pool_list.rb +46 -48
  14. data/lib/chef/knife/vsphere_pool_query.rb +58 -58
  15. data/lib/chef/knife/vsphere_template_list.rb +30 -32
  16. data/lib/chef/knife/vsphere_vlan_create.rb +51 -0
  17. data/lib/chef/knife/vsphere_vlan_list.rb +35 -37
  18. data/lib/chef/knife/vsphere_vm_clone.rb +834 -581
  19. data/lib/chef/knife/vsphere_vm_config.rb +48 -46
  20. data/lib/chef/knife/vsphere_vm_delete.rb +70 -66
  21. data/lib/chef/knife/vsphere_vm_execute.rb +62 -66
  22. data/lib/chef/knife/vsphere_vm_list.rb +57 -61
  23. data/lib/chef/knife/vsphere_vm_markastemplate.rb +48 -54
  24. data/lib/chef/knife/vsphere_vm_migrate.rb +73 -0
  25. data/lib/chef/knife/vsphere_vm_move.rb +88 -0
  26. data/lib/chef/knife/vsphere_vm_net.rb +57 -0
  27. data/lib/chef/knife/vsphere_vm_property_get.rb +44 -46
  28. data/lib/chef/knife/vsphere_vm_property_set.rb +83 -84
  29. data/lib/chef/knife/vsphere_vm_query.rb +48 -48
  30. data/lib/chef/knife/vsphere_vm_snapshot.rb +124 -130
  31. data/lib/chef/knife/vsphere_vm_state.rb +122 -127
  32. data/lib/chef/knife/vsphere_vm_toolsconfig.rb +54 -52
  33. data/lib/chef/knife/vsphere_vm_vmdk_add.rb +234 -241
  34. data/lib/chef/knife/vsphere_vm_wait_sysprep.rb +54 -0
  35. data/lib/knife-vsphere/version.rb +3 -4
  36. metadata +43 -15
  37. data/lib/chef/knife/vshpere_vm_migrate.rb +0 -80
  38. data/lib/chef/knife/vshpere_vm_move.rb +0 -92
  39. data/lib/chef/knife/vshpere_vm_net.rb +0 -57
@@ -1,71 +1,66 @@
1
- # Copyright (C) 2012, SCM Ventures AB
2
- # Author: Ian Delahorne <ian@scmventures.se>
3
- #
4
- # Permission to use, copy, modify, and/or distribute this software for
5
- # any purpose with or without fee is hereby granted, provided that the
6
- # above copyright notice and this permission notice appear in all
7
- # copies.
8
- #
9
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
- # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
- # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
- # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
- # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
- # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
- # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
- # PERFORMANCE OF THIS SOFTWARE
17
-
18
- require 'chef/knife'
19
- require 'chef/knife/base_vsphere_command'
20
-
21
- def number_to_human_size(number)
22
- number = number.to_f
23
- storage_units_fmt = ["byte", "kB", "MB", "GB", "TB"]
24
- base = 1024
25
- if number.to_i < base
26
- unit = storage_units_fmt[0]
27
- else
28
- max_exp = storage_units_fmt.size - 1
29
- exponent = (Math.log(number) / Math.log(base)).to_i # Convert to base
30
- exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
31
- number /= base ** exponent
32
- unit = storage_units_fmt[exponent]
33
- end
34
-
35
- return sprintf("%0.2f %s", number, unit)
36
- end
37
-
38
- def traverse_folders_for_dsclusters(folder)
39
- print_dsclusters_in_folder(folder)
40
- folder.childEntity.each do |child|
41
- if child.class.to_s == 'Folder'
42
- traverse_folders_for_dsclusters(child)
43
- end
44
- end
45
- end
46
-
47
- def print_dsclusters_in_folder (folder)
48
- folder.childEntity.each do |child|
49
- if child.class.to_s == "StoragePod"
50
- avail = number_to_human_size(child.summary[:freeSpace])
51
- cap = number_to_human_size(child.summary[:capacity])
52
- puts "#{ui.color("DatastoreCluster", :cyan)}: #{child.name} (#{avail} / #{cap})"
53
- end
54
- end
55
- end
56
-
57
- # Lists all known data store cluster in datacenter with sizes
58
- class Chef::Knife::VsphereDatastoreclusterList < Chef::Knife::BaseVsphereCommand
59
-
60
- banner "knife vsphere datastorecluster list"
61
-
62
- get_common_options
63
-
64
- def run
65
- $stdout.sync = true
66
- vim = get_vim_connection
67
- dc = get_datacenter
68
- traverse_folders_for_dsclusters(dc.datastoreFolder)
69
- end
70
- end
71
-
1
+ # Copyright (C) 2012, SCM Ventures AB
2
+ # Author: Ian Delahorne <ian@scmventures.se>
3
+ #
4
+ # Permission to use, copy, modify, and/or distribute this software for
5
+ # any purpose with or without fee is hereby granted, provided that the
6
+ # above copyright notice and this permission notice appear in all
7
+ # copies.
8
+ #
9
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
+ # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
+ # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
+ # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
+ # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
+ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
+ # PERFORMANCE OF THIS SOFTWARE
17
+
18
+ require 'chef/knife'
19
+ require 'chef/knife/base_vsphere_command'
20
+
21
+ def number_to_human_size(number)
22
+ number = number.to_f
23
+ storage_units_fmt = %w(byte kB MB GB TB)
24
+ base = 1024
25
+ if number.to_i < base
26
+ unit = storage_units_fmt[0]
27
+ else
28
+ max_exp = storage_units_fmt.size - 1
29
+ exponent = (Math.log(number) / Math.log(base)).to_i # Convert to base
30
+ exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
31
+ number /= base**exponent
32
+ unit = storage_units_fmt[exponent]
33
+ end
34
+
35
+ format('%0.2f %s', number, unit)
36
+ end
37
+
38
+ def traverse_folders_for_dsclusters(folder)
39
+ print_dsclusters_in_folder(folder)
40
+ folder.childEntity.each do |child|
41
+ traverse_folders_for_dsclusters(child) if child.class.to_s == 'Folder'
42
+ end
43
+ end
44
+
45
+ def print_dsclusters_in_folder(folder)
46
+ folder.childEntity.each do |child|
47
+ next unless child.class.to_s == 'StoragePod'
48
+ avail = number_to_human_size(child.summary[:freeSpace])
49
+ cap = number_to_human_size(child.summary[:capacity])
50
+ puts "#{ui.color('DatastoreCluster', :cyan)}: #{child.name} (#{avail} / #{cap})"
51
+ end
52
+ end
53
+
54
+ # Lists all known data store cluster in datacenter with sizes
55
+ class Chef::Knife::VsphereDatastoreclusterList < Chef::Knife::BaseVsphereCommand
56
+ banner 'knife vsphere datastorecluster list'
57
+
58
+ common_options
59
+
60
+ def run
61
+ $stdout.sync = true
62
+ vim_connection
63
+ dc = datacenter
64
+ traverse_folders_for_dsclusters(dc.datastoreFolder)
65
+ end
66
+ end
@@ -1,84 +1,75 @@
1
- # Copyright (C) 2012, SCM Ventures AB
2
- # Author: Ian Delahorne <ian@scmventures.se>
3
- #
4
- # Permission to use, copy, modify, and/or distribute this software for
5
- # any purpose with or without fee is hereby granted, provided that the
6
- # above copyright notice and this permission notice appear in all
7
- # copies.
8
- #
9
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
- # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
- # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
- # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
- # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
- # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
- # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
- # PERFORMANCE OF THIS SOFTWARE
17
-
18
- require 'chef/knife'
19
- require 'chef/knife/base_vsphere_command'
20
-
21
- def is_max_dscluster(dscluster, max_dscluster)
22
- if ! max_dscluster
23
- return true
24
- end
25
-
26
- if dscluster.summary[:freeSpace] > max_dscluster.summary[:freeSpace]
27
- return true
28
- end
29
-
30
- return false
31
- end
32
-
33
- def find_max_dscluster(folder, max_dscluster, regex)
34
- folder.childEntity.each do |child|
35
- if child.class.to_s == 'Folder'
36
- sub_max = find_max_dscluster(child, max_dscluster, regex)
37
- if is_max_dscluster(sub_max, max_dscluster)
38
- max_dscluster = sub_max
39
- end
40
- elsif child.class.to_s == 'StoragePod'
41
-
42
- if is_max_dscluster(child, max_dscluster) && regex.match(child.name)
43
- max_dscluster = child
44
- end
45
- end
46
- end
47
-
48
- return max_dscluster
49
- end
50
-
51
- # Gets the data store cluster with the most free space in datacenter
52
- class Chef::Knife::VsphereDatastoreclusterMaxfree < Chef::Knife::BaseVsphereCommand
53
-
54
- banner "knife vsphere datastorecluster maxfree"
55
-
56
- option :regex,
57
- :short => "-r REGEX",
58
- :long => "--regex REGEX",
59
- :description => "Regex to match the datastore cluster name"
60
- get_common_options
61
- $default[:regex] = ''
62
-
63
- def run
64
- $stdout.sync = true
65
-
66
- vim = get_vim_connection
67
- dcname = get_config(:vsphere_dc)
68
- regex = /#{Regexp.escape( get_config(:regex))}/
69
- max_dscluster = nil
70
-
71
- vim = get_vim_connection
72
- dc = get_datacenter
73
-
74
- max_dscluster = find_max_dscluster(dc.datastoreFolder, max_dscluster, regex)
75
-
76
- if max_dscluster
77
- puts max_dscluster.name
78
- else
79
- puts "No datastore clusters found"
80
- exit 1
81
- end
82
-
83
- end
84
- end
1
+ # Copyright (C) 2012, SCM Ventures AB
2
+ # Author: Ian Delahorne <ian@scmventures.se>
3
+ #
4
+ # Permission to use, copy, modify, and/or distribute this software for
5
+ # any purpose with or without fee is hereby granted, provided that the
6
+ # above copyright notice and this permission notice appear in all
7
+ # copies.
8
+ #
9
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10
+ # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12
+ # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13
+ # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
14
+ # OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15
+ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16
+ # PERFORMANCE OF THIS SOFTWARE
17
+
18
+ require 'chef/knife'
19
+ require 'chef/knife/base_vsphere_command'
20
+
21
+ def max_dscluster(dscluster, max_dscluster)
22
+ return true unless max_dscluster
23
+
24
+ if dscluster.summary[:freeSpace] > max_dscluster.summary[:freeSpace]
25
+ return true
26
+ end
27
+
28
+ false
29
+ end
30
+
31
+ def find_max_dscluster(folder, max_dscluster, regex)
32
+ folder.childEntity.each do |child|
33
+ if child.class.to_s == 'Folder'
34
+ sub_max = find_max_dscluster(child, max_dscluster, regex)
35
+ max_dscluster = sub_max if max_dscluster(sub_max, max_dscluster)
36
+ elsif child.class.to_s == 'StoragePod'
37
+ if max_dscluster(child, max_dscluster) && regex.match(child.name)
38
+ max_dscluster = child
39
+ end
40
+ end
41
+ end
42
+
43
+ max_dscluster
44
+ end
45
+
46
+ # Gets the data store cluster with the most free space in datacenter
47
+ class Chef::Knife::VsphereDatastoreclusterMaxfree < Chef::Knife::BaseVsphereCommand
48
+ banner 'knife vsphere datastorecluster maxfree'
49
+
50
+ option :regex,
51
+ short: '-r REGEX',
52
+ long: '--regex REGEX',
53
+ description: 'Regex to match the datastore cluster name',
54
+ default: ''
55
+ common_options
56
+
57
+ def run
58
+ $stdout.sync = true
59
+
60
+ regex = /#{Regexp.escape(get_config(:regex))}/
61
+ max_dscluster = nil
62
+
63
+ vim_connection
64
+ dc = datacenter
65
+
66
+ max_dscluster = find_max_dscluster(dc.datastoreFolder, max_dscluster, regex)
67
+
68
+ if max_dscluster
69
+ puts max_dscluster.name
70
+ else
71
+ puts 'No datastore clusters found'
72
+ exit 1
73
+ end
74
+ end
75
+ end
@@ -1,30 +1,28 @@
1
- #
2
- # Author:: Ezra Pagel (<ezra@cpan.org>)
3
- # License:: Apache License, Version 2.0
4
- #
5
- require 'chef/knife'
6
- require 'chef/knife/base_vsphere_command'
7
-
8
- # Lists all vm folders
9
- class Chef::Knife::VsphereFolderList < Chef::Knife::BaseVsphereCommand
10
-
11
- banner "knife vsphere folder list"
12
-
13
- get_common_options
14
-
15
- def traverse_folders(folder, indent_level)
16
-
17
- puts "#{" " * indent_level} #{ui.color("Folder", :cyan)}: " + folder.name
18
-
19
- folders = find_all_in_folder(folder, RbVmomi::VIM::Folder)
20
- folders.each do |child|
21
- traverse_folders(child, indent_level + 1)
22
- end
23
- end
24
-
25
- def run
26
- vim = get_vim_connection
27
- baseFolder = find_folder(get_config(:folder));
28
- traverse_folders(baseFolder, 0)
29
- end
30
- end
1
+ #
2
+ # Author:: Ezra Pagel (<ezra@cpan.org>)
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ require 'chef/knife'
6
+ require 'chef/knife/base_vsphere_command'
7
+
8
+ # Lists all vm folders
9
+ class Chef::Knife::VsphereFolderList < Chef::Knife::BaseVsphereCommand
10
+ banner 'knife vsphere folder list'
11
+
12
+ common_options
13
+
14
+ def traverse_folders(folder, indent_level)
15
+ puts "#{' ' * indent_level} #{ui.color('Folder', :cyan)}: " + folder.name
16
+
17
+ folders = find_all_in_folder(folder, RbVmomi::VIM::Folder)
18
+ folders.each do |child|
19
+ traverse_folders(child, indent_level + 1)
20
+ end
21
+ end
22
+
23
+ def run
24
+ vim_connection
25
+ base_folder = find_folder(get_config(:folder))
26
+ traverse_folders(base_folder, 0)
27
+ end
28
+ end
@@ -1,42 +1,42 @@
1
- require 'chef/knife'
2
- require 'chef/knife/base_vsphere_command'
3
- require 'rbvmomi'
4
- require 'netaddr'
5
-
6
- #list hosts belonging to pool
7
- class Chef::Knife::VsphereHostsList < Chef::Knife::BaseVsphereCommand
8
- banner "knife vsphere hosts list"
9
-
10
- get_common_options
11
- option :pool,
12
- :long => "--pool pool",
13
- :short => "-h",
14
- :description => "Target pool"
15
-
16
- def find_pools(folder, poolname = nil)
17
- pools = folder.children.find_all.select {|p| p.is_a?(RbVmomi::VIM::ComputeResource) || p.is_a?(RbVmomi::VIM::ResourcePool) }
18
- poolname.nil? ? pools : pools.select {|p| p.name == poolname }
19
- end
20
-
21
- def run
22
- vim = get_vim_connection
23
- dc = get_datacenter
24
- folder = dc.hostFolder
25
-
26
- target_pool = config[:pool]
27
-
28
- pools = find_pools(folder, target_pool)
29
- if target_pool && pools.empty?
30
- puts "Pool #{target_pool} not found"
31
- return
32
- end
33
-
34
- pools.each do |pool|
35
- puts "#{ui.color("Pool", :cyan)}: #{pool.name}"
36
- hosts = pool.host || []
37
- hosts.each do |hostc|
38
- puts " #{ui.color("Host", :cyan)}: #{hostc.name}"
39
- end
40
- end
41
- end
42
- end
1
+ require 'chef/knife'
2
+ require 'chef/knife/base_vsphere_command'
3
+ require 'rbvmomi'
4
+ require 'netaddr'
5
+
6
+ # list hosts belonging to pool
7
+ class Chef::Knife::VsphereHostsList < Chef::Knife::BaseVsphereCommand
8
+ banner 'knife vsphere hosts list'
9
+
10
+ common_options
11
+ option :pool,
12
+ long: '--pool pool',
13
+ short: '-h',
14
+ description: 'Target pool'
15
+
16
+ def find_pools(folder, poolname = nil)
17
+ pools = folder.children.find_all.select { |p| p.is_a?(RbVmomi::VIM::ComputeResource) || p.is_a?(RbVmomi::VIM::ResourcePool) }
18
+ poolname.nil? ? pools : pools.select { |p| p.name == poolname }
19
+ end
20
+
21
+ def run
22
+ vim_connection
23
+ dc = datacenter
24
+ folder = dc.hostFolder
25
+
26
+ target_pool = config[:pool]
27
+
28
+ pools = find_pools(folder, target_pool)
29
+ if target_pool && pools.empty?
30
+ puts "Pool #{target_pool} not found"
31
+ return
32
+ end
33
+
34
+ pools.each do |pool|
35
+ puts "#{ui.color('Pool', :cyan)}: #{pool.name}"
36
+ hosts = pool.host || []
37
+ hosts.each do |hostc|
38
+ puts " #{ui.color('Host', :cyan)}: #{hostc.name}"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,48 +1,46 @@
1
- #
2
- # Author:: Jesse Campbell (<hikeit@gmail.com>)
3
- # License:: Apache License, Version 2.0
4
- #
5
- require 'chef/knife'
6
- require 'chef/knife/base_vsphere_command'
7
-
8
- # Lists all known pools in the configured datacenter
9
- class Chef::Knife::VspherePoolList < Chef::Knife::BaseVsphereCommand
10
-
11
- banner "knife vsphere pool list"
12
-
13
- get_common_options
14
-
15
- def traverse_folders(folder)
16
- return if folder.is_a? RbVmomi::VIM::VirtualApp
17
-
18
- if folder.is_a? RbVmomi::VIM::ResourcePool
19
- pools = folder.path[3..-1].reject { |p| p.last == "Resources" }
20
- puts "#{ui.color("Pool", :cyan)}: " + pools.map(&:last).join('/')
21
- end
22
-
23
- folders = find_all_in_folder(folder, RbVmomi::VIM::ManagedObject) || []
24
- folders.each do |child|
25
- traverse_folders(child)
26
- end
27
-
28
- end
29
-
30
- def find_pool_folder(folderName)
31
- dc = get_datacenter
32
- baseEntity = dc.hostFolder
33
- entityArray = folderName.split('/')
34
- entityArray.each do |entityArrItem|
35
- if entityArrItem != ''
36
- baseEntity = baseEntity.childEntity.grep(RbVmomi::VIM::ManagedObject).find { |f| f.name == entityArrItem } or
37
- abort "no such folder #{folderName} while looking for #{entityArrItem}"
38
- end
39
- end
40
- baseEntity
41
- end
42
-
43
- def run
44
- vim = get_vim_connection
45
- baseFolder = find_pool_folder(get_config(:folder));
46
- traverse_folders(baseFolder)
47
- end
48
- end
1
+ #
2
+ # Author:: Jesse Campbell (<hikeit@gmail.com>)
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ require 'chef/knife'
6
+ require 'chef/knife/base_vsphere_command'
7
+
8
+ # Lists all known pools in the configured datacenter
9
+ class Chef::Knife::VspherePoolList < Chef::Knife::BaseVsphereCommand
10
+ banner 'knife vsphere pool list'
11
+
12
+ common_options
13
+
14
+ def traverse_folders(folder)
15
+ return if folder.is_a? RbVmomi::VIM::VirtualApp
16
+
17
+ if folder.is_a? RbVmomi::VIM::ResourcePool
18
+ pools = folder.path[3..-1].reject { |p| p.last == 'Resources' }
19
+ puts "#{ui.color('Pool', :cyan)}: " + pools.map(&:last).join('/')
20
+ end
21
+
22
+ folders = find_all_in_folder(folder, RbVmomi::VIM::ManagedObject) || []
23
+ folders.each do |child|
24
+ traverse_folders(child)
25
+ end
26
+ end
27
+
28
+ def find_pool_folder(folderName)
29
+ dc = datacenter
30
+ base_entity = dc.hostFolder
31
+ entity_array = folderName.split('/')
32
+ entity_array.each do |entityArrItem|
33
+ if entityArrItem != ''
34
+ base_entity = base_entity.childEntity.grep(RbVmomi::VIM::ManagedObject).find { |f| f.name == entityArrItem } ||
35
+ abort("no such folder #{folderName} while looking for #{entityArrItem}")
36
+ end
37
+ end
38
+ base_entity
39
+ end
40
+
41
+ def run
42
+ vim_connection
43
+ base_folder = find_pool_folder(get_config(:folder))
44
+ traverse_folders(base_folder)
45
+ end
46
+ end