empeira 0.1.0.pre.alpha.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 (274) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +661 -0
  3. data/README.md +150 -0
  4. data/bin/empeira +18 -0
  5. data/config/defaults.yaml +229 -0
  6. data/docs/addons.md +331 -0
  7. data/docs/architecture.md +277 -0
  8. data/docs/configuration.md +1204 -0
  9. data/docs/development.md +472 -0
  10. data/docs/hiera-and-eyaml.md +361 -0
  11. data/docs/installation.md +280 -0
  12. data/docs/networking.md +362 -0
  13. data/docs/nodes.md +642 -0
  14. data/docs/proxy.md +136 -0
  15. data/docs/troubleshooting.md +361 -0
  16. data/lib/empeira/addons/environment.rb +82 -0
  17. data/lib/empeira/addons/error.rb +14 -0
  18. data/lib/empeira/addons/installation.rb +119 -0
  19. data/lib/empeira/addons/manifest.rb +112 -0
  20. data/lib/empeira/addons/service.rb +50 -0
  21. data/lib/empeira/addons/storage.rb +94 -0
  22. data/lib/empeira/agent/acquisition.rb +120 -0
  23. data/lib/empeira/agent/artifact.rb +41 -0
  24. data/lib/empeira/agent/authentication.rb +122 -0
  25. data/lib/empeira/agent/cache.rb +122 -0
  26. data/lib/empeira/agent/cache_storage.rb +82 -0
  27. data/lib/empeira/agent/download.rb +84 -0
  28. data/lib/empeira/agent/native_commands.rb +84 -0
  29. data/lib/empeira/agent/release_sources.rb +64 -0
  30. data/lib/empeira/agent/target.rb +66 -0
  31. data/lib/empeira/agent/versions.rb +29 -0
  32. data/lib/empeira/application.rb +86 -0
  33. data/lib/empeira/build.json +5 -0
  34. data/lib/empeira/build_info.rb +46 -0
  35. data/lib/empeira/cli/addons.rb +45 -0
  36. data/lib/empeira/cli/base.rb +73 -0
  37. data/lib/empeira/cli/completion.rb +42 -0
  38. data/lib/empeira/cli/config.rb +22 -0
  39. data/lib/empeira/cli/main.rb +114 -0
  40. data/lib/empeira/cli/node.rb +87 -0
  41. data/lib/empeira/cli/progress.rb +169 -0
  42. data/lib/empeira/cli/proxy.rb +36 -0
  43. data/lib/empeira/cli/update.rb +23 -0
  44. data/lib/empeira/completion/addons.rb +93 -0
  45. data/lib/empeira/completion/bash.rb +62 -0
  46. data/lib/empeira/completion/catalog.rb +170 -0
  47. data/lib/empeira/configuration/additional_services.rb +74 -0
  48. data/lib/empeira/configuration/addons.rb +85 -0
  49. data/lib/empeira/configuration/agent_schema.rb +163 -0
  50. data/lib/empeira/configuration/agent_values.rb +54 -0
  51. data/lib/empeira/configuration/bootstrap_guests.rb +42 -0
  52. data/lib/empeira/configuration/command_mocks.rb +65 -0
  53. data/lib/empeira/configuration/display.rb +20 -0
  54. data/lib/empeira/configuration/dns_rewrites.rb +58 -0
  55. data/lib/empeira/configuration/document.rb +67 -0
  56. data/lib/empeira/configuration/eyaml.rb +46 -0
  57. data/lib/empeira/configuration/hiera_modulepath.rb +40 -0
  58. data/lib/empeira/configuration/hiera_mount_schema.rb +62 -0
  59. data/lib/empeira/configuration/hiera_mounts.rb +83 -0
  60. data/lib/empeira/configuration/image_schema.rb +68 -0
  61. data/lib/empeira/configuration/loader.rb +70 -0
  62. data/lib/empeira/configuration/merge.rb +48 -0
  63. data/lib/empeira/configuration/network_redirects.rb +73 -0
  64. data/lib/empeira/configuration/node_images.rb +64 -0
  65. data/lib/empeira/configuration/schema.rb +215 -0
  66. data/lib/empeira/configuration/server_mounts.rb +106 -0
  67. data/lib/empeira/configuration/service_configuration.rb +40 -0
  68. data/lib/empeira/configuration/ssh_preferences.rb +83 -0
  69. data/lib/empeira/configuration/user.rb +46 -0
  70. data/lib/empeira/configuration/vm_interfaces.rb +147 -0
  71. data/lib/empeira/control_plane/additional_configurations.rb +106 -0
  72. data/lib/empeira/control_plane/browser.rb +73 -0
  73. data/lib/empeira/control_plane/controller.rb +763 -0
  74. data/lib/empeira/control_plane/discovery.rb +69 -0
  75. data/lib/empeira/control_plane/environment.rb +101 -0
  76. data/lib/empeira/control_plane/files.rb +263 -0
  77. data/lib/empeira/control_plane/health.rb +104 -0
  78. data/lib/empeira/control_plane/plan.rb +356 -0
  79. data/lib/empeira/control_plane/storage.rb +48 -0
  80. data/lib/empeira/errors.rb +9 -0
  81. data/lib/empeira/execution/console.rb +45 -0
  82. data/lib/empeira/execution/diagnostics.rb +210 -0
  83. data/lib/empeira/execution/launch_error.rb +14 -0
  84. data/lib/empeira/execution/result.rb +11 -0
  85. data/lib/empeira/execution/runner.rb +235 -0
  86. data/lib/empeira/execution/terminal.rb +35 -0
  87. data/lib/empeira/hostname_pattern.rb +14 -0
  88. data/lib/empeira/images/configuration.rb +44 -0
  89. data/lib/empeira/images/identity.rb +30 -0
  90. data/lib/empeira/images/recipe.rb +22 -0
  91. data/lib/empeira/images/reference.rb +43 -0
  92. data/lib/empeira/images/source.rb +19 -0
  93. data/lib/empeira/immutable.rb +19 -0
  94. data/lib/empeira/infrastructure/cleanup.rb +328 -0
  95. data/lib/empeira/infrastructure/definition.rb +59 -0
  96. data/lib/empeira/infrastructure/owned_files.rb +63 -0
  97. data/lib/empeira/infrastructure/recovery_inventory.rb +53 -0
  98. data/lib/empeira/infrastructure/service.rb +237 -0
  99. data/lib/empeira/infrastructure/status.rb +73 -0
  100. data/lib/empeira/infrastructure/store.rb +274 -0
  101. data/lib/empeira/modules/events.rb +67 -0
  102. data/lib/empeira/modules/git_safety.rb +60 -0
  103. data/lib/empeira/modules/host_git.rb +91 -0
  104. data/lib/empeira/modules/image.rb +27 -0
  105. data/lib/empeira/modules/installer.rb +67 -0
  106. data/lib/empeira/modules/request.rb +68 -0
  107. data/lib/empeira/modules/state.rb +87 -0
  108. data/lib/empeira/modules/storage.rb +35 -0
  109. data/lib/empeira/network/bootstrap_proxy.rb +157 -0
  110. data/lib/empeira/network/definition.rb +61 -0
  111. data/lib/empeira/network/direct_egress.rb +133 -0
  112. data/lib/empeira/network/egress.rb +27 -0
  113. data/lib/empeira/network/gateway.rb +79 -0
  114. data/lib/empeira/network/host_policy.rb +53 -0
  115. data/lib/empeira/network/naming.rb +28 -0
  116. data/lib/empeira/network/peer/adapter_image.rb +32 -0
  117. data/lib/empeira/network/peer/allocation.rb +45 -0
  118. data/lib/empeira/network/peer/attachment.rb +27 -0
  119. data/lib/empeira/network/peer/backend.rb +108 -0
  120. data/lib/empeira/network/peer/channel.rb +133 -0
  121. data/lib/empeira/network/peer/channel_server.rb +71 -0
  122. data/lib/empeira/network/peer/docker_adapter.rb +165 -0
  123. data/lib/empeira/network/peer/helper_security.rb +40 -0
  124. data/lib/empeira/network/peer/layout.rb +55 -0
  125. data/lib/empeira/network/peer/linux_podman.rb +114 -0
  126. data/lib/empeira/network/peer/podman_machine.rb +112 -0
  127. data/lib/empeira/network/policy.rb +39 -0
  128. data/lib/empeira/network/proxy_bindings.rb +52 -0
  129. data/lib/empeira/network/proxy_policy.rb +64 -0
  130. data/lib/empeira/network/redirects.rb +89 -0
  131. data/lib/empeira/network/resource.rb +50 -0
  132. data/lib/empeira/node/agent_installer.rb +31 -0
  133. data/lib/empeira/node/agent_package.rb +125 -0
  134. data/lib/empeira/node/agent_repository.rb +160 -0
  135. data/lib/empeira/node/apt_configuration.rb +85 -0
  136. data/lib/empeira/node/bootstrap.rb +17 -0
  137. data/lib/empeira/node/certificates.rb +98 -0
  138. data/lib/empeira/node/command_mock.rb +38 -0
  139. data/lib/empeira/node/command_mocks.rb +114 -0
  140. data/lib/empeira/node/container.rb +134 -0
  141. data/lib/empeira/node/container_agent_bootstrap.rb +43 -0
  142. data/lib/empeira/node/container_bootstrap.rb +52 -0
  143. data/lib/empeira/node/container_guest.rb +42 -0
  144. data/lib/empeira/node/container_lifecycle.rb +145 -0
  145. data/lib/empeira/node/container_preparation.rb +144 -0
  146. data/lib/empeira/node/container_state.rb +129 -0
  147. data/lib/empeira/node/definition.rb +20 -0
  148. data/lib/empeira/node/diagnostic_command.rb +19 -0
  149. data/lib/empeira/node/dnf_agent_repository.rb +202 -0
  150. data/lib/empeira/node/external_fact.rb +21 -0
  151. data/lib/empeira/node/image.rb +38 -0
  152. data/lib/empeira/node/interactive_tools.rb +33 -0
  153. data/lib/empeira/node/interface.rb +18 -0
  154. data/lib/empeira/node/inventory.rb +143 -0
  155. data/lib/empeira/node/package_bootstrap.rb +129 -0
  156. data/lib/empeira/node/package_proxy.rb +102 -0
  157. data/lib/empeira/node/package_sources.rb +19 -0
  158. data/lib/empeira/node/puppet_command.rb +12 -0
  159. data/lib/empeira/node/rpm_configuration.rb +62 -0
  160. data/lib/empeira/node/run_request.rb +52 -0
  161. data/lib/empeira/node/runtime_proxy.rb +86 -0
  162. data/lib/empeira/node/service.rb +72 -0
  163. data/lib/empeira/node/ssh_client.rb +25 -0
  164. data/lib/empeira/node/ssh_credentials.rb +78 -0
  165. data/lib/empeira/node/ssh_endpoint.rb +58 -0
  166. data/lib/empeira/node/ssh_identity.rb +37 -0
  167. data/lib/empeira/node/user_ssh.rb +60 -0
  168. data/lib/empeira/node/vm.rb +89 -0
  169. data/lib/empeira/node/vm_bootstrap.rb +53 -0
  170. data/lib/empeira/node/vm_lifecycle.rb +212 -0
  171. data/lib/empeira/node/vm_preflight.rb +37 -0
  172. data/lib/empeira/node/vm_preparation.rb +161 -0
  173. data/lib/empeira/node/vm_state.rb +161 -0
  174. data/lib/empeira/platform/facts.rb +66 -0
  175. data/lib/empeira/platform/kvm.rb +91 -0
  176. data/lib/empeira/platform/locations.rb +51 -0
  177. data/lib/empeira/platform/resolvers.rb +85 -0
  178. data/lib/empeira/platform/routes.rb +50 -0
  179. data/lib/empeira/progress.rb +70 -0
  180. data/lib/empeira/project_root.rb +47 -0
  181. data/lib/empeira/providers/lifecycle.rb +96 -0
  182. data/lib/empeira/providers/registry.rb +21 -0
  183. data/lib/empeira/providers/resource.rb +32 -0
  184. data/lib/empeira/providers.rb +55 -0
  185. data/lib/empeira/runtime/agent_helper.rb +34 -0
  186. data/lib/empeira/runtime/container.rb +184 -0
  187. data/lib/empeira/runtime/diagnostic_execution.rb +52 -0
  188. data/lib/empeira/runtime/docker.rb +87 -0
  189. data/lib/empeira/runtime/image_metadata.rb +83 -0
  190. data/lib/empeira/runtime/interface.rb +8 -0
  191. data/lib/empeira/runtime/mount_probe.rb +57 -0
  192. data/lib/empeira/runtime/podman.rb +122 -0
  193. data/lib/empeira/runtime/recipe_build.rb +103 -0
  194. data/lib/empeira/runtime/registry_diagnostics.rb +23 -0
  195. data/lib/empeira/runtime/service_arguments.rb +55 -0
  196. data/lib/empeira/runtime/service_images.rb +118 -0
  197. data/lib/empeira/runtime/service_inspection.rb +159 -0
  198. data/lib/empeira/runtime/services.rb +120 -0
  199. data/lib/empeira/runtime/update_helper.rb +97 -0
  200. data/lib/empeira/runtime/workspace_network.rb +69 -0
  201. data/lib/empeira/server/environment_configuration.rb +53 -0
  202. data/lib/empeira/server/http.rb +38 -0
  203. data/lib/empeira/server/puppetdb_runtime.rb +74 -0
  204. data/lib/empeira/server/relay_certificate.rb +76 -0
  205. data/lib/empeira/server/runtime.rb +90 -0
  206. data/lib/empeira/services/definition.rb +42 -0
  207. data/lib/empeira/updates/images.rb +104 -0
  208. data/lib/empeira/updates/modules.rb +45 -0
  209. data/lib/empeira/updates/service.rb +45 -0
  210. data/lib/empeira/version_requirement.rb +23 -0
  211. data/lib/empeira/vm/agent.rb +66 -0
  212. data/lib/empeira/vm/bootstrap_requirements.rb +69 -0
  213. data/lib/empeira/vm/certificate_runtime.rb +30 -0
  214. data/lib/empeira/vm/cloud_init.rb +171 -0
  215. data/lib/empeira/vm/disk.rb +136 -0
  216. data/lib/empeira/vm/guest.rb +123 -0
  217. data/lib/empeira/vm/guest_channel.rb +110 -0
  218. data/lib/empeira/vm/guest_network.rb +94 -0
  219. data/lib/empeira/vm/guest_output.rb +52 -0
  220. data/lib/empeira/vm/guest_shell.rb +79 -0
  221. data/lib/empeira/vm/guest_upload.rb +43 -0
  222. data/lib/empeira/vm/image_cache.rb +77 -0
  223. data/lib/empeira/vm/image_source.rb +91 -0
  224. data/lib/empeira/vm/interface.rb +8 -0
  225. data/lib/empeira/vm/interface_ownership.rb +124 -0
  226. data/lib/empeira/vm/interface_routes.rb +101 -0
  227. data/lib/empeira/vm/interfaces.rb +240 -0
  228. data/lib/empeira/vm/management.rb +73 -0
  229. data/lib/empeira/vm/prerequisites.rb +42 -0
  230. data/lib/empeira/vm/qemu.rb +83 -0
  231. data/lib/empeira/vm/qemu_runtime.rb +404 -0
  232. data/lib/empeira/vm/removal.rb +30 -0
  233. data/lib/empeira/vm/root_disk.rb +92 -0
  234. data/lib/empeira/vm/session_lock.rb +56 -0
  235. data/lib/empeira/vm/system_ssh.rb +29 -0
  236. data/lib/empeira/workspace.rb +42 -0
  237. data/lib/empeira.rb +209 -0
  238. data/resources/browser/relay.rb +22 -0
  239. data/resources/gateway/Containerfile +8 -0
  240. data/resources/gateway/bridge.rb +66 -0
  241. data/resources/gateway/configure.rb +323 -0
  242. data/resources/modules/Containerfile +15 -0
  243. data/resources/modules/Gemfile +5 -0
  244. data/resources/modules/Gemfile.lock +105 -0
  245. data/resources/modules/worker.rb +161 -0
  246. data/resources/network/adapter/Containerfile +13 -0
  247. data/resources/network/adapter/bridge_linux.go +51 -0
  248. data/resources/network/adapter/framing.go +45 -0
  249. data/resources/network/adapter/framing_test.go +53 -0
  250. data/resources/network/adapter/go.mod +3 -0
  251. data/resources/network/adapter/main_linux.go +273 -0
  252. data/resources/network/channel.rb +18 -0
  253. data/resources/network/ssh_connect.rb +32 -0
  254. data/resources/nodes/apt_sources.rb +66 -0
  255. data/resources/nodes/debian/Containerfile +10 -0
  256. data/resources/nodes/diagnostic_exec.rb +109 -0
  257. data/resources/nodes/interactive_tools.rb +139 -0
  258. data/resources/nodes/managed_file.rb +91 -0
  259. data/resources/nodes/management/guest_agent.py +415 -0
  260. data/resources/nodes/management/setup.sh +20 -0
  261. data/resources/nodes/management/shell_rc.sh +12 -0
  262. data/resources/nodes/management/system_account.sh +24 -0
  263. data/resources/nodes/management/system_home.sh +15 -0
  264. data/resources/nodes/rpm/Containerfile +10 -0
  265. data/resources/nodes/runtime_proxy.rb +244 -0
  266. data/resources/nodes/ssh/proxy.rb +16 -0
  267. data/resources/nodes/ssh/sshd_config +15 -0
  268. data/resources/nodes/ssh/start +6 -0
  269. data/resources/proxy/Containerfile +10 -0
  270. data/resources/relay/Containerfile +5 -0
  271. data/resources/relay/puppetdb.rb +81 -0
  272. data/resources/relay/server_environment.rb +10 -0
  273. data/resources/relay/server_start.sh +41 -0
  274. metadata +326 -0
