corl 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/VERSION +1 -1
  4. data/bootstrap/os/ubuntu/06_puppet.sh +1 -1
  5. data/corl.gemspec +171 -3
  6. data/lib/CORL/builder/identity.rb +6 -3
  7. data/lib/CORL/builder/package.rb +3 -3
  8. data/lib/CORL/configuration/file.rb +21 -7
  9. data/lib/CORL/machine/vagrant.rb +3 -3
  10. data/lib/CORL/node/vagrant.rb +2 -5
  11. data/lib/CORL/provisioner/puppetnode.rb +8 -8
  12. data/lib/core/facade.rb +7 -3
  13. data/lib/core/mixin/action/keypair.rb +3 -3
  14. data/lib/core/mixin/action/registration.rb +31 -0
  15. data/lib/core/mixin/lookup.rb +50 -6
  16. data/lib/core/mixin/machine/ssh.rb +4 -4
  17. data/lib/core/plugin/cloud_action.rb +8 -1
  18. data/lib/core/plugin/configuration.rb +6 -7
  19. data/lib/core/plugin/fog_node.rb +7 -0
  20. data/lib/core/plugin/network.rb +31 -0
  21. data/lib/core/plugin/node.rb +182 -117
  22. data/lib/core/vagrant/provisioner/provisioner.rb +1 -1
  23. data/lib/nucleon/action/cloud/config.rb +259 -0
  24. data/lib/nucleon/action/cloud/images.rb +1 -1
  25. data/lib/nucleon/action/cloud/inspect.rb +11 -2
  26. data/lib/nucleon/action/cloud/machines.rb +1 -1
  27. data/lib/nucleon/action/cloud/regions.rb +1 -1
  28. data/lib/nucleon/action/cloud/settings.rb +185 -0
  29. data/lib/nucleon/action/node/IP.rb +1 -1
  30. data/lib/nucleon/action/node/bootstrap.rb +1 -1
  31. data/lib/nucleon/action/node/cache.rb +133 -0
  32. data/lib/nucleon/action/node/fact.rb +119 -0
  33. data/lib/nucleon/action/node/facts.rb +16 -16
  34. data/lib/nucleon/action/node/group.rb +115 -0
  35. data/lib/nucleon/action/node/groups.rb +33 -0
  36. data/lib/nucleon/action/node/identity.rb +75 -0
  37. data/lib/nucleon/action/node/lookup.rb +20 -7
  38. data/lib/nucleon/action/node/seed.rb +6 -6
  39. data/lib/nucleon/action/node/status.rb +76 -0
  40. data/lib/nucleon/action/plugin/create.rb +169 -0
  41. data/lib/nucleon/action/plugin/list.rb +69 -0
  42. data/lib/nucleon/action/plugin/template/nucleon.action.erb +56 -0
  43. data/lib/nucleon/action/plugins.rb +14 -0
  44. data/locales/en.yml +3 -0
  45. data/rdoc/site/0.5.0/CORL/Build.html +757 -0
  46. data/rdoc/site/0.5.0/CORL/Builder/Identity.html +569 -0
  47. data/rdoc/site/0.5.0/CORL/Builder/Package.html +576 -0
  48. data/rdoc/site/0.5.0/CORL/Builder.html +360 -0
  49. data/rdoc/site/0.5.0/CORL/Configuration/File.html +1148 -0
  50. data/rdoc/site/0.5.0/CORL/Configuration.html +359 -0
  51. data/rdoc/site/0.5.0/CORL/Errors.html +359 -0
  52. data/rdoc/site/0.5.0/CORL/Facade.html +899 -0
  53. data/rdoc/site/0.5.0/CORL/Machine/AWS.html +753 -0
  54. data/rdoc/site/0.5.0/CORL/Machine/Fog.html +1289 -0
  55. data/rdoc/site/0.5.0/CORL/Machine/Physical.html +1059 -0
  56. data/rdoc/site/0.5.0/CORL/Machine/Rackspace.html +534 -0
  57. data/rdoc/site/0.5.0/CORL/Machine/Vagrant.html +1320 -0
  58. data/rdoc/site/0.5.0/CORL/Machine.html +363 -0
  59. data/rdoc/site/0.5.0/CORL/Mixin/Action/Keypair.html +592 -0
  60. data/rdoc/site/0.5.0/CORL/Mixin/Action.html +359 -0
  61. data/rdoc/site/0.5.0/CORL/Mixin/Builder/Global.html +604 -0
  62. data/rdoc/site/0.5.0/CORL/Mixin/Builder/Instance.html +696 -0
  63. data/rdoc/site/0.5.0/CORL/Mixin/Builder.html +359 -0
  64. data/rdoc/site/0.5.0/CORL/Mixin/Lookup.html +1139 -0
  65. data/rdoc/site/0.5.0/CORL/Mixin/Machine/SSH.html +675 -0
  66. data/rdoc/site/0.5.0/CORL/Mixin/Machine.html +359 -0
  67. data/rdoc/site/0.5.0/CORL/Mixin/Macro/NetworkSettings.html +484 -0
  68. data/rdoc/site/0.5.0/CORL/Mixin/Macro.html +359 -0
  69. data/rdoc/site/0.5.0/CORL/Mixin.html +363 -0
  70. data/rdoc/site/0.5.0/CORL/Network/CORL.html +411 -0
  71. data/rdoc/site/0.5.0/CORL/Network.html +359 -0
  72. data/rdoc/site/0.5.0/CORL/Node/AWS.html +736 -0
  73. data/rdoc/site/0.5.0/CORL/Node/Fog.html +1212 -0
  74. data/rdoc/site/0.5.0/CORL/Node/Local.html +444 -0
  75. data/rdoc/site/0.5.0/CORL/Node/Rackspace.html +729 -0
  76. data/rdoc/site/0.5.0/CORL/Node/Vagrant.html +1476 -0
  77. data/rdoc/site/0.5.0/CORL/Node.html +363 -0
  78. data/rdoc/site/0.5.0/CORL/Plugin/Builder.html +500 -0
  79. data/rdoc/site/0.5.0/CORL/Plugin/Configuration.html +1271 -0
  80. data/rdoc/site/0.5.0/CORL/Plugin/Machine.html +1299 -0
  81. data/rdoc/site/0.5.0/CORL/Plugin/Network.html +1580 -0
  82. data/rdoc/site/0.5.0/CORL/Plugin/Node.html +4041 -0
  83. data/rdoc/site/0.5.0/CORL/Plugin/Provisioner.html +1115 -0
  84. data/rdoc/site/0.5.0/CORL/Plugin.html +649 -0
  85. data/rdoc/site/0.5.0/CORL/Provisioner/Puppetnode.html +1177 -0
  86. data/rdoc/site/0.5.0/CORL/Provisioner.html +359 -0
  87. data/rdoc/site/0.5.0/CORL/Util/Puppet/Resource.html +1058 -0
  88. data/rdoc/site/0.5.0/CORL/Util/Puppet/ResourceGroup.html +940 -0
  89. data/rdoc/site/0.5.0/CORL/Util/Puppet.html +1107 -0
  90. data/rdoc/site/0.5.0/CORL/Util.html +361 -0
  91. data/rdoc/site/0.5.0/CORL/Vagrant/Config.html +943 -0
  92. data/rdoc/site/0.5.0/CORL/Vagrant.html +438 -0
  93. data/rdoc/site/0.5.0/CORL.html +471 -0
  94. data/rdoc/site/0.5.0/Fog/Compute/AWS/Server.html +443 -0
  95. data/rdoc/site/0.5.0/Fog/Compute/AWS.html +365 -0
  96. data/rdoc/site/0.5.0/Fog/Compute/RackspaceV2/Server.html +428 -0
  97. data/rdoc/site/0.5.0/Fog/Compute/RackspaceV2.html +365 -0
  98. data/rdoc/site/0.5.0/Fog/Compute.html +360 -0
  99. data/rdoc/site/0.5.0/Fog.html +360 -0
  100. data/rdoc/site/0.5.0/Hiera/Backend.html +442 -0
  101. data/rdoc/site/0.5.0/Hiera/Corl_logger.html +469 -0
  102. data/rdoc/site/0.5.0/Hiera.html +366 -0
  103. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Create.html +538 -0
  104. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Hiera.html +566 -0
  105. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Images.html +572 -0
  106. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Inspect.html +524 -0
  107. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Machines.html +567 -0
  108. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Regions.html +567 -0
  109. data/rdoc/site/0.5.0/Nucleon/Action/Cloud/Vagrantfile.html +515 -0
  110. data/rdoc/site/0.5.0/Nucleon/Action/Cloud.html +365 -0
  111. data/rdoc/site/0.5.0/Nucleon/Action/Node/Authorize.html +543 -0
  112. data/rdoc/site/0.5.0/Nucleon/Action/Node/Bootstrap.html +604 -0
  113. data/rdoc/site/0.5.0/Nucleon/Action/Node/Build.html +526 -0
  114. data/rdoc/site/0.5.0/Nucleon/Action/Node/Destroy.html +573 -0
  115. data/rdoc/site/0.5.0/Nucleon/Action/Node/Exec.html +530 -0
  116. data/rdoc/site/0.5.0/Nucleon/Action/Node/Facts.html +456 -0
  117. data/rdoc/site/0.5.0/Nucleon/Action/Node/IP.html +453 -0
  118. data/rdoc/site/0.5.0/Nucleon/Action/Node/Image.html +573 -0
  119. data/rdoc/site/0.5.0/Nucleon/Action/Node/Keypair.html +572 -0
  120. data/rdoc/site/0.5.0/Nucleon/Action/Node/Lookup.html +532 -0
  121. data/rdoc/site/0.5.0/Nucleon/Action/Node/Provision.html +553 -0
  122. data/rdoc/site/0.5.0/Nucleon/Action/Node/Reboot.html +573 -0
  123. data/rdoc/site/0.5.0/Nucleon/Action/Node/Revoke.html +541 -0
  124. data/rdoc/site/0.5.0/Nucleon/Action/Node/SSH.html +583 -0
  125. data/rdoc/site/0.5.0/Nucleon/Action/Node/Seed.html +602 -0
  126. data/rdoc/site/0.5.0/Nucleon/Action/Node/Spawn.html +675 -0
  127. data/rdoc/site/0.5.0/Nucleon/Action/Node/Start.html +573 -0
  128. data/rdoc/site/0.5.0/Nucleon/Action/Node/Stop.html +573 -0
  129. data/rdoc/site/0.5.0/Nucleon/Action/Node.html +376 -0
  130. data/rdoc/site/0.5.0/Nucleon/Action.html +383 -0
  131. data/rdoc/site/0.5.0/Nucleon/Config.html +377 -0
  132. data/rdoc/site/0.5.0/Nucleon/Event/Puppet.html +693 -0
  133. data/rdoc/site/0.5.0/Nucleon/Event.html +359 -0
  134. data/rdoc/site/0.5.0/Nucleon/Plugin/Base.html +365 -0
  135. data/rdoc/site/0.5.0/Nucleon/Plugin/CloudAction.html +838 -0
  136. data/rdoc/site/0.5.0/Nucleon/Plugin.html +360 -0
  137. data/rdoc/site/0.5.0/Nucleon/Template/Environment.html +548 -0
  138. data/rdoc/site/0.5.0/Nucleon/Template.html +359 -0
  139. data/rdoc/site/0.5.0/Nucleon.html +387 -0
  140. data/rdoc/site/0.5.0/Object.html +378 -0
  141. data/rdoc/site/0.5.0/Puppet/DataBinding/Corl.html +365 -0
  142. data/rdoc/site/0.5.0/Puppet/DataBinding.html +358 -0
  143. data/rdoc/site/0.5.0/Puppet/Indirector/Corl.html +477 -0
  144. data/rdoc/site/0.5.0/Puppet/Indirector.html +358 -0
  145. data/rdoc/site/0.5.0/Puppet/Parser/Functions.html +500 -0
  146. data/rdoc/site/0.5.0/Puppet/Parser.html +358 -0
  147. data/rdoc/site/0.5.0/Puppet.html +358 -0
  148. data/rdoc/site/0.5.0/README_rdoc.html +360 -0
  149. data/rdoc/site/0.5.0/Vagrant/Config/Loader.html +419 -0
  150. data/rdoc/site/0.5.0/Vagrant/Config.html +359 -0
  151. data/rdoc/site/0.5.0/Vagrant/Vagrantfile.html +412 -0
  152. data/rdoc/site/0.5.0/Vagrant.html +366 -0
  153. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action/DeleteCache.html +422 -0
  154. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action/InitKeys.html +428 -0
  155. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action/LinkNetwork.html +426 -0
  156. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Action.html +361 -0
  157. data/rdoc/site/0.5.0/VagrantPlugins/CORL/BaseAction.html +511 -0
  158. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Command/Launcher.html +553 -0
  159. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Command.html +359 -0
  160. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Config/CORL.html +752 -0
  161. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Config.html +359 -0
  162. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Plugin.html +365 -0
  163. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Provisioner/CORL.html +556 -0
  164. data/rdoc/site/0.5.0/VagrantPlugins/CORL/Provisioner.html +359 -0
  165. data/rdoc/site/0.5.0/VagrantPlugins/CORL.html +366 -0
  166. data/rdoc/site/0.5.0/VagrantPlugins.html +366 -0
  167. data/rdoc/site/0.5.0/created.rid +103 -0
  168. data/rdoc/site/0.5.0/images/add.png +0 -0
  169. data/rdoc/site/0.5.0/images/brick.png +0 -0
  170. data/rdoc/site/0.5.0/images/brick_link.png +0 -0
  171. data/rdoc/site/0.5.0/images/bug.png +0 -0
  172. data/rdoc/site/0.5.0/images/bullet_black.png +0 -0
  173. data/rdoc/site/0.5.0/images/bullet_toggle_minus.png +0 -0
  174. data/rdoc/site/0.5.0/images/bullet_toggle_plus.png +0 -0
  175. data/rdoc/site/0.5.0/images/date.png +0 -0
  176. data/rdoc/site/0.5.0/images/delete.png +0 -0
  177. data/rdoc/site/0.5.0/images/find.png +0 -0
  178. data/rdoc/site/0.5.0/images/loadingAnimation.gif +0 -0
  179. data/rdoc/site/0.5.0/images/macFFBgHack.png +0 -0
  180. data/rdoc/site/0.5.0/images/package.png +0 -0
  181. data/rdoc/site/0.5.0/images/page_green.png +0 -0
  182. data/rdoc/site/0.5.0/images/page_white_text.png +0 -0
  183. data/rdoc/site/0.5.0/images/page_white_width.png +0 -0
  184. data/rdoc/site/0.5.0/images/plugin.png +0 -0
  185. data/rdoc/site/0.5.0/images/ruby.png +0 -0
  186. data/rdoc/site/0.5.0/images/tag_blue.png +0 -0
  187. data/rdoc/site/0.5.0/images/tag_green.png +0 -0
  188. data/rdoc/site/0.5.0/images/transparent.png +0 -0
  189. data/rdoc/site/0.5.0/images/wrench.png +0 -0
  190. data/rdoc/site/0.5.0/images/wrench_orange.png +0 -0
  191. data/rdoc/site/0.5.0/images/zoom.png +0 -0
  192. data/rdoc/site/0.5.0/index.html +359 -0
  193. data/rdoc/site/0.5.0/js/darkfish.js +155 -0
  194. data/rdoc/site/0.5.0/js/jquery.js +18 -0
  195. data/rdoc/site/0.5.0/js/navigation.js +142 -0
  196. data/rdoc/site/0.5.0/js/search.js +94 -0
  197. data/rdoc/site/0.5.0/js/search_index.js +1 -0
  198. data/rdoc/site/0.5.0/js/searcher.js +228 -0
  199. data/rdoc/site/0.5.0/rdoc.css +543 -0
  200. data/rdoc/site/0.5.0/table_of_contents.html +1797 -0
  201. metadata +171 -3
  202. data/lib/nucleon/action/cloud/hiera.rb +0 -61
