hybrid_platforms_conductor 32.11.0 → 32.13.1

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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1109 -0
  3. data/LICENSE.md +31 -0
  4. data/README.md +395 -0
  5. data/bin/setup +1 -1
  6. data/docs/api.md +349 -0
  7. data/docs/config_dsl.md +315 -0
  8. data/docs/executables.md +226 -0
  9. data/docs/executables/check-node.md +155 -0
  10. data/docs/executables/deploy.md +198 -0
  11. data/docs/executables/dump_nodes_json.md +110 -0
  12. data/docs/executables/free_ips.md +93 -0
  13. data/docs/executables/free_veids.md +73 -0
  14. data/docs/executables/get_impacted_nodes.md +94 -0
  15. data/docs/executables/last_deploys.md +114 -0
  16. data/docs/executables/nodes_to_deploy.md +139 -0
  17. data/docs/executables/report.md +159 -0
  18. data/docs/executables/run.md +126 -0
  19. data/docs/executables/setup.md +92 -0
  20. data/docs/executables/ssh_config.md +151 -0
  21. data/docs/executables/test.md +213 -0
  22. data/docs/executables/topograph.md +139 -0
  23. data/docs/gen/mermaid/README.md-0.png +0 -0
  24. data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
  25. data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
  26. data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
  27. data/docs/gen/mermaid/docs/executables/free_veids.md-0.png +0 -0
  28. data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
  29. data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
  30. data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
  31. data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
  32. data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
  33. data/docs/gen/mermaid/docs/executables/setup.md-0.png +0 -0
  34. data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
  35. data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
  36. data/docs/install.md +161 -0
  37. data/docs/plugins.md +215 -0
  38. data/docs/plugins/action/bash.md +37 -0
  39. data/docs/plugins/action/interactive.md +37 -0
  40. data/docs/plugins/action/remote_bash.md +67 -0
  41. data/docs/plugins/action/ruby.md +69 -0
  42. data/docs/plugins/action/scp.md +61 -0
  43. data/docs/plugins/cmdb/config.md +46 -0
  44. data/docs/plugins/cmdb/host_ip.md +33 -0
  45. data/docs/plugins/cmdb/host_keys.md +33 -0
  46. data/docs/plugins/cmdb/platform_handlers.md +33 -0
  47. data/docs/plugins/connector/local.md +28 -0
  48. data/docs/plugins/connector/ssh.md +95 -0
  49. data/docs/plugins/platform_handler/yaml_inventory.md +105 -0
  50. data/docs/plugins/provisioner/docker.md +27 -0
  51. data/docs/plugins/provisioner/podman.md +27 -0
  52. data/docs/plugins/provisioner/proxmox.md +115 -0
  53. data/docs/plugins/report/confluence.md +49 -0
  54. data/docs/plugins/report/mediawiki.md +28 -0
  55. data/docs/plugins/report/stdout.md +32 -0
  56. data/docs/plugins/test/bitbucket_conf.md +97 -0
  57. data/docs/plugins/test/can_be_checked.md +27 -0
  58. data/docs/plugins/test/check_deploy_and_idempotence.md +61 -0
  59. data/docs/plugins/test/check_from_scratch.md +28 -0
  60. data/docs/plugins/test/connection.md +27 -0
  61. data/docs/plugins/test/deploy_freshness.md +27 -0
  62. data/docs/plugins/test/deploy_from_scratch.md +28 -0
  63. data/docs/plugins/test/deploy_removes_root_access.md +29 -0
  64. data/docs/plugins/test/divergence.md +41 -0
  65. data/docs/plugins/test/executables.md +26 -0
  66. data/docs/plugins/test/file_system.md +49 -0
  67. data/docs/plugins/test/file_system_hdfs.md +65 -0
  68. data/docs/plugins/test/hostname.md +27 -0
  69. data/docs/plugins/test/idempotence.md +56 -0
  70. data/docs/plugins/test/ip.md +28 -0
  71. data/docs/plugins/test/jenkins_ci_conf.md +54 -0
  72. data/docs/plugins/test/jenkins_ci_masters_ok.md +54 -0
  73. data/docs/plugins/test/linear_strategy.md +26 -0
  74. data/docs/plugins/test/local_users.md +48 -0
  75. data/docs/plugins/test/mounts.md +55 -0
  76. data/docs/plugins/test/orphan_files.md +38 -0
  77. data/docs/plugins/test/ports.md +50 -0
  78. data/docs/plugins/test/private_ips.md +27 -0
  79. data/docs/plugins/test/public_ips.md +27 -0
  80. data/docs/plugins/test/spectre.md +26 -0
  81. data/docs/plugins/test/veids.md +27 -0
  82. data/docs/plugins/test/vulnerabilities.md +65 -0
  83. data/docs/plugins/test_report/confluence.md +43 -0
  84. data/docs/plugins/test_report/stdout.md +26 -0
  85. data/docs/plugins_create.md +135 -0
  86. data/docs/tutorial.md +61 -0
  87. data/docs/tutorial/01_installation.md +129 -0
  88. data/docs/tutorial/02_first_node.md +466 -0
  89. data/docs/tutorial/03_scale.md +876 -0
  90. data/docs/tutorial/04_test.md +975 -0
  91. data/docs/tutorial/05_extend_with_plugins.md +1130 -0
  92. data/examples/bare/Gemfile +4 -0
  93. data/examples/bare/hpc_config.rb +2 -0
  94. data/examples/localhost/Gemfile +4 -0
  95. data/examples/localhost/hpc_config.rb +2 -0
  96. data/examples/localhost/inventory.yaml +4 -0
  97. data/examples/tutorial/01_installation/my-platforms/Gemfile +3 -0
  98. data/examples/tutorial/01_installation/my-platforms/hpc_config.rb +0 -0
  99. data/examples/tutorial/02_first_node/my-platforms/Gemfile +3 -0
  100. data/examples/tutorial/02_first_node/my-platforms/hpc_config.rb +1 -0
  101. data/examples/tutorial/02_first_node/my-service-conf-repo/inventory.yaml +13 -0
  102. data/examples/tutorial/02_first_node/my-service-conf-repo/my-service.conf.erb +3 -0
  103. data/examples/tutorial/02_first_node/my-service-conf-repo/service_my-service.rb +58 -0
  104. data/examples/tutorial/02_first_node/node/my-service.conf +4 -0
  105. data/examples/tutorial/03_scale/my-platforms/Gemfile +3 -0
  106. data/examples/tutorial/03_scale/my-platforms/hpc_config.rb +1 -0
  107. data/examples/tutorial/03_scale/my-platforms/my_commands.bash +2 -0
  108. data/examples/tutorial/03_scale/my-service-conf-repo/inventory.yaml +90 -0
  109. data/examples/tutorial/03_scale/my-service-conf-repo/my-service.conf.erb +3 -0
  110. data/examples/tutorial/03_scale/my-service-conf-repo/service_my-service.rb +58 -0
  111. data/examples/tutorial/03_scale/my-service-conf-repo/service_web-hello.rb +43 -0
  112. data/examples/tutorial/03_scale/node/my-service.conf +4 -0
  113. data/examples/tutorial/03_scale/web_docker_image/Dockerfile +33 -0
  114. data/examples/tutorial/03_scale/web_docker_image/hello_world.txt +1 -0
  115. data/examples/tutorial/03_scale/web_docker_image/hpc_root.key +27 -0
  116. data/examples/tutorial/03_scale/web_docker_image/hpc_root.key.pub +1 -0
  117. data/examples/tutorial/03_scale/web_docker_image/main.go +43 -0
  118. data/examples/tutorial/03_scale/web_docker_image/start.sh +7 -0
  119. data/examples/tutorial/03_scale/web_docker_image/test.bash +6 -0
  120. data/examples/tutorial/04_test/my-platforms/Gemfile +3 -0
  121. data/examples/tutorial/04_test/my-platforms/hpc_config.rb +12 -0
  122. data/examples/tutorial/04_test/my-platforms/images/debian_10/Dockerfile +13 -0
  123. data/examples/tutorial/04_test/my-platforms/my_commands.bash +2 -0
  124. data/examples/tutorial/04_test/my-service-conf-repo/inventory.yaml +100 -0
  125. data/examples/tutorial/04_test/my-service-conf-repo/my-service.conf.erb +3 -0
  126. data/examples/tutorial/04_test/my-service-conf-repo/service_my-service.rb +58 -0
  127. data/examples/tutorial/04_test/my-service-conf-repo/service_web-hello.rb +43 -0
  128. data/examples/tutorial/04_test/node/my-service.conf +4 -0
  129. data/examples/tutorial/04_test/web_docker_image/Dockerfile +33 -0
  130. data/examples/tutorial/04_test/web_docker_image/hello_world.txt +1 -0
  131. data/examples/tutorial/04_test/web_docker_image/hpc_root.key +27 -0
  132. data/examples/tutorial/04_test/web_docker_image/hpc_root.key.pub +1 -0
  133. data/examples/tutorial/04_test/web_docker_image/main.go +43 -0
  134. data/examples/tutorial/04_test/web_docker_image/start.sh +7 -0
  135. data/examples/tutorial/04_test/web_docker_image/test.bash +6 -0
  136. data/examples/tutorial/05_extend_with_plugins/dev-servers-conf-repo/hosts.json +12 -0
  137. data/examples/tutorial/05_extend_with_plugins/dev-servers-conf-repo/install-gcc.bash +14 -0
  138. data/examples/tutorial/05_extend_with_plugins/dev-servers-conf-repo/install-python.bash +14 -0
  139. data/examples/tutorial/05_extend_with_plugins/dev_docker_image/Dockerfile +20 -0
  140. data/examples/tutorial/05_extend_with_plugins/dev_docker_image/hpc_root.key +27 -0
  141. data/examples/tutorial/05_extend_with_plugins/dev_docker_image/hpc_root.key.pub +1 -0
  142. data/examples/tutorial/05_extend_with_plugins/my-platforms/Gemfile +4 -0
  143. data/examples/tutorial/05_extend_with_plugins/my-platforms/hpc_config.rb +13 -0
  144. data/examples/tutorial/05_extend_with_plugins/my-platforms/images/debian_10/Dockerfile +13 -0
  145. data/examples/tutorial/05_extend_with_plugins/my-platforms/my_commands.bash +2 -0
  146. data/examples/tutorial/05_extend_with_plugins/my-service-conf-repo/inventory.yaml +100 -0
  147. data/examples/tutorial/05_extend_with_plugins/my-service-conf-repo/my-service.conf.erb +3 -0
  148. data/examples/tutorial/05_extend_with_plugins/my-service-conf-repo/service_my-service.rb +58 -0
  149. data/examples/tutorial/05_extend_with_plugins/my-service-conf-repo/service_web-hello.rb +43 -0
  150. data/examples/tutorial/05_extend_with_plugins/my_hpc_plugins/lib/my_hpc_plugins/hpc_plugins/platform_handler/json_bash.rb +115 -0
  151. data/examples/tutorial/05_extend_with_plugins/my_hpc_plugins/lib/my_hpc_plugins/hpc_plugins/report/web_report.rb +52 -0
  152. data/examples/tutorial/05_extend_with_plugins/my_hpc_plugins/lib/my_hpc_plugins/hpc_plugins/test/root_space.rb +44 -0
  153. data/examples/tutorial/05_extend_with_plugins/my_hpc_plugins/my_hpc_plugins.gemspec +15 -0
  154. data/examples/tutorial/05_extend_with_plugins/node/my-service.conf +4 -0
  155. data/examples/tutorial/05_extend_with_plugins/web_docker_image/Dockerfile +33 -0
  156. data/examples/tutorial/05_extend_with_plugins/web_docker_image/hello_world.txt +1 -0
  157. data/examples/tutorial/05_extend_with_plugins/web_docker_image/hpc_root.key +27 -0
  158. data/examples/tutorial/05_extend_with_plugins/web_docker_image/hpc_root.key.pub +1 -0
  159. data/examples/tutorial/05_extend_with_plugins/web_docker_image/main.go +43 -0
  160. data/examples/tutorial/05_extend_with_plugins/web_docker_image/start.sh +7 -0
  161. data/examples/tutorial/05_extend_with_plugins/web_docker_image/test.bash +6 -0
  162. data/lib/hybrid_platforms_conductor/actions_executor.rb +1 -0
  163. data/lib/hybrid_platforms_conductor/deployer.rb +3 -2
  164. data/lib/hybrid_platforms_conductor/hpc_plugins/action/remote_bash.rb +29 -13
  165. data/lib/hybrid_platforms_conductor/hpc_plugins/action/scp.rb +1 -1
  166. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +98 -0
  167. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/my_connector.rb.sample +2 -2
  168. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +15 -4
  169. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/platform_handler_plugin.rb.sample +5 -5
  170. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +140 -0
  171. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +6 -3
  172. data/lib/hybrid_platforms_conductor/hpc_plugins/report/templates/confluence_inventory.html.erb +1 -1
  173. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +4 -4
  174. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +1 -1
  175. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +19 -17
  176. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +3 -0
  177. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +27 -13
  178. data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +2 -1
  179. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +2 -1
  180. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +2 -1
  181. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +4 -3
  182. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +2 -1
  183. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +1 -1
  184. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +8 -7
  185. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +1 -1
  186. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/templates/confluence.html.erb +1 -1
  187. data/lib/hybrid_platforms_conductor/json_dumper.rb +1 -1
  188. data/lib/hybrid_platforms_conductor/platform_handler.rb +1 -1
  189. data/lib/hybrid_platforms_conductor/services_handler.rb +18 -16
  190. data/lib/hybrid_platforms_conductor/tests_runner.rb +0 -1
  191. data/lib/hybrid_platforms_conductor/topographer.rb +0 -1
  192. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  193. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +16 -0
  194. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +30 -0
  195. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +113 -0
  196. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +6 -2
  197. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +38 -1
  198. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +37 -4
  199. data/spec/hybrid_platforms_conductor_test/docs_spec.rb +10 -0
  200. data/tools/check_md +89 -0
  201. data/tools/generate_mermaid +75 -0
  202. metadata +337 -12