data/README.md ADDED
@@ -0,0 +1,150 @@
1
+ # empeira
2
+
3
+ **Ephemeral Manifest Playground for Exploring Infrastructure, Roles & Automation**
4
+
5
+ [![Build & Tests](https://img.shields.io/github/actions/workflow/status/c8m6/empeira/ci.yml?branch=main&label=Build%20%26%20Tests)](https://github.com/c8m6/empeira/actions/workflows/ci.yml)
6
+ [![OpenVox E2E](https://img.shields.io/github/actions/workflow/status/c8m6/empeira/openvox.yml?branch=main&label=OpenVox%20E2E)](https://github.com/c8m6/empeira/actions/workflows/openvox.yml)
7
+ [![Release](https://img.shields.io/github/v/release/c8m6/empeira?include_prereleases&sort=date&label=Release)](https://github.com/c8m6/empeira/releases)
8
+ [![Ruby: 3.4 / 4.0](https://img.shields.io/badge/Ruby-3.4%20%7C%204.0-CC342D)](docs/installation.md)
9
+ [![License: AGPL-3.0-only](https://img.shields.io/badge/License-AGPL--3.0--only-blue)](LICENSE)
10
+
11
+ **ἐμπειρία (empeiría)** — experience gained through practice. The name reflects
12
+ learning about infrastructure by experimenting, testing and seeing what happens.
13
+
14
+ empeira gives your local Puppet control repository a disposable, isolated lab with
15
+ real agents, catalogs, Hiera and PuppetDB. Test infrastructure changes against an
16
+ OpenVox environment without connecting to production infrastructure.
17
+
18
+ ![Local manifests, modules and Hiera data feed an isolated OpenVox Server, OpenVoxDB and PostgreSQL lab with disposable container and VM nodes; Puppet runs return catalog and application feedback without a Git push or deployment.](docs/images/empeira-overview.png)
19
+
20
+ ## Edit. Save. Test.
21
+
22
+ **No Git push. No deployment.**
23
+
24
+ Edit your manifests, roles, modules or Hiera data locally. empeira works directly
25
+ with your development files, so there is no need to commit, push or deploy changes
26
+ before testing them. Run `empeira node puppet host1` on a disposable node to compile
27
+ a fresh catalog, apply it and see the results.
28
+
29
+ Saving a file does not start Puppet. Managed servers disable environment caching,
30
+ so the next catalog request reloads live code without a content scan or cache API call. Puppetfile changes
31
+ may require `empeira update modules`; `up` does not synchronize modules. See
32
+ [environment caching](docs/nodes.md#environment-cache-and-live-code) and
33
+ [Puppetfile modules](docs/hiera-and-eyaml.md#puppetfile-modules).
34
+
35
+ ## Features
36
+
37
+ OpenVox Server, OpenVoxDB, PostgreSQL and OpenVox Agent are the defaults. Server and
38
+ database OCI images are independently replaceable; agent packages, versions and
39
+ signed repositories or verified package artifacts are selected separately.
40
+
41
+ - Docker or rootless Podman container nodes; accelerated QEMU VM nodes.
42
+ - A workspace CA, certificate enrollment, live control code and Hiera/EYAML mounts.
43
+ - Shared DNS and container/VM networking, isolated by default.
44
+ - Allowlisted HTTP/HTTPS proxy access and explicit TCP egress rules.
45
+ - Node stop/start/destroy, direct shell access and real SSH.
46
+ - An internal Chromium desktop and small additional infrastructure services.
47
+ - Explicit Puppetfile module and image updates.
48
+
49
+ Hosts: Linux, macOS and Windows through WSL2/Linux. Ruby 3.4 is the minimum;
50
+ Ruby 3.4 and 4.0 are supported; CI runs deterministic tests with both versions.
51
+ Podman with Netavark is the default; Docker requires a Linux engine 28+ with
52
+ isolated bridge support. VMs require usable KVM or HVF. Platform setup and
53
+ validation limits are in [installation](docs/installation.md).
54
+
55
+ ## Installation
56
+
57
+ Until a release is available, install from source with Ruby, Bundler and Git:
58
+
59
+ ```bash
60
+ git clone https://github.com/c8m6/empeira.git
61
+ cd empeira
62
+ bundle install
63
+ export EMPEIRA_SOURCE="$PWD"
64
+ empeira() { BUNDLE_GEMFILE="$EMPEIRA_SOURCE/Gemfile" bundle exec ruby "$EMPEIRA_SOURCE/bin/empeira" "$@"; }
65
+ empeira --version
66
+ ```
67
+
68
+ The function lets you invoke the source CLI from your control repository. See
69
+ [installation](docs/installation.md) for runtime prerequisites, release-gem
70
+ installation and Bash completion.
71
+
72
+ ## Quickstart
73
+
74
+ Use a dedicated Git control repository and an empty configuration marker:
75
+
76
+ ```bash
77
+ cd ..
78
+ mkdir control-repo
79
+ cd control-repo
80
+ git init
81
+ touch .empeira.yaml
82
+ mkdir -p manifests
83
+ printf "file { '/tmp/empeira-example': content => 'managed by Puppet\n' }\n" > manifests/site.pp
84
+
85
+ empeira config validate
86
+ empeira up
87
+ empeira node run host1
88
+ empeira node puppet host1
89
+ empeira node exec host1 -- id
90
+ empeira node shell host1
91
+ ```
92
+
93
+ `node run` creates an Ubuntu 24.04 container, installs the default OpenVox Agent,
94
+ enrolls its certificate and applies the catalog. Inside the shell, inspect
95
+ `/tmp/empeira-example`; `exit` returns to the host. Select Docker with
96
+ `--container-engine docker` when Podman is not installed. Optional workstation
97
+ preferences can set that runtime in `~/.empeira.yaml`.
98
+
99
+ After editing your control code, run `empeira node puppet host1` again. If the
100
+ repository uses a Puppetfile, run `empeira update modules` before `up`.
101
+
102
+ ```console
103
+ empeira status
104
+ empeira node list
105
+ empeira browser
106
+ empeira node destroy host1
107
+ empeira destroy
108
+ ```
109
+
110
+ `destroy` permanently removes the workspace's owned nodes, CA and database data.
111
+ The control repository, module directory and shared image caches are preserved.
112
+ Destroy works independently of release requirements and guest management versions.
113
+ Use `destroy --project-path <former-absolute-git-root>` when the control repository no longer exists.
114
+ `node shell` opens a root terminal; `node console` keeps the VM serial login separate.
115
+ See [diagnostic access and recovery](docs/nodes.md#root-diagnostic-commands-and-interactive-shell).
116
+
117
+ ## Documentation
118
+
119
+ - [Configuration](docs/configuration.md): defaults, software selection and overrides.
120
+ - [Standalone addons](docs/addons.md): Git-based helper programs, manifests and environment API.
121
+ - [Nodes](docs/nodes.md): lifecycle, shell/SSH, VM images and bootstrap.
122
+ - [Hiera and EYAML](docs/hiera-and-eyaml.md): local data mounts and Puppetfile modules.
123
+ - [Networking](docs/networking.md) and [proxy policy](docs/proxy.md).
124
+ - [Troubleshooting](docs/troubleshooting.md).
125
+ - [Architecture](docs/architecture.md) and [development](docs/development.md).
126
+
127
+ ## Alpha status
128
+
129
+ empeira is being prepared for its first public alpha. Interfaces and inventory
130
+ schemas may change; unsupported inventory fails closed without automatic migration.
131
+ Use synthetic control code and disposable credentials. The shared network is a
132
+ cooperative lab, and its internal PuppetDB API is unauthenticated.
133
+
134
+ Container process mode does not provide a full booted OS. Systemd requires Podman
135
+ and cgroup v2. VM and shared-network support require actual host capabilities;
136
+ macOS/HVF and arm64 runtime validation are manual gates. Native Windows, automatic
137
+ self-update, aggregate `update all` and standalone platform binaries are unavailable.
138
+ The initial release distribution is a Ruby gem.
139
+
140
+ ## Community and license
141
+
142
+ [Contributions](CONTRIBUTING.md), [issues](https://github.com/c8m6/empeira/issues)
143
+ and [pull requests](https://github.com/c8m6/empeira/pulls) are welcome. Follow the
144
+ [code of conduct](CODE_OF_CONDUCT.md) and report vulnerabilities through the
145
+ [security policy](SECURITY.md).
146
+
147
+ Project-owned code and documentation are licensed under
148
+ [AGPL-3.0-only](LICENSE). Third-party packages and images retain their own licenses
149
+ and notices and are obtained from upstream; empeira does not bundle them or
150
+ redistribute proprietary Puppet Enterprise software.
data/bin/empeira ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/empeira'
5
+ require_relative '../lib/empeira/cli/main'
6
+
7
+ begin
8
+ Empeira::CLI::Main.start(ARGV)
9
+ rescue Empeira::Addons::Error => e
10
+ $stderr.write "#{e.message}\n"
11
+ exit e.exit_status
12
+ rescue Empeira::Error => e
13
+ # CLI errors must remain visible even when Ruby warnings are disabled.
14
+ $stderr.write "Error: #{e.message}\n"
15
+ exit 1
16
+ rescue Interrupt
17
+ exit 130
18
+ end
@@ -0,0 +1,229 @@
1
+ version: 1
2
+
3
+ # Standalone Git addons; no addon code runs during synchronization or completion.
4
+ addons: {}
5
+ mocks:
6
+ commands: {}
7
+ requirements:
8
+ empeira: null
9
+ runtime:
10
+ container_engine: podman
11
+ modules:
12
+ path: modules
13
+ server:
14
+ mounts: []
15
+ runtime:
16
+ startup:
17
+ entrypoint: /container-entrypoint.sh
18
+ arguments: [foreground]
19
+ eyaml_keys: direct
20
+ paths:
21
+ puppetdb_config: /etc/puppetlabs/puppet/puppetdb.conf
22
+ environment_keys:
23
+ certname: CERTNAME
24
+ dns_alt_names: DNS_ALT_NAMES
25
+ ca_hostname: CA_HOSTNAME
26
+ autosign: AUTOSIGN
27
+ server_hostname: OPENVOXSERVER_HOSTNAME
28
+ environment_timeout: OPENVOXSERVER_ENVIRONMENT_TIMEOUT
29
+ java_args: OPENVOXSERVER_JAVA_ARGS
30
+ max_active_instances: OPENVOXSERVER_MAX_ACTIVE_INSTANCES
31
+ puppetdb_enabled: USE_OPENVOXDB
32
+ storeconfigs: OPENVOX_STORECONFIGS
33
+ reports: OPENVOX_REPORTS
34
+ puppetdb_server_urls: OPENVOXDB_SERVER_URLS
35
+ environment: production
36
+ memory: 1536
37
+ cpus: 2
38
+ timeout: 240
39
+ puppetdb:
40
+ enabled: true
41
+ memory: 768
42
+ runtime:
43
+ entrypoint: /usr/bin/java
44
+ user: '0'
45
+ java_arguments: [-Xms128m, -Xmx256m, -Dlogappender=STDOUT]
46
+ main_arguments: [clojure.main, -m, puppetlabs.puppetdb.cli.services]
47
+ paths:
48
+ jar: /opt/puppetlabs/server/apps/puppetdb/puppetdb.jar
49
+ config: /etc/puppetlabs/puppetdb/conf.d
50
+ bootstrap_config: /etc/puppetlabs/puppetdb/bootstrap.cfg
51
+ data: /opt/puppetlabs/server/data/puppetdb
52
+ network:
53
+ egress: []
54
+ redirects: []
55
+ proxy:
56
+ enabled: false
57
+ global: []
58
+ rules: []
59
+ vm:
60
+ disk: 30
61
+ interfaces: []
62
+ console:
63
+ root_password: empeira
64
+ dns:
65
+ upstream:
66
+ mode: host
67
+ servers: []
68
+ additional_resolver: null
69
+ rewrites: []
70
+ node_defaults:
71
+ os: ubuntu
72
+ version: "24.04"
73
+ init: process
74
+ memory: 1024
75
+ cpus: 2
76
+ hiera:
77
+ mounts: []
78
+ eyaml:
79
+ enabled: false
80
+ private_key: null
81
+ public_key: null
82
+ images:
83
+ registry: null
84
+ network_adapter_builder:
85
+ repository: library/golang
86
+ tag: 1.27.1-alpine3.24
87
+ server:
88
+ repository: ghcr.io/openvoxproject/openvoxserver
89
+ tag: "8.16.0"
90
+ digest: "sha256:17902772813778ed8dabb08b83eec2ddce09e799a993e2ec01a46b5cb7994bd8"
91
+ puppetdb:
92
+ repository: ghcr.io/openvoxproject/openvoxdb
93
+ tag: "8.15.0"
94
+ digest: "sha256:a5e1c400a23392ac772abf27f0312032052c0a296628a7785eb3c3904ef44b5d"
95
+ postgres:
96
+ repository: library/postgres
97
+ tag: "16.13-alpine"
98
+ digest: "sha256:4e6e670bb069649261c9c18031f0aded7bb249a5b6664ddec29c013a89310d50"
99
+ dns:
100
+ repository: coredns/coredns
101
+ tag: "1.14.7"
102
+ r10k:
103
+ build: modules/Containerfile
104
+ relay:
105
+ build: relay/Containerfile
106
+ proxy:
107
+ build: proxy/Containerfile
108
+ direct_egress:
109
+ build: gateway/Containerfile
110
+ nodes:
111
+ ubuntu:
112
+ "22.04":
113
+ repository: library/ubuntu
114
+ tag: "22.04"
115
+ build: nodes/debian/Containerfile
116
+ architectures: [amd64, arm64]
117
+ "24.04":
118
+ repository: library/ubuntu
119
+ tag: "24.04"
120
+ build: nodes/debian/Containerfile
121
+ architectures: [amd64, arm64]
122
+ rocky:
123
+ "8":
124
+ repository: rockylinux/rockylinux
125
+ tag: "8"
126
+ build: nodes/rpm/Containerfile
127
+ architectures: [amd64, arm64]
128
+ "9":
129
+ repository: rockylinux/rockylinux
130
+ tag: "9"
131
+ build: nodes/rpm/Containerfile
132
+ architectures: [amd64, arm64]
133
+ almalinux:
134
+ "8":
135
+ repository: library/almalinux
136
+ tag: "8"
137
+ build: nodes/rpm/Containerfile
138
+ architectures: [amd64, arm64]
139
+ "9":
140
+ repository: library/almalinux
141
+ tag: "9"
142
+ build: nodes/rpm/Containerfile
143
+ architectures: [amd64, arm64]
144
+ oraclelinux:
145
+ "8":
146
+ repository: library/oraclelinux
147
+ tag: "8"
148
+ build: nodes/rpm/Containerfile
149
+ architectures: [amd64, arm64]
150
+ agent:
151
+ cache:
152
+ enabled: true
153
+ package: openvox-agent
154
+ version: "8.29.0"
155
+ install:
156
+ method: repository
157
+ repositories:
158
+ ubuntu22.04:
159
+ url: "https://apt.voxpupuli.org/openvox8-release-ubuntu22.04.deb"
160
+ destinations: [apt.voxpupuli.org]
161
+ sha256: "fb23fa5bcbea3608384ae40cf9a7f705485353c3d81c5dc69f6a4d6e2c94b389"
162
+ suffix: "-1+ubuntu22.04"
163
+ ubuntu24.04:
164
+ url: "https://apt.voxpupuli.org/openvox8-release-ubuntu24.04.deb"
165
+ destinations: [apt.voxpupuli.org]
166
+ sha256: "40b8052bcece23ed707e609504dd14b178dc662652455f2d30e9c8e614955a94"
167
+ suffix: "-1+ubuntu24.04"
168
+ el8:
169
+ url: "https://yum.voxpupuli.org/openvox8-release-el-8.noarch.rpm"
170
+ destinations: [yum.voxpupuli.org]
171
+ sha256: "21ae739f60bdf9f3710ee3f894bf750140b85b3804110641a88561d2d2fdeff3"
172
+ suffix: "-1.el8"
173
+ el9:
174
+ url: "https://yum.voxpupuli.org/openvox8-release-el-9.noarch.rpm"
175
+ destinations: [yum.voxpupuli.org]
176
+ sha256: "ad1a18ce2634cb3a7a5bf3bc5cc3b0d0dbb8cb4411872f2f326d948004a1772b"
177
+ suffix: "-1.el9"
178
+ apt: {}
179
+ dnf: {}
180
+ packages: {}
181
+ bootstrap:
182
+ enabled: false
183
+ scripts: []
184
+ packages:
185
+ install:
186
+ default: []
187
+ debian: []
188
+ redhat: []
189
+ remove:
190
+ default: []
191
+ debian: []
192
+ redhat: []
193
+ guests:
194
+ ubuntu:
195
+ "22.04":
196
+ agent_preinstalled: false
197
+ destinations: [archive.ubuntu.com, security.ubuntu.com, ports.ubuntu.com]
198
+ "24.04":
199
+ agent_preinstalled: false
200
+ destinations: [archive.ubuntu.com, security.ubuntu.com, ports.ubuntu.com]
201
+ rocky:
202
+ "8":
203
+ agent_preinstalled: false
204
+ destinations: [dl.rockylinux.org]
205
+ baseurl: "https://dl.rockylinux.org/pub/rocky/8"
206
+ "9":
207
+ agent_preinstalled: false
208
+ destinations: [dl.rockylinux.org]
209
+ baseurl: "https://dl.rockylinux.org/pub/rocky/9"
210
+ almalinux:
211
+ "8":
212
+ agent_preinstalled: false
213
+ destinations: [repo.almalinux.org]
214
+ baseurl: "https://repo.almalinux.org/almalinux/8"
215
+ "9":
216
+ agent_preinstalled: false
217
+ destinations: [repo.almalinux.org]
218
+ baseurl: "https://repo.almalinux.org/almalinux/9"
219
+ oraclelinux:
220
+ "8":
221
+ agent_preinstalled: false
222
+ destinations: [yum.oracle.com]
223
+ browser:
224
+ start_url: "about:blank"
225
+ image:
226
+ repository: linuxserver/chromium
227
+ tag: "latest"
228
+ containers:
229
+ additional: []