minfra-cli 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []