walheim 0.1.2
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.
- checksums.yaml +7 -0
- data/README.md +321 -0
- data/bin/whctl +703 -0
- data/lib/walheim/cluster_resource.rb +166 -0
- data/lib/walheim/config.rb +206 -0
- data/lib/walheim/handler_registry.rb +55 -0
- data/lib/walheim/namespaced_resource.rb +195 -0
- data/lib/walheim/resource.rb +76 -0
- data/lib/walheim/resources/apps.rb +576 -0
- data/lib/walheim/resources/configmaps.rb +48 -0
- data/lib/walheim/resources/namespaces.rb +41 -0
- data/lib/walheim/resources/secrets.rb +50 -0
- data/lib/walheim/sync.rb +60 -0
- data/lib/walheim/version.rb +5 -0
- data/lib/walheim.rb +19 -0
- metadata +105 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../namespaced_resource'
|
|
4
|
+
require_relative '../handler_registry'
|
|
5
|
+
|
|
6
|
+
module Resources
|
|
7
|
+
class Secrets < Walheim::NamespacedResource
|
|
8
|
+
def self.kind_info
|
|
9
|
+
{
|
|
10
|
+
plural: 'secrets',
|
|
11
|
+
singular: 'secret'
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.hooks
|
|
16
|
+
{
|
|
17
|
+
post_create: nil,
|
|
18
|
+
post_update: nil,
|
|
19
|
+
pre_delete: nil
|
|
20
|
+
}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.summary_fields
|
|
24
|
+
{
|
|
25
|
+
type: lambda { |manifest| manifest['type'] || 'Opaque' },
|
|
26
|
+
keys: lambda { |manifest|
|
|
27
|
+
data_keys = (manifest['data'] || {}).keys
|
|
28
|
+
string_keys = (manifest['stringData'] || {}).keys
|
|
29
|
+
all_keys = (data_keys + string_keys).uniq
|
|
30
|
+
all_keys.join(', ')
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def manifest_filename
|
|
38
|
+
'secret.yaml'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Register handler
|
|
44
|
+
info = Resources::Secrets.kind_info
|
|
45
|
+
Walheim::HandlerRegistry.register(
|
|
46
|
+
kind: info[:plural],
|
|
47
|
+
plural: info[:plural],
|
|
48
|
+
singular: info[:singular],
|
|
49
|
+
handler_class: Resources::Secrets
|
|
50
|
+
)
|
data/lib/walheim/sync.rb
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yaml'
|
|
4
|
+
|
|
5
|
+
module Walheim
|
|
6
|
+
class Sync
|
|
7
|
+
def initialize(namespaces_dir: 'namespaces', remote_base_dir: '/data/walheim')
|
|
8
|
+
@namespaces_dir = namespaces_dir
|
|
9
|
+
@remote_base_dir = remote_base_dir
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def sync(namespace:, kind:, name:)
|
|
13
|
+
namespace_config = load_namespace_config(namespace)
|
|
14
|
+
username = namespace_config['username']
|
|
15
|
+
hostname = namespace_config['hostname']
|
|
16
|
+
|
|
17
|
+
# Build remote host string (with optional username)
|
|
18
|
+
remote_host = username ? "#{username}@#{hostname}" : hostname
|
|
19
|
+
|
|
20
|
+
local_dir = "#{@namespaces_dir}/#{namespace}/#{kind}/#{name}/"
|
|
21
|
+
remote_dir = "#{@remote_base_dir}/#{kind}/#{name}/"
|
|
22
|
+
|
|
23
|
+
# Validate local directory exists
|
|
24
|
+
unless Dir.exist?(local_dir)
|
|
25
|
+
warn "Error: local directory '#{local_dir}' not found"
|
|
26
|
+
exit 1
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Ensure remote directory exists
|
|
30
|
+
puts "Creating remote directory: #{remote_dir}"
|
|
31
|
+
system("ssh #{remote_host} 'mkdir -p #{remote_dir}'")
|
|
32
|
+
|
|
33
|
+
# Sync files
|
|
34
|
+
puts "Syncing #{local_dir} to #{remote_host}:#{remote_dir}"
|
|
35
|
+
sync_result = system("rsync -avz --delete #{local_dir} #{remote_host}:#{remote_dir}")
|
|
36
|
+
|
|
37
|
+
unless sync_result
|
|
38
|
+
warn 'Error: rsync failed'
|
|
39
|
+
exit 1
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
puts "Synchronized #{local_dir} to #{remote_host}:#{remote_dir}"
|
|
43
|
+
|
|
44
|
+
{ username: username, hostname: hostname, remote_dir: remote_dir }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def load_namespace_config(namespace)
|
|
50
|
+
config_path = "#{@namespaces_dir}/#{namespace}/.namespace.yaml"
|
|
51
|
+
|
|
52
|
+
unless File.exist?(config_path)
|
|
53
|
+
warn "Error: namespace config '#{config_path}' not found"
|
|
54
|
+
exit 1
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
YAML.load_file(config_path)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
data/lib/walheim.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'walheim/version'
|
|
4
|
+
require_relative 'walheim/config'
|
|
5
|
+
require_relative 'walheim/handler_registry'
|
|
6
|
+
require_relative 'walheim/resource'
|
|
7
|
+
require_relative 'walheim/cluster_resource'
|
|
8
|
+
require_relative 'walheim/namespaced_resource'
|
|
9
|
+
require_relative 'walheim/sync'
|
|
10
|
+
|
|
11
|
+
# Load resource handlers
|
|
12
|
+
require_relative 'walheim/resources/namespaces'
|
|
13
|
+
require_relative 'walheim/resources/apps'
|
|
14
|
+
require_relative 'walheim/resources/secrets'
|
|
15
|
+
require_relative 'walheim/resources/configmaps'
|
|
16
|
+
|
|
17
|
+
module Walheim
|
|
18
|
+
class Error < StandardError; end
|
|
19
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: walheim
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Akhyar Amarullah
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-01-02 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: terminal-table
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '3.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '3.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: bundler
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '2.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '2.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '13.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '13.0'
|
|
55
|
+
description: Walheim is a Docker-based homelab configuration management system with
|
|
56
|
+
a kubectl-like CLI called whctl. Manage your homelab infrastructure with familiar
|
|
57
|
+
Kubernetes-style commands.
|
|
58
|
+
email:
|
|
59
|
+
- akhyar@chickenzord.com
|
|
60
|
+
executables:
|
|
61
|
+
- whctl
|
|
62
|
+
extensions: []
|
|
63
|
+
extra_rdoc_files: []
|
|
64
|
+
files:
|
|
65
|
+
- README.md
|
|
66
|
+
- bin/whctl
|
|
67
|
+
- lib/walheim.rb
|
|
68
|
+
- lib/walheim/cluster_resource.rb
|
|
69
|
+
- lib/walheim/config.rb
|
|
70
|
+
- lib/walheim/handler_registry.rb
|
|
71
|
+
- lib/walheim/namespaced_resource.rb
|
|
72
|
+
- lib/walheim/resource.rb
|
|
73
|
+
- lib/walheim/resources/apps.rb
|
|
74
|
+
- lib/walheim/resources/configmaps.rb
|
|
75
|
+
- lib/walheim/resources/namespaces.rb
|
|
76
|
+
- lib/walheim/resources/secrets.rb
|
|
77
|
+
- lib/walheim/sync.rb
|
|
78
|
+
- lib/walheim/version.rb
|
|
79
|
+
homepage: https://github.com/walheimlab/walheim-rb
|
|
80
|
+
licenses:
|
|
81
|
+
- MIT
|
|
82
|
+
metadata:
|
|
83
|
+
homepage_uri: https://github.com/walheimlab/walheim-rb
|
|
84
|
+
source_code_uri: https://github.com/walheimlab/walheim-rb
|
|
85
|
+
changelog_uri: https://github.com/walheimlab/walheim-rb/blob/main/CHANGELOG.md
|
|
86
|
+
post_install_message:
|
|
87
|
+
rdoc_options: []
|
|
88
|
+
require_paths:
|
|
89
|
+
- lib
|
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - ">="
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: 2.7.0
|
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
|
+
requirements:
|
|
97
|
+
- - ">="
|
|
98
|
+
- !ruby/object:Gem::Version
|
|
99
|
+
version: '0'
|
|
100
|
+
requirements: []
|
|
101
|
+
rubygems_version: 3.4.19
|
|
102
|
+
signing_key:
|
|
103
|
+
specification_version: 4
|
|
104
|
+
summary: Docker-based homelab configuration management with kubectl-like CLI
|
|
105
|
+
test_files: []
|