kaigara 0.0.1 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a885b64939dc7a292636f93048a8a7039d75a04
4
- data.tar.gz: ab2063b2bd2c2b7df81921806ee6c0645837fc28
3
+ metadata.gz: 8e0a7546c9c6a70c5d81bd6f4caa93af7fcb21d9
4
+ data.tar.gz: dabf75ee6daa3970a01581132710badf1ff27f11
5
5
  SHA512:
6
- metadata.gz: a91108175bf25984d89b0c047242c0cf071f2dd7423d17847b0496c7999494301d7a33c62424d6b030e61be9b3cb610dfca1a26508542aabc25cb1366c86d11b
7
- data.tar.gz: 10283b83233635d609b304d6ce01529895dc991f1d7e61490a436b70f58709c34db834cec5bd44f62743ca68075eb93cb0da28134cf87ed4a7831639aadbff11
6
+ metadata.gz: 136c3a11b6c01f2bc47392ac5e3d58159505c7c235be1eed28967fc0e33fd27c25e4442c53014d7beb33c69955a6c951d021a171f58c4de555149a68b855abca
7
+ data.tar.gz: 72794ea2047d69fd377ecfde7a00af314fc385a690db1c8faeae8661acc38d67c97878db677a9d87697b2abab9e46c53bc7f24db1a189ce2ce81ff1cd2be1548
data/README.md CHANGED
@@ -22,9 +22,6 @@ Or install it yourself as:
22
22
 
23
23
  Basic commands are
24
24
  ```
25
- # Prepare ruby runtime on a remote host
26
- $> kaish remote bootstrap USER@SERVER
27
-
28
25
  # Creates a system operation package (sysops)
29
26
  $> kaish sysops create NAME
30
27
 
@@ -33,12 +30,6 @@ $> kaish sysops generate NAME
33
30
 
34
31
  # Execute all operations of the current working directory
35
32
  $> kaish sysops exec [DIRECTORY]
36
-
37
- # Install a kaigara sysops package from github or a private git repository
38
- $> kaish sysops install USER/NAME
39
-
40
- # list all kaigara sysops package located in ~/.kaigara/sysops
41
- $> kaish sysops list
42
33
  ```
43
34
 
44
35
  You can use `kaish help` any time to get help.
@@ -1,5 +1,7 @@
1
1
  require 'models/sysops/package'
2
- require 'models/sysops/kaigara_package'
2
+ require 'models/sysops/operation'
3
+ require 'models/sysops/environment'
4
+ require 'models/sysops/spec'
3
5
 
4
6
  module Kaigara
5
7
  class Sysops < BaseController
@@ -12,10 +14,6 @@ module Kaigara
12
14
  empty_directory(name)
13
15
  empty_directory(File.join(name, 'operations'))
14
16
  empty_directory(File.join(name, 'resources'))
15
- #in_destination(name) do
16
- # render('metadata.rb')
17
- # render('Vagrantfile')
18
- #end
19
17
  template('metadata.rb.erb', File.join(name, 'metadata.rb'))
20
18
  template('Vagrantfile.erb', File.join(name, 'Vagrantfile'))
21
19
  end
@@ -36,23 +34,5 @@ module Kaigara
36
34
  package.load!
37
35
  package.run!
38
36
  end
39
-
40
- desc 'install <(github login)/(operation name)>', 'Install a kaigara operation'
41
- def install(name)
42
- pkg = KaigaraPackage.new(name)
43
- begin
44
- config = YAML.load_file(File.dirname(__FILE__) + '/../../kaigara.yml')
45
- pkg.read_config! config
46
- rescue Exception => ex
47
- say("Failed to load node configuration! #{ex}", :red)
48
- end
49
-
50
- if pkg.is_installed?
51
- say('The package is already installed', :green)
52
- else
53
- say("Installing #{name}...")
54
- pkg.install()
55
- end
56
- end
57
37
  end
58
38
  end
@@ -1,14 +1,12 @@
1
1
  module Kaigara
2
2
  class Environment
3
- attr_accessor :variables
4
-
5
- def initialize
6
- @variables = {}
7
- end
8
-
9
- def method_missing(method_sym, *arguments, &block)
10
- @variables[method_sym.to_s] = arguments[0] rescue nil
3
+ def self.load_variables()
4
+ package = Package.new
5
+ @vars = package.load!
6
+ @vars.data.each_pair do |k, v|
7
+ Operation.send(:define_method, k.to_sym, Proc.new {v})
8
+ Operation::ThorShell.send(:define_method, k.to_sym, Proc.new {v})
9
+ end unless @vars.empty?
11
10
  end
12
11
  end
13
12
  end
14
-
@@ -1,9 +1,8 @@
1
1
  require 'open3'
2
2
 
3
3
  module Kaigara
4
- class Context
4
+ class Operation
5
5
  class ThorShell
6
-
7
6
  include Thor::Base
8
7
  include Thor::Actions
9
8
  include Thor::Shell
@@ -34,8 +33,9 @@ module Kaigara
34
33
  end
35
34
 
36
35
  def execute(cmd)
36
+ Environment.load_variables
37
37
  @shell.say "Running: #{cmd}", :yellow
38
- stdin, stdout, stderr, wait_thr = Open3.popen3(@environment.variables, cmd)
38
+ stdin, stdout, stderr, wait_thr = Open3.popen3({}, cmd)
39
39
  @shell.say stdout.read(), :green
40
40
  @shell.say stderr.read(), :red
41
41
  stdin.close
@@ -47,15 +47,24 @@ module Kaigara
47
47
  end
48
48
 
49
49
  def template(name, target = nil)
50
+ Environment.load_variables
50
51
  tpl_file = name + '.erb'
51
52
  destination = target
52
53
  destination = "/#{tpl_file}" if destination.nil?
53
54
  destination.gsub!(/\.erb$/,'')
54
55
 
55
56
  @shell.say "Rendering template #{tpl_file} to #{destination}", :yellow
56
- @shell.inject(@environment.variables)
57
57
  ThorShell.source_root(File.join(@work_dir, 'resources'))
58
58
  @shell.template(tpl_file, destination)
59
+
60
+ return destination
61
+ end
62
+
63
+ def script(name, path = nil)
64
+ target = template(name, File.join( (path.nil? ? "" : path), name))
65
+ @shell.chmod(target, 0755)
66
+ target.prepend('./') unless target.match(/^\//)
67
+ execute("#{target}")
59
68
  end
60
69
  end
61
70
  end
@@ -1,6 +1,3 @@
1
- require_relative 'spec'
2
- require_relative 'context'
3
-
4
1
  module Kaigara
5
2
  class Package
6
3
 
@@ -19,7 +16,6 @@ module Kaigara
19
16
  def initialize(path = '.')
20
17
  @options = {}
21
18
  @work_dir = path ? File.expand_path(path) : '.'
22
- #self.destination_root = @work_dir
23
19
 
24
20
  @operations_dir = File.join(@work_dir, OPERATIONS_DIR_NAME)
25
21
  @script_path = File.expand_path(File.join(@work_dir, METADATA_FILE_NAME))
@@ -46,7 +42,7 @@ module Kaigara
46
42
  end
47
43
 
48
44
  def execute_operation!(path)
49
- context = Context.new path
45
+ context = Operation.new path
50
46
  context.work_dir = @work_dir
51
47
  context.environment = @spec.environment
52
48
  context.apply!
@@ -1,5 +1,3 @@
1
- require_relative 'environment'
2
-
3
1
  class Spec
4
2
  attr_accessor :environment
5
3
  def initialize(parent)
@@ -22,9 +20,5 @@ class Spec
22
20
  source: source
23
21
  }
24
22
  end
25
-
26
- def vars
27
- yield environment
28
- end
29
23
  end
30
24
 
@@ -3,30 +3,12 @@
3
3
 
4
4
  Vagrant.configure(2) do |config|
5
5
  config.vm.box = "ubuntu/trusty64"
6
-
6
+
7
7
  config.vm.provider "virtualbox" do |vb|
8
- vb.cpus = "2"
9
- vb.memory = "2048"
8
+ vb.cpus = "1"
9
+ vb.memory = "1024"
10
10
  end
11
11
 
12
- <% if @project_name -%>
13
- config.vm.hostname = "<%= @project_name -%>"
14
- <%- else -%>
15
12
  config.vm.hostname = "vm"
16
- <%- end -%>
17
-
18
- # config.berkshelf.enabled = true
19
- # node_json = JSON.parse(Pathname(__FILE__).dirname.join('nodes', 'rails.json').read)
20
- # config.vm.provision :chef_solo do |chef|
21
- # chef.node_name = "rails"
22
- # chef.nodes_path = "./nodes"
23
- # chef.environments_path = "./environments"
24
- # chef.cookbooks_path = "./cookbooks"
25
- # chef.data_bags_path = "./data_bags"
26
- # chef.provisioning_path = "/tmp/vagrant-chef"
27
- # chef.run_list = node_json.delete('run_list') if node_json['run_list']
28
- # chef.json = node_json
29
- # end
30
-
13
+ config.vm.provision :kaigara
31
14
  end
32
-
@@ -1,8 +1,3 @@
1
- <% if @name -%>
2
- name '<%= @name -%>'
3
- <%- end -%>
4
-
5
- <% if @version -%>
6
- version '<%= @version -%>'
7
- <%- end -%>
8
-
1
+ Kaigara::Metadata.new do |v|
2
+ v.vagrant.home = '/vagrant'
3
+ end
data/lib/kaigara.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  require 'thor'
3
2
 
4
3
  app_path = File.expand_path('../../app', __FILE__)
@@ -10,3 +9,4 @@ require 'kaigara/application'
10
9
 
11
10
  require 'controllers/sysops'
12
11
  require 'kaigara/client'
12
+ require 'kaigara/metadata'
@@ -0,0 +1,3 @@
1
+ module Kaigara
2
+
3
+ end
@@ -0,0 +1,35 @@
1
+ require 'json'
2
+ require 'ostruct'
3
+
4
+ module Kaigara
5
+ class Metadata
6
+
7
+ class DeepHash < Hash
8
+ def method_missing(name, *args, &block)
9
+ if name[-1] == '='
10
+ key = name[0...-1]
11
+ self[key] = args.first
12
+ return self[key]
13
+
14
+ elsif !has_key?(name)
15
+ self[name] = DeepHash.new
16
+ end
17
+
18
+ return self[name]
19
+ end
20
+ end
21
+
22
+ attr_reader :data
23
+
24
+ def initialize(&block)
25
+ hash = DeepHash.new
26
+ block.call(hash)
27
+ json = hash.to_json
28
+ @data = JSON.parse(json, object_class: OpenStruct)
29
+ end
30
+
31
+ def method_missing(name, *args, &block)
32
+ return @data.send(name)
33
+ end
34
+ end
35
+ end
@@ -1,4 +1,4 @@
1
1
  module Kaigara
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaigara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Helios Technologies
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-31 00:00:00.000000000 Z
11
+ date: 2016-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -85,9 +85,8 @@ files:
85
85
  - README.md
86
86
  - Rakefile
87
87
  - app/controllers/sysops.rb
88
- - app/models/sysops/context.rb
89
88
  - app/models/sysops/environment.rb
90
- - app/models/sysops/kaigara_package.rb
89
+ - app/models/sysops/operation.rb
91
90
  - app/models/sysops/package.rb
92
91
  - app/models/sysops/spec.rb
93
92
  - app/templates/sysops/Vagrantfile.erb
@@ -97,21 +96,12 @@ files:
97
96
  - bin/kaish
98
97
  - bin/setup
99
98
  - kaigara.gemspec
100
- - kaigara.yml
101
99
  - lib/kaigara.rb
102
100
  - lib/kaigara/application.rb
103
101
  - lib/kaigara/base_controller.rb
104
- - lib/kaigara/baseops.rb
105
102
  - lib/kaigara/client.rb
