minfra-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +12 -0
  3. data/.gitignore +16 -0
  4. data/.rspec +2 -0
  5. data/CHANGELOG.md +2 -0
  6. data/Dockerfile +12 -0
  7. data/bin/build +20 -0
  8. data/bin/console +16 -0
  9. data/bin/container_exec +9 -0
  10. data/bin/run_tests +74 -0
  11. data/bin/setup.sh +22 -0
  12. data/exe/minfra +6 -0
  13. data/lib/deep_merge.rb +149 -0
  14. data/lib/hash.rb +28 -0
  15. data/lib/minfra/cli/ask.rb +43 -0
  16. data/lib/minfra/cli/command.rb +35 -0
  17. data/lib/minfra/cli/commands/dev.rb +54 -0
  18. data/lib/minfra/cli/commands/kube.rb +279 -0
  19. data/lib/minfra/cli/commands/project/branch.rb +17 -0
  20. data/lib/minfra/cli/commands/project/tag.rb +40 -0
  21. data/lib/minfra/cli/commands/project.rb +113 -0
  22. data/lib/minfra/cli/commands/setup.rb +49 -0
  23. data/lib/minfra/cli/commands/stack/app_template.rb +65 -0
  24. data/lib/minfra/cli/commands/stack/client_template.rb +36 -0
  25. data/lib/minfra/cli/commands/stack/kube_stack_template.rb +94 -0
  26. data/lib/minfra/cli/commands/stack.rb +120 -0
  27. data/lib/minfra/cli/commands/tag.rb +86 -0
  28. data/lib/minfra/cli/common.rb +41 -0
  29. data/lib/minfra/cli/config.rb +111 -0
  30. data/lib/minfra/cli/document.rb +19 -0
  31. data/lib/minfra/cli/hook.rb +65 -0
  32. data/lib/minfra/cli/logging.rb +26 -0
  33. data/lib/minfra/cli/main_command.rb +32 -0
  34. data/lib/minfra/cli/plugins.rb +34 -0
  35. data/lib/minfra/cli/runner.rb +59 -0
  36. data/lib/minfra/cli/templater.rb +63 -0
  37. data/lib/minfra/cli/version.rb +5 -0
  38. data/lib/minfra/cli.rb +80 -0
  39. data/lib/orchparty/ast.rb +53 -0
  40. data/lib/orchparty/cli.rb +69 -0
  41. data/lib/orchparty/context.rb +22 -0
  42. data/lib/orchparty/dsl_parser.rb +229 -0
  43. data/lib/orchparty/dsl_parser_kubernetes.rb +361 -0
  44. data/lib/orchparty/kubernetes_application.rb +305 -0
  45. data/lib/orchparty/plugin.rb +24 -0
  46. data/lib/orchparty/plugins/env.rb +41 -0
  47. data/lib/orchparty/transformations/all.rb +18 -0
  48. data/lib/orchparty/transformations/mixin.rb +73 -0
  49. data/lib/orchparty/transformations/remove_internal.rb +16 -0
  50. data/lib/orchparty/transformations/sort.rb +10 -0
  51. data/lib/orchparty/transformations/variable.rb +56 -0
  52. data/lib/orchparty/transformations.rb +24 -0
  53. data/lib/orchparty/version.rb +3 -0
  54. data/lib/orchparty.rb +59 -0
  55. data/minfra-cli.gemspec +40 -0
  56. data/project.json +7 -0
  57. data/templates/kind.yaml.erb +33 -0
  58. data/templates/kube_config.yaml.erb +7 -0
  59. data/templates/minfra_config.json.erb +26 -0
  60. metadata +196 -0
@@ -0,0 +1,41 @@
1
+ require 'shellwords'
2
+ module Orchparty
3
+ module Plugin
4
+ module Env
5
+ def self.desc
6
+ "generate environment variables"
7
+ end
8
+
9
+ def self.define_flags(c)
10
+ c.flag [:output,:o], :desc => 'Set the output file'
11
+ c.flag [:service,:s], :desc => 'Set the service to generate environment variables from.'
12
+ c.flag [:seperator,:sep], :desc => 'How to join the environment variables', default_value: "\\n"
13
+ end
14
+
15
+ def self.generate(ast, options)
16
+ output = env_output(ast, options)
17
+ if options[:output]
18
+ File.write(options[:output], output)
19
+ else
20
+ print output
21
+ end
22
+ end
23
+
24
+ def self.env_output(application, options)
25
+ if options[:service]
26
+ services = [ application.services[options[:service]] ]
27
+ else
28
+ services = application.services.values
29
+ end
30
+
31
+ options[:sep] = "\n" if options[:sep] == "\\n"
32
+
33
+ envs = services.map(&:environment).compact.inject({}) {|a, v| a.merge(v) }
34
+ envs.map{|k,v| "#{k.to_s}=#{v.is_a?(String) ? v.shellescape : v }"}.join(options[:sep])
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+
41
+ Orchparty::Plugin.register_plugin(:env, Orchparty::Plugin::Env)
@@ -0,0 +1,18 @@
1
+ module Orchparty
2
+ module Transformations
3
+ class All
4
+ def transform(ast)
5
+ ast.applications.each do |_, application|
6
+ application.services.transform_values! do |service|
7
+ if application.all.is_a?(Hash)
8
+ AST.service(application.all.deep_merge_concat(service))
9
+ else
10
+ service
11
+ end
12
+ end
13
+ end
14
+ ast
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,73 @@
1
+ module Orchparty
2
+ module Transformations
3
+ class Mixin
4
+ def transform(ast)
5
+ ast.applications.transform_values! do |application|
6
+ current = AST.application
7
+ application._mix.each do |mixin_name|
8
+ mixin = application._mixins[mixin_name] || ast._mixins[mixin_name]
9
+ mixin = resolve_chart_name(mixin, application)
10
+ current = current.deep_merge_concat(mixin)
11
+ end
12
+ transform_application(current.deep_merge_concat(application), ast)
13
+ end
14
+ ast
15
+ end
16
+
17
+ def resolve_chart_name(mixin, application)
18
+ # warn "ERROR: #{mixin} #{application}"
19
+ if mixin.services[:_mixin_temp_name]
20
+ mixin.services[application.name.to_s] = mixin.services.delete("_mixin_temp_name")
21
+ mixin.services[application.name.to_s][:name] = application.name.to_s
22
+ mixin._service_order.delete("_mixin_temp_name")
23
+ mixin._service_order << application.name.to_s
24
+ end
25
+ mixin
26
+ end
27
+
28
+ def transform_application(application, ast)
29
+ application.services = application.services.transform_values! do |service|
30
+ current = AST.service
31
+ service.delete(:_mix).compact.each do |mix|
32
+ begin
33
+ current = current.deep_merge_concat(resolve_mixin(mix, application, ast))
34
+ rescue
35
+ warn "problems with #{mix}"
36
+ raise
37
+ end
38
+ end
39
+ current.deep_merge_concat(service)
40
+ end
41
+ application
42
+ end
43
+
44
+ def resolve_mixin(mix, application, ast)
45
+ mixin = if mix.include? "."
46
+ mixin_name, mixin_service_name = mix.split(".")
47
+ if ast._mixins[mixin_name]
48
+ ast._mixins[mixin_name]._mixins[mixin_service_name]
49
+ else
50
+ warn "ERROR: Could not find mixin '#{mixin_name}'."
51
+ exit 1
52
+ end
53
+ else
54
+ application._mixins[mix]
55
+ end
56
+ if mixin.nil?
57
+ warn "ERROR: Could not find mixin '#{mix}'."
58
+ exit 1
59
+ end
60
+ transform_mixin(mixin, application, ast)
61
+ end
62
+
63
+ def transform_mixin(mixin, application, ast)
64
+ current = AST.application_mixin
65
+
66
+ mixin[:_mix].each do |mix|
67
+ current = current.deep_merge_concat(resolve_mixin(mix, application, ast))
68
+ end
69
+ current.deep_merge_concat(mixin)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,16 @@
1
+
2
+ module Orchparty
3
+ module Transformations
4
+ class RemoveInternal
5
+ def transform(ast)
6
+ ast.applications.each do |_, application|
7
+ application.delete_if {|k, _| k.to_s.start_with?("_")}
8
+ application.services = application.services.each do |_, service|
9
+ service.delete_if {|k, _| k.to_s.start_with?("_")}
10
+ end
11
+ end
12
+ ast
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+
2
+ module Orchparty
3
+ module Transformations
4
+ class Sort
5
+ def transform(ast)
6
+ AST::Node.new ast.deep_sort_by_key_and_sort_array(["command", "entrypoint"]) {|a, b| a.to_s <=> b.to_s }
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,56 @@
1
+ module Orchparty
2
+ module Transformations
3
+ class Variable
4
+
5
+ def initialize(opts = {})
6
+ @force_variable_definition = opts[:force_variable_definition]
7
+ end
8
+
9
+ def transform(ast)
10
+ ast.applications.each do |_, application|
11
+ application.services = application.services.each do |_, service|
12
+ resolve(application, service, service)
13
+ end
14
+ application.volumes = application.volumes.each do |_, volume|
15
+ resolve(application, volume, nil) if volume
16
+ end
17
+ end
18
+ ast
19
+ end
20
+
21
+ def resolve(application, subject, service)
22
+ subject.deep_transform_values! do |v|
23
+ if v.respond_to?(:call)
24
+ eval_value(build_context(application: application, service: service), v)
25
+ elsif v.is_a? Array
26
+ v.map do |v|
27
+ if v.respond_to?(:call)
28
+ eval_value(build_context(application: application, service: service), v)
29
+ else
30
+ v
31
+ end
32
+ end
33
+ else
34
+ v
35
+ end
36
+ end
37
+ end
38
+
39
+ def eval_value(context, value)
40
+ context.instance_exec(&value)
41
+ end
42
+
43
+ def build_context(application:, service:)
44
+ variables = application._variables || {}
45
+ variables = variables.merge({application: application.merge(application._variables)})
46
+ if service
47
+ variables = variables.merge(service._variables)
48
+ variables = variables.merge({service: service.merge(service._variables)})
49
+ end
50
+ context = Context.new(variables)
51
+ context._force_variable_definition = @force_variable_definition
52
+ context
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,24 @@
1
+ require 'ostruct'
2
+ require 'orchparty/transformations/all'
3
+ require 'orchparty/transformations/variable'
4
+ require 'orchparty/transformations/mixin'
5
+ require 'orchparty/transformations/remove_internal'
6
+ require 'orchparty/transformations/sort'
7
+
8
+ module Orchparty
9
+ module Transformations
10
+ def self.transform(ast, opts = {})
11
+ ast = All.new.transform(ast)
12
+ ast = Mixin.new.transform(ast)
13
+ ast = Variable.new(opts).transform(ast)
14
+ ast = RemoveInternal.new.transform(ast)
15
+ ast = Sort.new.transform(ast)
16
+ end
17
+
18
+ def self.transform_kubernetes(ast, opts = {})
19
+ ast = All.new.transform(ast)
20
+ ast = Mixin.new.transform(ast)
21
+ ast = Variable.new(opts).transform(ast)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module Orchparty
2
+ VERSION = "2.1.0"
3
+ end
data/lib/orchparty.rb ADDED
@@ -0,0 +1,59 @@
1
+ require "deep_merge"
2
+ require "orchparty/version"
3
+ require "orchparty/ast"
4
+ require "orchparty/context"
5
+ require "orchparty/transformations"
6
+ require "orchparty/dsl_parser"
7
+ require "orchparty/dsl_parser_kubernetes"
8
+ require "orchparty/plugin"
9
+ require "orchparty/kubernetes_application"
10
+ require "hash"
11
+
12
+ module Orchparty
13
+
14
+ def self.load_all_available_plugins
15
+ Gem::Specification.map {|f| f.matches_for_glob("orchparty/plugins/*.rb") }.flatten.map{|file_name| File.basename(file_name, ".*").to_sym }.each do |plugin_name|
16
+ plugin(plugin_name)
17
+ end
18
+ end
19
+
20
+ def self.options
21
+ @@options || {}
22
+ end
23
+ def self.plugins
24
+ Orchparty::Plugin.plugins
25
+ end
26
+
27
+ def self.plugin(name)
28
+ Orchparty::Plugin.load_plugin(name)
29
+ end
30
+
31
+ def self.ast(filename: , application:, force_variable_definition: nil )
32
+ Transformations.transform(Orchparty::DSLParser.new(filename).parse, force_variable_definition: force_variable_definition).applications[application]
33
+ end
34
+
35
+ def self.generate(plugin_name, options, plugin_options)
36
+ plugins[plugin_name].generate(ast(options), plugin_options)
37
+ end
38
+
39
+ def self.install(cluster_name: , application_name: , force_variable_definition:, file_name:, options: )
40
+ @@options= options
41
+ app_config = Transformations.transform_kubernetes(Orchparty::Kubernetes::DSLParser.new(file_name).parse, force_variable_definition: force_variable_definition).applications[application_name]
42
+ app = KubernetesApplication.new(app_config: app_config, namespace: application_name, cluster_name: cluster_name, file_name: file_name)
43
+ app.install
44
+ end
45
+
46
+ def self.upgrade(cluster_name: , application_name: , force_variable_definition:, file_name:, options: )
47
+ @@options = options
48
+ app_config = Transformations.transform_kubernetes(Orchparty::Kubernetes::DSLParser.new(file_name).parse, force_variable_definition: force_variable_definition).applications[application_name]
49
+ app = KubernetesApplication.new(app_config: app_config, namespace: application_name, cluster_name: cluster_name, file_name: file_name)
50
+ app.upgrade
51
+ end
52
+
53
+ def self.print(cluster_name: , application_name: , force_variable_definition:, file_name:, method:, options:, out_io: )
54
+ @@options= options
55
+ app_config = Transformations.transform_kubernetes(Orchparty::Kubernetes::DSLParser.new(file_name).parse, force_variable_definition: force_variable_definition).applications[application_name]
56
+ app = KubernetesApplication.new(app_config: app_config, namespace: application_name, cluster_name: cluster_name, file_name: file_name, out_io: out_io)
57
+ app.print(method)
58
+ end
59
+ end
@@ -0,0 +1,40 @@
1
+ require_relative 'lib/minfra/cli/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "minfra-cli"
5
+ spec.version = Minfra::Cli::VERSION
6
+ spec.authors = ["Peter Schrammel"]
7
+ spec.email = ["peter.schrammel@gmx.de"]
8
+
9
+ spec.summary = %q{A cli framework for k8s based development and deployment.}
10
+ spec.description = %q{A cli framework for k8s based development and deployment.}
11
+ spec.homepage = "https://github.com/fixingthenet/minfra-cli"
12
+ spec.license = "MIT"
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
+
15
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/fixingthenet/minfra-cli"
19
+ spec.metadata["changelog_uri"] = "https://github.com/fixingthenet/minfra-cli/CHANGELOG.md"
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
24
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ end
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_runtime_dependency 'thor', '~> 1.0', '>= 1.0.0'
31
+ spec.add_runtime_dependency "table_print", "1.5.6"
32
+ spec.add_runtime_dependency "rest-client", "~>2.0"
33
+ spec.add_runtime_dependency "hashie", "~>3.5"
34
+ spec.add_runtime_dependency "activesupport", "~> 6.1"
35
+ spec.add_runtime_dependency "erubis", "~> 2.7"
36
+
37
+ #gem 'byebug', require: true # convenience
38
+ #gem 'graphiti'
39
+ #gem 'faraday'
40
+ end
data/project.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "project": "minfra-cli",
3
+ "docker": {
4
+ "repo": "fxnet",
5
+ "name": "minfra-cli"
6
+ }
7
+ }
@@ -0,0 +1,33 @@
1
+ # this config file contains all config fields with comments
2
+ # the ports we expose have to be in a certain range: 30000-32767
3
+ # see https://kubernetes.io/docs/concepts/services-networking/service/#nodeport
4
+ # and we expose them on port from 30000 to be easily rememberable
5
+ kind: Cluster
6
+ apiVersion: kind.sigs.k8s.io/v1alpha3
7
+ nodes:
8
+ # the control plane node config
9
+ - role: control-plane
10
+ extraMounts:
11
+ - containerPath: "/host"
12
+ hostPath: "<%= host_path %>"
13
+ extraArgs:
14
+ - "--network"
15
+ - "<%= name %>"
16
+ - "--ip"
17
+ - "<%= ip %>"
18
+ - "-p"
19
+ - "80:80"
20
+ - "-p"
21
+ - "443:443"
22
+ - "-p"
23
+ - "30379:30379"
24
+ - "-p"
25
+ - "30432:30432"
26
+ - "-p"
27
+ - "30025:30025"
28
+ - "-p"
29
+ - "30017:30017"
30
+ - "-p"
31
+ - "6443:6443"
32
+ - "-v"
33
+ - "/tmp/hostpath_pv"
@@ -0,0 +1,7 @@
1
+ ---
2
+ apiVersion: v1
3
+ kind: Config
4
+ preferences: {}
5
+ clusters: []
6
+ users: []
7
+ contexts: []
@@ -0,0 +1,26 @@
1
+ {
2
+ "minfra" : {
3
+ "name": "fixingthenet"
4
+ },
5
+ "identity": {
6
+ "email": "<%= account_user_email %>"
7
+ },
8
+
9
+ "environments": {
10
+ "production": {
11
+ "endpoints" : {
12
+ }
13
+ },
14
+
15
+ "staging": {
16
+ "endpoints" : {
17
+ }
18
+ },
19
+
20
+ "dev": {
21
+ "endpoints" : {
22
+ }
23
+ }
24
+
25
+ }
26
+ }
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minfra-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Peter Schrammel
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-06-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: table_print
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '='
38
+ - !ruby/object:Gem::Version
39
+ version: 1.5.6
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.5.6
47
+ - !ruby/object:Gem::Dependency
48
+ name: rest-client
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: hashie
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.5'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.5'
75
+ - !ruby/object:Gem::Dependency
76
+ name: activesupport
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '6.1'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '6.1'
89
+ - !ruby/object:Gem::Dependency
90
+ name: erubis
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '2.7'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.7'
103
+ description: A cli framework for k8s based development and deployment.
104
+ email:
105
+ - peter.schrammel@gmx.de
106
+ executables:
107
+ - minfra
108
+ extensions: []
109
+ extra_rdoc_files: []
110
+ files:
111
+ - ".dockerignore"
112
+ - ".gitignore"
113
+ - ".rspec"
114
+ - CHANGELOG.md
115
+ - Dockerfile
116
+ - bin/build
117
+ - bin/console
118
+ - bin/container_exec
119
+ - bin/run_tests
120
+ - bin/setup.sh
121
+ - exe/minfra
122
+ - lib/deep_merge.rb
123
+ - lib/hash.rb
124
+ - lib/minfra/cli.rb
125
+ - lib/minfra/cli/ask.rb
126
+ - lib/minfra/cli/command.rb
127
+ - lib/minfra/cli/commands/dev.rb
128
+ - lib/minfra/cli/commands/kube.rb
129
+ - lib/minfra/cli/commands/project.rb
130
+ - lib/minfra/cli/commands/project/branch.rb
131
+ - lib/minfra/cli/commands/project/tag.rb
132
+ - lib/minfra/cli/commands/setup.rb
133
+ - lib/minfra/cli/commands/stack.rb
134
+ - lib/minfra/cli/commands/stack/app_template.rb
135
+ - lib/minfra/cli/commands/stack/client_template.rb
136
+ - lib/minfra/cli/commands/stack/kube_stack_template.rb
137
+ - lib/minfra/cli/commands/tag.rb
138
+ - lib/minfra/cli/common.rb
139
+ - lib/minfra/cli/config.rb
140
+ - lib/minfra/cli/document.rb
141
+ - lib/minfra/cli/hook.rb
142
+ - lib/minfra/cli/logging.rb
143
+ - lib/minfra/cli/main_command.rb
144
+ - lib/minfra/cli/plugins.rb
145
+ - lib/minfra/cli/runner.rb
146
+ - lib/minfra/cli/templater.rb
147
+ - lib/minfra/cli/version.rb
148
+ - lib/orchparty.rb
149
+ - lib/orchparty/ast.rb
150
+ - lib/orchparty/cli.rb
151
+ - lib/orchparty/context.rb
152
+ - lib/orchparty/dsl_parser.rb
153
+ - lib/orchparty/dsl_parser_kubernetes.rb
154
+ - lib/orchparty/kubernetes_application.rb
155
+ - lib/orchparty/plugin.rb
156
+ - lib/orchparty/plugins/env.rb
157
+ - lib/orchparty/transformations.rb
158
+ - lib/orchparty/transformations/all.rb
159
+ - lib/orchparty/transformations/mixin.rb
160
+ - lib/orchparty/transformations/remove_internal.rb
161
+ - lib/orchparty/transformations/sort.rb
162
+ - lib/orchparty/transformations/variable.rb
163
+ - lib/orchparty/version.rb
164
+ - minfra-cli.gemspec
165
+ - project.json
166
+ - templates/kind.yaml.erb
167
+ - templates/kube_config.yaml.erb
168
+ - templates/minfra_config.json.erb
169
+ homepage: https://github.com/fixingthenet/minfra-cli
170
+ licenses:
171
+ - MIT
172
+ metadata:
173
+ allowed_push_host: https://rubygems.org
174
+ homepage_uri: https://github.com/fixingthenet/minfra-cli
175
+ source_code_uri: https://github.com/fixingthenet/minfra-cli
176
+ changelog_uri: https://github.com/fixingthenet/minfra-cli/CHANGELOG.md
177
+ post_install_message:
178
+ rdoc_options: []
179
+ require_paths:
180
+ - lib
181
+ required_ruby_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: 2.3.0
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ requirements: []
192
+ rubygems_version: 3.1.2
193
+ signing_key:
194
+ specification_version: 4
195
+ summary: A cli framework for k8s based development and deployment.
196
+ test_files: []