jannishuebl/orchparty

View on GitHub
lib/orchparty.rb

Summary

Maintainability
A
1 hr
Test Coverage
require "deep_merge"
require "orchparty/version"
require "orchparty/ast"
require "orchparty/context"
require "orchparty/transformations"
require "orchparty/dsl_parser"
require "orchparty/dsl_parser_kubernetes"
require "orchparty/plugin"
require "orchparty/kubernetes_application"
require "hash"

module Orchparty

  def self.load_all_available_plugins
    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|
      plugin(plugin_name)
    end
  end

  def self.plugins
    Orchparty::Plugin.plugins
  end

  def self.plugin(name)
    Orchparty::Plugin.load_plugin(name)
  end

  def self.ast(filename: , application:, force_variable_definition: nil )
    Transformations.transform(Orchparty::DSLParser.new(filename).parse, force_variable_definition: force_variable_definition).applications[application]
  end

  def self.generate(plugin_name, options, plugin_options)
    plugins[plugin_name].generate(ast(options), plugin_options)
  end

  def self.install(cluster_name: , application_name: , force_variable_definition:,  file_name: )
    app_config = Transformations.transform_kubernetes(Orchparty::Kubernetes::DSLParser.new(file_name).parse, force_variable_definition: force_variable_definition).applications[application_name]
    app = KubernetesApplication.new(app_config: app_config, namespace: application_name, cluster_name: cluster_name, file_name: file_name)
    app.install
  end

  def self.upgrade(cluster_name: , application_name: , force_variable_definition:,  file_name: )
    app_config = Transformations.transform_kubernetes(Orchparty::Kubernetes::DSLParser.new(file_name).parse, force_variable_definition: force_variable_definition).applications[application_name]
    app = KubernetesApplication.new(app_config: app_config, namespace: application_name, cluster_name: cluster_name, file_name: file_name)
    app.upgrade
  end

  def self.print(cluster_name: , application_name: , force_variable_definition:,  file_name:, method: )
    app_config = Transformations.transform_kubernetes(Orchparty::Kubernetes::DSLParser.new(file_name).parse, force_variable_definition: force_variable_definition).applications[application_name]
    app = KubernetesApplication.new(app_config: app_config, namespace: application_name, cluster_name: cluster_name, file_name: file_name)
    app.print(method)
  end
end