106
- - lib/kaigara/sysops.rb
107
- - lib/kaigara/sysops/context.rb
108
- - lib/kaigara/sysops/environment.rb
109
- - lib/kaigara/sysops/kaigara_package.rb
110
- - lib/kaigara/sysops/package.rb
111
- - lib/kaigara/sysops/spec.rb
112
- - lib/kaigara/sysops/templates/Vagrantfile.erb
113
- - lib/kaigara/sysops/templates/metadata.rb.erb
114
- - lib/kaigara/sysops/templates/operation.rb.erb
103
+ - lib/kaigara/deephash.rb
104
+ - lib/kaigara/metadata.rb
115
105
  - lib/kaigara/version.rb
116
106
  homepage: https://github.com/helios-technologies/kaigara
117
107
  licenses:
@@ -1,28 +0,0 @@
1
- require 'yaml'
2
-
3
- module Kaigara
4
- class KaigaraPackage
5
- include Thor::Shell
6
-
7
- attr_accessor :name
8
- attr_accessor :package_repository
9
-
10
- def initialize(name)
11
- @name = name.split('/')
12
- end
13
-
14
- def install()
15
- # "cd $HOME/.kaish/packages && git clone #{@package_repository}" % @name
16
- Dir.mkdir("#{Dir.home}/.kaigara/pkgops/#{@name.last}") # This one's for test
17
- end
18
-
19
- def read_config! config
20
- conf = config['default']['operation'] || {}
21
- @package_repository = conf['package_repository']
22
- end
23
-
24
- def is_installed?()
25
- Dir.entries(Dir.home + '/.kaigara/pkgops').include? @name.last
26
- end
27
- end
28
- end
data/kaigara.yml DELETED
@@ -1,11 +0,0 @@
1
- default: &default
2
- operation:
3
- package_repository: github.com/%s/%s.git
4
- development:
5
- <<: *default
6
-
7
- test:
8
- <<: *default
9
-
10
- production:
11
- <<: *default
@@ -1,8 +0,0 @@
1
- module Kaigara
2
- class Baseops < Thor
3
- include Thor::Actions
4
- include Thor::Base
5
- include Thor::Shell
6
- end
7
- end
8
-
@@ -1,59 +0,0 @@
1
- require_relative 'sysops/package'
2
- require_relative 'sysops/kaigara_package'
3
-
4
- module Kaigara
5
- class Sysops < Baseops
6
- no_commands do
7
- def self.source_root
8
- File.expand_path('sysops/templates', __FILE__)
9
- end
10
- end
11
-
12
- desc 'create', 'Creates a folder hierarchy'
13
- method_option :name, aliases: '-n', desc: 'Project name'
14
- method_option :version, aliases: '-v', desc: 'Project version', default: '1.0.0'
15
- method_option :path, aliases: '-p', desc: 'Project path', default: '.'
16
- def create
17
- package = Package.new(options[:path])
18
- package.name = options[:name]
19
- package.version = options[:version]
20
- package.create!
21
- end
22
-
23
- desc 'generate <name>', 'Generate a new operation'
24
- method_option :path, aliases: '-p', desc: 'Project path', default: '.'
25
- def generate(name)
26
- package = Package.new(options[:path])
27
- package.load!
28
- package.create_operation!(name)
29
- end
30
-
31
- desc 'exec', 'Execute a package'
32
- method_option :path, aliases: '-p', desc: 'Project path', default: '.'
33
- def exec
34
- package = Package.new(options[:path])
35
- say "Executing #{package.name}#{"/#{package.version}" if package.version}...", :yellow
36
- package.load!
37
- package.run!
38
- end
39
-
40
- desc 'install <(github login)/(operation name)>', 'Install a kaigara operation'
41
- def install(name)
42
- pkg = KaigaraPackage.new(name)
43
- begin
44
- config = YAML.load_file(File.dirname(__FILE__) + '/../../kaigara.yml')
45
- pkg.read_config! config
46
- rescue Exception => ex
47
- say("Failed to load node configuration! #{ex}", :red)
48
- end
49
-
50
- if pkg.is_installed?
51
- say('The package is already installed', :green)
52
- else
53
- say("Installing #{name}...")
54
- pkg.install()
55
- end
56
- end
57
- end
58
- end
59
-
@@ -1,56 +0,0 @@
1
- require 'open3'
2
-
3
- module Kaigara
4
- class Context
5
- class ThorShell < Baseops
6
-
7
- no_commands do
8
- def inject(opts = {})
9
- opts.each do |k,v|
10
- instance_eval { class << self; self end }.send(:attr_accessor, k)
11
- send("#{k}=", v)
12
- end
13
- end
14
- end
15
- end
16
-
17
- attr_accessor :work_dir
18
- attr_accessor :name
19
- attr_accessor :environment
20
-
21
- def initialize(path)
22
- @shell = ThorShell.new
23
- @name = File.basename(path)
24
- @content = File.read(path)
25
- end
26
-
27
- def apply!
28
- @shell.say "Applying #{@name}\n--------------------", :yellow
29
- instance_eval @content
30
- end
31
-
32
- def execute(cmd)
33
- @shell.say "Running: #{cmd}", :yellow
34
- stdin, stdout, stderr, wait_thr = Open3.popen3(@environment.variables, cmd)
35
- @shell.say stdout.read(), :green
36
- @shell.say stderr.read(), :red
37
- stdin.close
38
- stdout.close
39
- stderr.close
40
-
41
- exit_status = wait_thr.value
42
- raise 'Non zero result' if exit_status != 0
43
- end
44
-
45
- def template(template, target = nil)
46
- destination = target
47
- destination = "/#{template}" if destination.nil?
48
- destination.gsub!(/\.erb$/,'')
49
-
50
- @shell.say "Rendering template #{template} to #{destination}", :yellow
51
- @shell.inject(@environment.variables)
52
- @shell.template(File.join(@work_dir, 'tpl', template), destination)
53
- end
54
- end
55
- end
56
-
@@ -1,14 +0,0 @@
1
- module Kaigara
2
- class Environment
3
- attr_accessor :variables
4
-
5
- def initialize
6
- @variables = {}
7
- end
8
-
9
- def method_missing(method_sym, *arguments, &block)
10
- @variables[method_sym.to_s] = arguments[0] rescue nil
11
- end
12
- end
13
- end
14
-
@@ -1,28 +0,0 @@
1
- require 'yaml'
2
-
3
- module Kaigara
4
- class KaigaraPackage
5
- include Thor::Shell
6
-
7
- attr_accessor :name
8
- attr_accessor :package_repository
9
-
10
- def initialize(name)
11
- @name = name.split('/')
12
- end
13
-
14
- def install()
15
- # "cd $HOME/.kaish/packages && git clone #{@package_repository}" % @name
16
- Dir.mkdir("#{Dir.home}/.kaigara/pkgops/#{@name.last}") # This one's for test
17
- end
18
-
19
- def read_config! config
20
- conf = config['default']['operation'] || {}
21
- @package_repository = conf['package_repository']
22
- end
23
-
24
- def is_installed?()
25
- Dir.entries(Dir.home + '/.kaigara/pkgops').include? @name.last
26
- end
27
- end
28
- end
@@ -1,69 +0,0 @@
1
- require_relative 'spec'
2
- require_relative 'context'
3
-
4
- module Kaigara
5
- class Package
6
- include Thor::Base
7
- include Thor::Actions
8
-
9
- source_root File.expand_path('../templates', __FILE__)
10
-
11
- METADATA_FILE_NAME = 'metadata.rb'
12
- VAGRANT_FILE_NAME = 'Vagrantfile'
13
- OPERATIONS_DIR_NAME = 'operations'
14
- RESOURCES_DIR_NAME = 'resources'
15
-
16
- attr_accessor :work_dir
17
- attr_accessor :operations_dir
18
- attr_accessor :script_path
19
- attr_accessor :dependencies
20
- attr_accessor :version
21
- attr_accessor :name
22
-
23
- def initialize(path)
24
- path ||= '.'
25
- @options = {}
26
- @work_dir = File.expand_path(path)
27
- self.destination_root = @work_dir
28
-
29
- @operations_dir = File.join(@work_dir, OPERATIONS_DIR_NAME)
30
- @script_path = File.expand_path(File.join(@work_dir, METADATA_FILE_NAME))
31
- @spec = Spec.new(self)
32
- end
33
-
34
- # Read and execute metadata.rb
35
- def load!
36
- script = File.read(@script_path)
37
- @spec.instance_eval(script)
38
- end
39
-
40
- # Create an empty project structure
41
- def create!
42
- template('metadata.rb.erb', File.join(@work_dir, METADATA_FILE_NAME))
43
- template('Vagrantfile.erb', File.join(@work_dir, VAGRANT_FILE_NAME))
44
- empty_directory(File.join(@work_dir, OPERATIONS_DIR_NAME))
45
- empty_directory(File.join(@work_dir, RESOURCES_DIR_NAME))
46
- end
47
-
48
- # Create an empty operation in ./operations
49
- def create_operation!(name)
50
- prefix = DateTime.now.strftime('%Y%m%d%H%M%S')
51
- template('operation.rb.erb', File.join(@operations_dir, "#{prefix}_#{name}.rb"))
52
- end
53
-
54
- # Execute operations in the operations directory one by one
55
- def run!
56
- Dir[File.join(@operations_dir, '*.rb')].each do |x|
57
- execute_operation!(x)
58
- end
59
- end
60
-
61
- def execute_operation!(path)
62
- context = Context.new path
63
- context.work_dir = @work_dir
64
- context.environment = @spec.environment
65
- context.apply!
66
- end
67
- end
68
- end
69
-
@@ -1,30 +0,0 @@
1
- require_relative 'environment'
2
-
3
- class Spec
4
- attr_accessor :environment
5
- def initialize(parent)
6
- @environment = Kaigara::Environment.new
7
- @parent = parent
8
- end
9
-
10
- def name(value)
11
- @parent.name = value
12
- end
13
-
14
- def version(value)
15
- @parent.version = value
16
- end
17
-
18
- def dep(name, version: nil, source: nil)
19
- @parent.dependencies ||= {}
20
- @parent.dependencies[name] = {
21
- version: version,
22
- source: source
23
- }
24
- end
25
-
26
- def vars
27
- yield environment
28
- end
29
- end
30
-
@@ -1,32 +0,0 @@
1
- # -*- mode: ruby -*-
2
- # vi: set ft=ruby :
3
-
4
- Vagrant.configure(2) do |config|
5
- config.vm.box = "ubuntu/trusty64"
6
-
7
- config.vm.provider "virtualbox" do |vb|
8
- vb.cpus = "2"
9
- vb.memory = "2048"
10
- end
11
-
12
- <% if @project_name -%>
13
- config.vm.hostname = "<%= @project_name -%>"
14
- <%- else -%>
15
- config.vm.hostname = "vm"
16
- <%- end -%>
17
-
18
- # config.berkshelf.enabled = true
19
- # node_json = JSON.parse(Pathname(__FILE__).dirname.join('nodes', 'rails.json').read)
20
- # config.vm.provision :chef_solo do |chef|
21
- # chef.node_name = "rails"
22
- # chef.nodes_path = "./nodes"
23
- # chef.environments_path = "./environments"
24
- # chef.cookbooks_path = "./cookbooks"
25
- # chef.data_bags_path = "./data_bags"
26
- # chef.provisioning_path = "/tmp/vagrant-chef"
27
- # chef.run_list = node_json.delete('run_list') if node_json['run_list']
28
- # chef.json = node_json
29
- # end
30
-
31
- end
32
-
@@ -1,8 +0,0 @@
1
- <% if @name -%>
2
- name '<%= @name -%>'
3
- <%- end -%>
4
-
5
- <% if @version -%>
6
- version '<%= @version -%>'
7
- <%- end -%>
8
-
@@ -1,2 +0,0 @@
1
- ## Created on <%= DateTime.now.strftime('%Y/%m/%d')%>
2
-