@@ -0,0 +1,119 @@
1
+
2
+ module Nucleon
3
+ module Action
4
+ module Node
5
+ class Fact < CORL.plugin_class(:nucleon, :cloud_action)
6
+
7
+ include Mixin::Action::Registration
8
+
9
+ #-----------------------------------------------------------------------------
10
+ # Info
11
+
12
+ def self.describe(action = :fact, weight = 570)
13
+ super(:node, action, weight)
14
+ end
15
+
16
+ #-----------------------------------------------------------------------------
17
+ # Settings
18
+
19
+ def configure(aggregate = false)
20
+ super() do
21
+ codes :fact_save_failed
22
+
23
+ unless aggregate
24
+ register_str :name, nil
25
+ register_str :value
26
+
27
+ register_bool :delete
28
+
29
+ register_translator :input_format
30
+ end
31
+
32
+ register_translator :format, :json
33
+ end
34
+ end
35
+
36
+ #---
37
+
38
+ def arguments
39
+ [ :name, :value ]
40
+ end
41
+
42
+ #-----------------------------------------------------------------------------
43
+ # Operations
44
+
45
+ def execute
46
+ super do |node, network|
47
+ ensure_node(node) do
48
+ if ! settings[:name] || settings[:name].empty?
49
+ render_node_facts(node)
50
+ else
51
+ if settings.delete(:delete, false)
52
+ delete_node_fact(node, settings[:name], sanitize_remote(network, settings[:net_remote]))
53
+ elsif settings[:value] && ! settings[:value].empty?
54
+ set_node_fact(node, settings[:name], settings[:value], sanitize_remote(network, settings[:net_remote]))
55
+ else
56
+ render_node_fact(node, settings[:name])
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ #-----------------------------------------------------------------------------
64
+ # Sub operations
65
+
66
+ def render_node_facts(node)
67
+ format = settings[:format]
68
+ myself.result = node.facts
69
+ render result, :format => format
70
+ end
71
+
72
+ #---
73
+
74
+ def render_node_fact(node, name)
75
+ format = settings[:format]
76
+ myself.result = node.fact(name)
77
+ render result, :format => format
78
+ end
79
+
80
+ #---
81
+
82
+ def delete_node_fact(node, name, remote = nil)
83
+ remote_text = remote ? "#{remote}" : "LOCAL ONLY"
84
+
85
+ node.delete_facts(name)
86
+
87
+ if node.save({ :remote => remote, :message => "Deleting fact #{name} from #{node.plugin_provider} #{node.plugin_name}" })
88
+ success("Fact #{name} deleted (#{remote_text})", { :i18n => false })
89
+ else
90
+ error("Fact #{name} deletion could not be saved", { :i18n => false })
91
+ myself.status = code.fact_save_failed
92
+ end
93
+ end
94
+
95
+ #---
96
+
97
+ def set_node_fact(node, name, value, remote = nil)
98
+ remote_text = remote ? "#{remote}" : "LOCAL ONLY"
99
+ input_format = settings[:input_format]
100
+
101
+ value = Util::Data.value(render(value, {
102
+ :format => input_format,
103
+ :silent => true
104
+ })) if input_format
105
+
106
+ myself.result = value
107
+ node.create_facts({ name => value })
108
+
109
+ if node.save({ :remote => remote, :message => "Saving fact #{name} to #{node.plugin_provider} #{node.plugin_name}" })
110
+ success("Fact #{name} saved (#{remote_text})", { :i18n => false })
111
+ else
112
+ error("New fact #{name} could not be saved", { :i18n => false })
113
+ myself.status = code.fact_save_failed
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -1,31 +1,31 @@
1
1
 