data/docs/plugins.md ADDED
@@ -0,0 +1,215 @@
1
+ # Plugins
2
+
3
+ Hybrid Platforms Conductor ships with plenty of plugins of any type. The type of the plugin is defined by the directory in which the plugin is encountered.
4
+
5
+ Check [how to create plugins](plugins_create.md) to know how to add your own plugins to this list.
6
+
7
+ Following are all possible plugin types and the plugins shipped by default with Hybrid Platforms Conductor.
8
+
9
+ # Table of Contents
10
+ * [`action`](#action)
11
+ * [`cmdb`](#cmdb)
12
+ * [`connector`](#connector)
13
+ * [`platform_handler`](#platform_handler)
14
+ * [`provisioner`](#provisioner)
15
+ * [`report`](#report)
16
+ * [`test`](#test)
17
+ * [`test_report`](#test_report)
18
+
19
+ <a name="action"></a>
20
+ ## Actions
21
+
22
+ Define the kind of actions that can be executed by various processes.
23
+
24
+ Corresponding plugin type: `action`.
25
+
26
+ These plugins are meant to define new action types that can be used by the [`ActionsExecutor`](../lib/hybrid_platforms_conductor/actions_executor.rb).
27
+
28
+ Examples of actions are:
29
+ * Remote bash: Execute remote bash on the node
30
+ * Ruby: Execute Ruby code
31
+
32
+ Check the [sample plugin file](../lib/hybrid_platforms_conductor/hpc_plugins/action/my_action.rb.sample) to know more about the API that needs to be implemented by such plugins.
33
+
34
+ Plugins shipped by default:
35
+ * [`bash`](plugins/action/bash.md)
36
+ * [`interactive`](plugins/action/interactive.md)
37
+ * [`remote_bash`](plugins/action/remote_bash.md)
38
+ * [`ruby`](plugins/action/ruby.md)
39
+ * [`scp`](plugins/action/scp.md)
40
+
41
+ <a name="cmdb"></a>
42
+ ## CMDBs
43
+
44
+ Retrieve nodes' metadata from various sources.
45
+
46
+ Corresponding plugin type: `cmdb`.
47
+
48
+ These plugins allow to retrieve metadata associated to a node, returned by the [`NodesHandler`](../lib/hybrid_platforms_conductor/nodes_handler.rb). New plugins can be used to retrieve new properties that can then be used by Hybrid Platforms Conductor.
49
+
50
+ Examples of CMDBs are:
51
+ * Host keys: Get host keys associated to nodes
52
+ * Host IPs: Get a node's host IP
53
+
54
+ Check the [sample plugin file](../lib/hybrid_platforms_conductor/hpc_plugins/cmdb/my_cmdb.rb.sample) to know more about the API that needs to be implemented by such plugins.
55
+
56
+ Plugins shipped by default:
57
+ * [`config`](plugins/cmdb/config.md)
58
+ * [`host_ip`](plugins/cmdb/host_ip.md)
59
+ * [`host_keys`](plugins/cmdb/host_keys.md)
60
+ * [`platform_handlers`](plugins/cmdb/platform_handlers.md)
61
+
62
+ <a name="connector"></a>
63
+ ## Connectors
64
+
65
+ Give a way to execute remote bash or transfer files to nodes.
66
+
67
+ Corresponding plugin type: `connector`.
68
+
69
+ These plugins give ways for the [`ActionsExecutor`](../lib/hybrid_platforms_conductor/actions_executor.rb) to connect to nodes when some actions require it (like the remote code executions for example).
70
+
71
+ Examples of connectors are:
72
+ * SSH: Connect to a node using SSH
73
+ * Docker: Connect using a Docker socket
74
+ * awscli: Connect using awscli
75
+
76
+ Check the [sample plugin file](../lib/hybrid_platforms_conductor/hpc_plugins/connector/my_connector.rb.sample) to know more about the API that needs to be implemented by such plugins.
77
+
78
+ Plugins shipped by default:
79
+ * [`local`](plugins/connector/local.md)
80
+ * [`ssh`](plugins/connector/ssh.md)
81
+
82
+ <a name="platform_handler"></a>
83
+ ## Platform Handlers
84
+
85
+ Handle repositories of nodes' inventory and services to be deployed.
86
+
87
+ Corresponding plugin type: `platform_handler`.
88
+
89
+ These plugins are used to support different types of platforms' repositories, returned by the [`NodesHandler`](../lib/hybrid_platforms_conductor/nodes_handler.rb)
90
+
91
+ Platforms are registered in the `./hpc_config.rb` file of your project.
92
+
93
+ Example from a locally checked out platform:
94
+ ```ruby
95
+ <platform_type_name>_platform path: '/path/to/platform/to_be_handled_by_your_plugin'
96
+ ```
97
+
98
+ Example from a platform present in a Git repository:
99
+ ```ruby
100
+ <platform_type_name>_platform git: '<git_url_to_the_platform_code>'
101
+ ```
102
+
103
+ Examples of platform handlers are:
104
+ * Chef: Handle a platform using Chef
105
+ * Ansible: Handle a platform using Ansible
106
+
107
+ Check the [sample plugin file](../lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/platform_handler_plugin.rb.sample) to know more about the API that needs to be implemented by such plugins.
108
+
109
+ Plugins shipped by default:
110
+ * [`yaml_inventory`](plugins/platform_handler/yaml_inventory.md)
111
+
112
+ <a name="provisioner"></a>
113
+ ## Provisioners
114
+
115
+ Give a way to provision new nodes.
116
+
117
+ Corresponding plugin type: `provisioner`.
118
+
119
+ These plugins add new ways to provision infrastructure, used by the [`Deployer`](../lib/hybrid_platforms_conductor/deployer.rb)
120
+
121
+ Examples of provisioners are:
122
+ * Docker: Provision Docker containers
123
+ * Podman: Provision Podman pods
124
+ * Terraform: Provision nodes through Terraform
125
+ * Proxmox: Provision containers or VMs using Proxmox
126
+
127
+ Check the [sample plugin file](../lib/hybrid_platforms_conductor/hpc_plugins/provisioner/my_provisioner.rb.sample) to know more about the API that needs to be implemented by such plugins.
128
+
129
+ Plugins shipped by default:
130
+ * [`docker`](plugins/provisioner/docker.md)
131
+ * [`podman`](plugins/provisioner/podman.md)
132
+ * [`proxmox`](plugins/provisioner/proxmox.md)
133
+
134
+ <a name="report"></a>
135
+ ## Reports
136
+
137
+ Report inventory and metadata information.
138
+
139
+ Corresponding plugin type: `report`.
140
+
141
+ These plugins add new ways to publish inventory reports produced by the [`ReportsHandler`](../lib/hybrid_platforms_conductor/reports_handler.rb)
142
+
143
+ Examples of reports are:
144
+ * stdout: Just dump inventory on stdout
145
+ * Mediawiki: Dump inventory in a Mediawiki page
146
+
147
+ Check the [sample plugin file](../lib/hybrid_platforms_conductor/hpc_plugins/report/my_report_plugin.rb.sample) to know more about the API that needs to be implemented by such plugins.
148
+
149
+ Plugins shipped by default:
150
+ * [`confluence`](plugins/report/confluence.md)
151
+ * [`mediawiki`](plugins/report/mediawiki.md)
152
+ * [`stdout`](plugins/report/stdout.md)
153
+
154
+ <a name="test"></a>
155
+ ## Tests
156
+
157
+ Perform various tests, on nodes, on platform repositories, and global ones as well.
158
+
159
+ Corresponding plugin type: `test`.
160
+
161
+ These plugins add available tests to the [`TestsRunner`](../lib/hybrid_platforms_conductor/tests_runner.rb).
162
+ Depending on the API they implement, they can define tests at global level, at platform level or at node level.
163
+
164
+ Examples of tests are:
165
+ * Spectre: Test a node against Spectre vulnerability
166
+ * Executables: Test that executables run without errors
167
+ * Divergence: Test that a node has not diverged from the configuration stored in its platform handler
168
+
169
+ Check the [sample plugin file](../lib/hybrid_platforms_conductor/hpc_plugins/test/my_test_plugin.rb.sample) to know more about the API that needs to be implemented by such plugins.
170
+
171
+ Plugins shipped by default:
172
+ * [`bitbucket_conf`](plugins/test/bitbucket_conf.md)
173
+ * [`can_be_checked`](plugins/test/can_be_checked.md)
174
+ * [`check_deploy_and_idempotence`](plugins/test/check_deploy_and_idempotence.md)
175
+ * [`check_from_scratch`](plugins/test/check_from_scratch.md)
176
+ * [`connection`](plugins/test/connection.md)
177
+ * [`deploy_freshness`](plugins/test/deploy_freshness.md)
178
+ * [`deploy_from_scratch`](plugins/test/deploy_from_scratch.md)
179
+ * [`deploy_removes_root_access`](plugins/test/deploy_removes_root_access.md)
180
+ * [`divergence`](plugins/test/divergence.md)
181
+ * [`executables`](plugins/test/executables.md)
182
+ * [`file_system_hdfs`](plugins/test/file_system_hdfs.md)
183
+ * [`file_system`](plugins/test/file_system.md)
184
+ * [`hostname`](plugins/test/hostname.md)
185
+ * [`idempotence`](plugins/test/idempotence.md)
186
+ * [`ip`](plugins/test/ip.md)
187
+ * [`jenkins_ci_conf`](plugins/test/jenkins_ci_conf.md)
188
+ * [`jenkins_ci_masters_ok`](plugins/test/jenkins_ci_masters_ok.md)
189
+ * [`linear_strategy`](plugins/test/linear_strategy.md)
190
+ * [`local_users`](plugins/test/local_users.md)
191
+ * [`mounts`](plugins/test/mounts.md)
192
+ * [`orphan_files`](plugins/test/orphan_files.md)
193
+ * [`ports`](plugins/test/ports.md)
194
+ * [`private_ips`](plugins/test/private_ips.md)
195
+ * [`public_ips`](plugins/test/public_ips.md)
196
+ * [`spectre`](plugins/test/spectre.md)
197
+ * [`veids`](plugins/test/veids.md)
198
+ * [`vulnerabilities`](plugins/test/vulnerabilities.md)
199
+
200
+ <a name="test_report"></a>
201
+ ## Test reports
202
+
203
+ Report testing results on various mediums.
204
+
205
+ Corresponding plugin type: `test_report`.
206
+
207
+ These plugins add new ways to publish tests reports, done by the [`TestsRunner`](../lib/hybrid_platforms_conductor/tests_runner.rb).
208
+
209
+ Examples of tests reports are:
210
+ * stdout: Just dump tests results on stdout
211
+ * Confluence: Dump tests reports in a Confluence page
212
+
213
+ Plugins shipped by default:
214
+ * [`confluence`](plugins/test_report/confluence.md)
215
+ * [`stdout`](plugins/test_report/stdout.md)
@@ -0,0 +1,37 @@
1
+ # Action plugin: `bash`
2
+
3
+ The `bash` action plugin executes a bash command.
4
+ It takes a simple `String` as parameter that will be executed in a local bash shell.
5
+
6
+ Exit status, stdout and stderr of the execution can be accessed as a result of the call.
7
+
8
+ Example:
9
+ ```ruby
10
+ require 'hybrid_platforms_conductor/executable'
11
+
12
+ HybridPlatformsConductor::Executable.new.actions_executor.execute_actions('my_node' => { bash: 'hostname' })
13
+ # => { 'my_node' => [0, "my_hostname\n", '' ] }
14
+ ```
15
+
16
+ ## Config DSL extension
17
+
18
+ None
19
+
20
+ ## Used credentials
21
+
22
+ | Credential | Usage
23
+ | --- | --- |
24
+
25
+ ## Used Metadata
26
+
27
+ | Metadata | Type | Usage
28
+ | --- | --- | --- |
29
+
30
+ ## Used environment variables
31
+
32
+ | Variable | Usage
33
+ | --- | --- |
34
+
35
+ ## External tools dependencies
36
+
37
+ None
@@ -0,0 +1,37 @@
1
+ # Action plugin: `interactive`
2
+
3
+ The `interactive` action plugin executes an interactive shell on a node (using a [connector](../connector)).
4
+ It takes no argument, so any value will do (`nil`, `true`...)
5
+
6
+ Example:
7
+ ```ruby
8
+ require 'hybrid_platforms_conductor/executable'
9
+
10
+ actions_executor = HybridPlatformsConductor::Executable.new.actions_executor
11
+
12
+ # Launch an interactive shell
13
+ actions_executor.execute_actions('my_node' => { interactive: true })
14
+ ```
15
+
16
+ ## Config DSL extension
17
+
18
+ None
19
+
20
+ ## Used credentials
21
+
22
+ | Credential | Usage
23
+ | --- | --- |
24
+
25
+ ## Used Metadata
26
+
27
+ | Metadata | Type | Usage
28
+ | --- | --- | --- |
29
+
30
+ ## Used environment variables
31
+
32
+ | Variable | Usage
33
+ | --- | --- |
34
+
35
+ ## External tools dependencies
36
+
37
+ None
@@ -0,0 +1,67 @@
1
+ # Action plugin: `remote_bash`
2
+
3
+ The `remote_bash` action plugin executes bash commands on a node (using a [connector](../connector)).
4
+ It takes various kinds of arguments:
5
+ * `String`: The bash command to execute.
6
+ * `Array<String>`: A list of bash commands to execute, sequentially.
7
+ * `Hash<Symbol, Object>`: A hash of properties describing the commands to execute in detail:
8
+ * **commands** (`Array<String>` or `String`): List of bash commands to execute (can be a single one). This is the default property also that allows to not use the Hash form for brevity.
9
+ * **file** (`String`): Name of a file from which commands should be taken.
10
+ * **env** (`Hash<String, String>`): Environment variables to be set before executing those commands.
11
+
12
+ Exit status, stdout and stderr of the execution can be accessed as a result of the call.
13
+
14
+ Example:
15
+ ```ruby
16
+ require 'hybrid_platforms_conductor/executable'
17
+
18
+ actions_executor = HybridPlatformsConductor::Executable.new.actions_executor
19
+
20
+ # Execute 1 command on the node
21
+ actions_executor.execute_actions('my_node' => { remote_bash: 'hostname' })
22
+ # => { 'my_node' => [0, "my_node\n", '' ] }
23
+ # In case of connection error:
24
+ # => { 'my_node' => [:connection_error, '', 'Unable to get a connector to my_node'] }
25
+
26
+ # Execute several commands
27
+ actions_executor.execute_actions('my_node' => { remote_bash: [
28
+ 'echo Hello',
29
+ 'hostname',
30
+ 'ls'
31
+ ]})
32
+
33
+ # Execute commands from a file
34
+ actions_executor.execute_actions('my_node' => { remote_bash: { file: '/path/to/my/file.cmds' } })
35
+
36
+ # Execute commands with environment variables set
37
+ actions_executor.execute_actions('my_node' => { remote_bash: {
38
+ commands: 'echo Hello ${world}',
39
+ env: {
40
+ 'world' => 'my World'
41
+ }
42
+ } })
43
+
44
+ ```
45
+
46
+ ## Config DSL extension
47
+
48
+ None
49
+
50
+ ## Used credentials
51
+
52
+ | Credential | Usage
53
+ | --- | --- |
54
+
55
+ ## Used Metadata
56
+
57
+ | Metadata | Type | Usage
58
+ | --- | --- | --- |
59
+
60
+ ## Used environment variables
61
+
62
+ | Variable | Usage
63
+ | --- | --- |
64
+
65
+ ## External tools dependencies
66
+
67
+ None
@@ -0,0 +1,69 @@
1
+ # Action plugin: `ruby`
2
+
3
+ The `ruby` action plugin executes Ruby code.
4
+ It takes various kinds of arguments:
5
+ * `Proc`: The Ruby block to execute
6
+ * `Hash<Symbol, Object>`: A hash of properties describing how Ruby code is to be executed:
7
+ * **code** (`Proc`): Ruby code to be executed. This is the default property, and can be given directly without using a Hash.
8
+ * **need_remote** (`Boolean`): Do we need a remote connection to the node for this code to run? [default = false]
9
+
10
+ The Ruby code block has the following signature:
11
+ * **stdout** (`IO`): Stream in which stdout of this action should be written.
12
+ * **stderr** (`IO`): Stream in which stderr of this action should be written.
13
+ * **action** (`Action`): Action we can use to access other context-specific methods, such as run_cmd.
14
+ * **connector** (`Connector` or `nil`): The connector to the node, or nil if none.
15
+
16
+ Example:
17
+ ```ruby
18
+ require 'hybrid_platforms_conductor/executable'
19
+
20
+ actions_executor = HybridPlatformsConductor::Executable.new.actions_executor
21
+
22
+ # Execute a simple Ruby block
23
+ actions_executor.execute_actions('my_node' => { ruby: proc do
24
+ puts 'Hello'
25
+ end })
26
+ # => Hello
27
+
28
+ # Execute a Ruby block that logs on stdout and stderr (those are returned by the action execution)
29
+ actions_executor.execute_actions('my_node' => { ruby: proc do |stdout, stderr|
30
+ stdout << 'Hello'
31
+ stderr << 'Hello on stderr'
32
+ end })
33
+ # => { 'my_node' => [0, 'Hello', 'Hello on stderr'] }
34
+
35
+ # Execute a Ruby block that needs a connection to the node, and uses it
36
+ actions_executor.execute_actions('my_node' => { ruby: {
37
+ code: proc do |stdout, stderr, action, connector|
38
+ # If we are connecting to my_node using SSH, change the user
39
+ if connector.is_a?(HybridPlatformsConductor::HpcPlugins::Connector::Ssh)
40
+ stdout << "The SSH user is #{connector.ssh_user}"
41
+ end
42
+ end,
43
+ need_remote: true
44
+ } })
45
+ # => { 'my_node' => [0, 'The SSH user is my_remote_user', ''] }
46
+ ```
47
+
48
+ ## Config DSL extension
49
+
50
+ None
51
+
52
+ ## Used credentials
53
+
54
+ | Credential | Usage
55
+ | --- | --- |
56
+
57
+ ## Used Metadata
58
+
59
+ | Metadata | Type | Usage
60
+ | --- | --- | --- |
61
+
62
+ ## Used environment variables
63
+
64
+ | Variable | Usage
65
+ | --- | --- |
66
+
67
+ ## External tools dependencies
68
+
69
+ None
@@ -0,0 +1,61 @@
1
+ # Action plugin: `scp`
2
+
3
+ The `scp` action plugin transfers a local file to a remote node (using a [connector](../connector)).
4
+ It takes a `Hash` as argument, as a set of source => destination_dir to copy files or directories from the local file system to the remote file system.
5
+ The hash can also contain the following properties:
6
+ * **sudo** (`Boolean`): Do we use sudo on the remote to make the copy? [default: false]
7
+ * **owner** (`String` or `nil`): Owner to use for files, or nil to use current one [default: nil]
8
+ * **group** (`String` or `nil`): Group to use for files, or nil to use current one [default: nil]
9
+
10
+ Example:
11
+ ```ruby
12
+ require 'hybrid_platforms_conductor/executable'
13
+
14
+ actions_executor = HybridPlatformsConductor::Executable.new.actions_executor
15
+
16
+ # Copy 1 file
17
+ actions_executor.execute_actions('my_node' => { scp: { '/path/to/file' => '/path/to/remote_dir' } })
18
+
19
+ # Copy several files
20
+ actions_executor.execute_actions('my_node' => { scp: {
21
+ '/path/to/file1' => '/path/to/remote_dir1',
22
+ '/path/to/file2' => '/path/to/remote_dir1',
23
+ '/path/to/file1' => '/path/to/remote_dir2',
24
+ } })
25
+
26
+ # Copy a file using sudo on my_node
27
+ actions_executor.execute_actions('my_node' => { scp: {
28
+ '/path/to/file' => '/path/to/remote_dir',
29
+ sudo: true
30
+ } })
31
+
32
+ # Copy a file and set it as a specific owner and group on my_node
33
+ actions_executor.execute_actions('my_node' => { scp: {
34
+ '/path/to/file' => '/path/to/remote_dir',
35
+ owner: 'remote_user',
36
+ group: 'remote_group'
37
+ } })
38
+ ```
39
+
40
+ ## Config DSL extension
41
+
42
+ None
43
+
44
+ ## Used credentials
45
+
46
+ | Credential | Usage
47
+ | --- | --- |
48
+
49
+ ## Used Metadata
50
+
51
+ | Metadata | Type | Usage
52
+ | --- | --- | --- |
53
+
54
+ ## Used environment variables
55
+
56
+ | Variable | Usage
57
+ | --- | --- |
58
+
59
+ ## External tools dependencies
60
+
61
+ None