2
+ nucleon_require(File.dirname(__FILE__), :fact)
3
+
4
+ #---
5
+
2
6
  module Nucleon
3
7
  module Action
4
8
  module Node
5
- class Facts < CORL.plugin_class(:nucleon, :cloud_action)
6
-
9
+ class Facts < Fact
10
+
7
11
  #-----------------------------------------------------------------------------
8
12
  # Info
9
13
 
10
14
  def self.describe
11
- super(:node, :facts, 570)
15
+ super(:facts, 571)
12
16
  end
13
-
17
+
14
18
  #-----------------------------------------------------------------------------
15
19
  # Settings
16
20
 
17
- #-----------------------------------------------------------------------------
18
- # Operations
19
-
20
- def execute
21
- super do |node, network|
22
- ensure_node(node) do
23
- facter_facts = node.facts
24
-
25
- ui.info(Util::Data.to_json(facter_facts, true), { :prefix => false })
26
- myself.result = facter_facts
27
- end
28
- end
21
+ def configure
22
+ super(true)
23
+ end
24
+
25
+ #---
26
+
27
+ def arguments
28
+ []
29
29
  end
30
30
  end
31
31
  end
@@ -0,0 +1,115 @@
1
+
2
+ module Nucleon
3
+ module Action
4
+ module Node
5
+ class Group < CORL.plugin_class(:nucleon, :cloud_action)
6
+
7
+ include Mixin::Action::Registration
8
+
9
+ #-----------------------------------------------------------------------------
10
+ # Info
11
+
12
+ def self.describe(action = :group, weight = 670)
13
+ super(:node, action, weight)
14
+ end
15
+
16
+ #-----------------------------------------------------------------------------
17
+ # Settings
18
+
19
+ def configure(aggregate = false)
20
+ super() do
21
+ codes :group_save_failed
22
+
23
+ unless aggregate
24
+ register_str :name, nil
25
+
26
+ register_bool :add
27
+ register_bool :delete
28
+ end
29
+
30
+ register_translator :format, :json
31
+ end
32
+ end
33
+
34
+ #---
35
+
36
+ def arguments
37
+ [ :name ]
38
+ end
39
+
40
+ #-----------------------------------------------------------------------------
41
+ # Operations
42
+
43
+ def execute
44
+ super do |node, network|
45
+ ensure_node(node) do
46
+ if ! settings[:name] || settings[:name].empty?
47
+ render_node_groups(node)
48
+ else
49
+ if settings.delete(:delete, false)
50
+ delete_node_group(node, settings[:name], sanitize_remote(network, settings[:net_remote]))
51
+ elsif settings.delete(:add, false)
52
+ set_node_group(node, settings[:name], sanitize_remote(network, settings[:net_remote]))
53
+ else
54
+ render_node_group(node, settings[:name])
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ #-----------------------------------------------------------------------------
62
+ # Sub operations
63
+
64
+ def render_node_groups(node)
65
+ format = settings[:format]
66
+ myself.result = node.groups
67
+ render result, :format => format
68
+ end
69
+
70
+ #---
71
+
72
+ def render_node_group(node, name)
73
+ if node.groups.include?(name.to_s)
74
+ myself.result = true
75
+ success("Group #{name} found", { :i18n => false })
76
+ else
77
+ myself.result = false
78
+ warn("Group #{name} not found", { :i18n => false })
79
+ end
80
+ end
81
+
82
+ #---
83
+
84
+ def delete_node_group(node, name, remote = nil)
85
+ remote_text = remote ? "#{remote}" : "LOCAL ONLY"
86
+
87
+ node.remove_groups(name)
88
+
89
+ if node.save({ :remote => remote, :message => "Deleting group #{name} from #{node.plugin_provider} #{node.plugin_name}" })
90
+ success("Group #{name} deleted (#{remote_text})", { :i18n => false })
91
+ else
92
+ error("Group #{name} deletion could not be saved", { :i18n => false })
93
+ myself.status = code.group_save_failed
94
+ end
95
+ end
96
+
97
+ #---
98
+
99
+ def set_node_group(node, name, remote = nil)
100
+ remote_text = remote ? "#{remote}" : "LOCAL ONLY"
101
+
102
+ myself.result = name
103
+ node.add_groups(name)
104
+
105
+ if node.save({ :remote => remote, :message => "Saving group #{name} to #{node.plugin_provider} #{node.plugin_name}" })
106
+ success("Group #{name} saved (#{remote_text})", { :i18n => false })
107
+ else
108
+ error("New group #{name} could not be saved", { :i18n => false })
109
+ myself.status = code.group_save_failed
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,33 @@
1
+
2
+ nucleon_require(File.dirname(__FILE__), :group)
3
+
4
+ #---
5
+
6
+ module Nucleon
7
+ module Action
8
+ module Node
9
+ class Groups < Group
10
+
11
+ #-----------------------------------------------------------------------------
12
+ # Info
13
+
14
+ def self.describe
15
+ super(:groups, 671)
16
+ end
17
+
18
+ #-----------------------------------------------------------------------------
19
+ # Settings
20
+
21
+ def configure
22
+ super(true)
23
+ end
24
+
25
+ #---
26
+
27
+ def arguments
28
+ []
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,75 @@
1
+
2
+ module Nucleon
3
+ module Action
4
+ module Node
5
+ class Identity < CORL.plugin_class(:nucleon, :cloud_action)
6
+
7
+ include Mixin::Action::Registration
8
+
9
+ #-----------------------------------------------------------------------------
10
+ # Info
11
+
12
+ def self.describe
13
+ super(:node, :identity, 700)
14
+ end
15
+
16
+ #-----------------------------------------------------------------------------
17
+ # Settings
18
+
19
+ def configure
20
+ super do
21
+ codes :identity_upload_failure
22
+
23
+ register :name, :str
24
+ register_project :identity
25
+ register_nodes :identity_nodes
26
+ end
27
+ end
28
+
29
+ #---
30
+
31
+ def ignore
32
+ [ :nodes ]
33
+ end
34
+
35
+ def arguments
36
+ [ :name, :identity_nodes ]
37
+ end
38
+
39
+ #-----------------------------------------------------------------------------
40
+ # Operations
41
+
42
+ def execute
43
+ super do |local_node, network|
44
+ ensure_network(network) do
45
+ builder = network.identity_builder({ settings[:name] => settings[:identity] })
46
+
47
+ if builder.build(local_node)
48
+ identity_directory = File.join(builder.build_directory, settings[:name])
49
+
50
+ success = network.batch(settings[:identity_nodes], settings[:node_provider], settings[:parallel]) do |node|
51
+ info('corl.actions.identity.start', { :provider => node.plugin_provider, :name => node.plugin_name })
52
+
53
+ remote_network_directory = node.lookup(:corl_network)
54
+
55
+ remote_config_directory = File.join(remote_network_directory, network.config_directory.sub(/#{network.directory}#{File::SEPARATOR}/, ''))
56
+ remote_identity_base_directory = File.join(remote_network_directory, builder.build_directory.sub(/#{network.directory}#{File::SEPARATOR}/, ''))
57
+ remote_identity_directory = File.join(remote_identity_base_directory, settings[:name])
58
+
59
+ node.cli.mkdir('-p', remote_identity_base_directory)
60
+ node.cli.rm('-Rf', remote_identity_directory)
61
+
62
+ if success = node.send_files(identity_directory, remote_identity_directory, nil, '0700')
63
+ dbg('we were successful!')
64
+ end
65
+ success
66
+ end
67
+ end
68
+ myself.status = code.batch_error unless success
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -4,6 +4,8 @@ module Action
4
4
  module Node
5
5
  class Lookup < CORL.plugin_class(:nucleon, :cloud_action)
6
6
 
7
+ include Mixin::Action::Registration
8
+
7
9
  #-----------------------------------------------------------------------------
8
10
  # Info
9
11
 
@@ -16,7 +18,7 @@ class Lookup < CORL.plugin_class(:nucleon, :cloud_action)
16
18
 
17
19
  def configure
18
20
  super do
19
- register :property, :str, nil
21
+ register :properties, :array, []
20
22
  register :context, :str, :priority do |value|
21
23
  success = true
22
24
  options = [ :priority, :array, :hash ]
@@ -26,13 +28,15 @@ class Lookup < CORL.plugin_class(:nucleon, :cloud_action)
26
28
  end
27
29
  success
28
30
  end
31
+
32
+ register_translator :format, :json
29
33
  end
30
34
  end
31
35
 
32
36
  #---
33
37
 
34
38
  def arguments
35
- [ :property ]
39
+ [ :properties ]
36
40
  end
37
41
 
38
42
  #-----------------------------------------------------------------------------
@@ -41,11 +45,20 @@ class Lookup < CORL.plugin_class(:nucleon, :cloud_action)
41
45
  def execute
42
46
  super do |node, network|
43
47
  ensure_node(node) do
44
- property = settings.delete(:property)
45
- value = node.lookup(property, nil, settings)
46
-
47
- ui.info(Util::Data.to_json(value, true), { :prefix => false })
48
- myself.result = value
48
+ translator = CORL.translator({}, settings[:format])
49
+
50
+ if settings[:properties].empty?
51
+ myself.result = node.hiera_configuration(node.facts)
52
+ $stderr.puts translator.generate(result)
53
+ else
54
+ properties = {}
55
+
56
+ settings.delete(:properties).each do |property|
57
+ properties[property] = node.lookup(property, nil, settings)
58
+ end
59
+ $stderr.puts translator.generate(properties)
60
+ myself.result = properties
61
+ end
49
62
  end
50
63
  end
51
64
  end
@@ -64,7 +64,7 @@ class Seed < CORL.plugin_class(:nucleon, :cloud_action)
64
64
  network_path = lookup(:corl_network)
65
65
  backup_path = File.join(Dir.tmpdir(), 'corl')
66
66
 
67
- render("Generating network SSH deploy keys")
67
+ info("Generating network SSH deploy keys", { :i18n => false })
68
68
 
69
69
  if keys = Util::SSH.generate.store
70
70
  if @project_info
@@ -73,11 +73,11 @@ class Seed < CORL.plugin_class(:nucleon, :cloud_action)
73
73
  project_info = Config.new({ :provider => :git })
74
74
  end
75
75
 
76
- render("Backing up current network configuration")
76
+ info("Backing up current network configuration", { :i18n => false })
77
77
  FileUtils.rm_rf(backup_path)
78
78
  FileUtils.mv(network_path, backup_path)
79
79
 
80
- render("Seeding network configuration from #{settings[:project_reference]}")
80
+ info("Seeding network configuration from #{settings[:project_reference]}", { :i18n => false })
81
81
  project = CORL.project(extended_config(:project, {
82
82
  :directory => network_path,
83
83
  :reference => project_info.get(:reference, nil),
@@ -90,15 +90,15 @@ class Seed < CORL.plugin_class(:nucleon, :cloud_action)
90
90
  }), project_info[:provider])
91
91
 
92
92
  if project
93
- render("Finalizing network path and removing temporary backup")
93
+ info("Finalizing network path and removing temporary backup", { :i18n => false })
94
94
  FileUtils.chmod_R(0600, network_path)
95
95
  FileUtils.rm_rf(backup_path)
96
96
 
97
- render("Reinitializing network")
97
+ info("Reinitializing network", { :i18n => false })
98
98
  if network = init_network
99
99
  if network.load
100
100
  if node = network.local_node(true)
101
- render("Updating node network configurations")
101
+ info("Updating node network configurations", { :i18n => false })
102
102
  myself.status = code.node_save_failure unless node.save
103
103
  else
104
104
  myself.status = code.node_load_failure
@@ -0,0 +1,76 @@
1
+
2
+ module Nucleon
3
+ module Action
4
+ module Node
5
+ class Status < CORL.plugin_class(:nucleon, :cloud_action)
6
+
7
+ include Mixin::Action::Registration
8
+
9
+ #-----------------------------------------------------------------------------
10
+ # Info
11
+
12
+ def self.describe
13
+ super(:node, :status, 800)
14
+ end
15
+
16
+ #-----------------------------------------------------------------------------
17
+ # Settings
18
+
19
+ def configure
20
+ super do
21
+ register_nodes :status_nodes, []
22
+
23
+ register_bool :basic
24
+ end
25
+ end
26
+
27
+ #---
28
+
29
+ def ignore
30
+ [ :nodes ]
31
+ end
32
+
33
+ def arguments
34
+ [ :status_nodes ]
35
+ end
36
+
37
+ #-----------------------------------------------------------------------------
38
+ # Operations
39
+
40
+ def execute
41
+ super do |local_node, network|
42
+ ensure_network(network) do
43
+ settings[:status_nodes] = [ 'all' ] if settings[:status_nodes].empty?
44
+
45
+ batch_success = network.batch(settings[:status_nodes], settings[:node_provider], settings[:parallel]) do |node|
46
+ state = node.state(true).to_sym
47
+ ssh_enabled = ''
48
+
49
+ case state
50
+ when :running, :active
51
+ state = green(state.to_s)
52
+
53
+ unless settings[:basic]
54
+ result = node.cli.test :true
55
+
56
+ if result.status == code.success
57
+ ssh_enabled = '[ ' + green('connected') + ' ]'
58
+ else
59
+ ssh_enabled = '[ ' + red('connection failed') + ' ]'
60
+ end
61
+ end
62
+
63
+ when :stopped, :aborted
64
+ state = red(state.to_s)
65
+ end
66
+ info(state + " #{ssh_enabled}".rstrip, { :i18n => false, :prefix_text => yellow(node.plugin_provider) + ' ' + purple(node.plugin_name) })
67
+ true
68
+ end
69
+ myself.status = code.batch_error unless batch_success
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end