ops_build 1.0.6 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: abd14ce613f0f247e14d4929e61873cf070328be
4
- data.tar.gz: 7f8304798ab543df0fa83f84e03f8a59907593cc
3
+ metadata.gz: 75752053b417d9c74d7d2ab6bd2072f2847d403a
4
+ data.tar.gz: 68b39a5adbc7ba53c8e548ab18449db28eecf9b5
5
5
  SHA512:
6
- metadata.gz: 2e9763210ba906274add19441068dc6e2a461bf48dee209f142c9efd8f9128041f8a1f170ebe750458e95be536f43e3a9924ef5de6ab18822c8a7e62289f0d94
7
- data.tar.gz: 78a1fc713225188114e3a9d3d81119aa04ddd40f31b4e42124bbb5e270b809d21c776d14eccb813da32ade6b9b7736e5ce139164d60872e1b59522148729a04f
6
+ metadata.gz: c174cf62071c344e2feab44acc79dbb8ce9972caefc6df2007a9fbde4cc03f981d050d58ca3d7a2d294056cd8c8038d9a33bcfebe147cc22f72d64b0fc1f555d
7
+ data.tar.gz: 86cbdcf58832e01d8a2d9beb17cf5f1f1a7a2e94af87c35bbc5e76aa8490bfb1e06e30666ad651e801944b7291261daf8c50089d45a05867a266ea7bc99e32d9
data/.gitignore CHANGED
@@ -1,3 +1,6 @@
1
+ # Rubymine project files
2
+ .idea/
3
+
1
4
  *.gem
2
5
  *.rbc
3
6
  .bundle
data/Gemfile CHANGED
@@ -1,5 +1,4 @@
1
+ source 'https://rubygems.org'
1
2
 
2
- source "https://rubygems.org"
3
-
4
- gem 'rake'
5
- gem 'erubis'
3
+ gem 'rake', '~> 10.4.2'
4
+ gem 'thor', '~> 0.19.1'
data/Rakefile CHANGED
@@ -1,2 +1 @@
1
- require "bundler/gem_tasks"
2
-
1
+ require 'bundler/gem_tasks'
data/TODO ADDED
@@ -0,0 +1 @@
1
+ - process manager? (when opsbuild is interrupted, packer build process continues ... )
data/bin/opsbuild CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'ops_build'
4
-
5
- OpsBuilder.start(ARGV)
6
-
3
+ require File.dirname(__FILE__) + '/../lib/ops_build'
7
4
 
5
+ OpsBuild::Runner.start(ARGV)
data/lib/ops_build/aws.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # AWS management class
3
3
  #
4
4
  module OpsBuild
5
- class AwsSupport
5
+ class Aws
6
6
  def aws_get_account_id
7
7
  ENV['AWS_ACCOUNT_ID']
8
8
  end
@@ -2,45 +2,36 @@
2
2
  # Berkshelf management class
3
3
  #
4
4
  module OpsBuild
5
- class BerkshelfSupport
6
- attr_accessor :berkshelf_dir, :berkshelf_opts
5
+ class Berkshelf
6
+ attr_reader :dir, :opts
7
7
 
8
- def initialize(berks_dir=nil, silent=true)
9
- unless system("berks version -q")
10
- puts(">>> Berks not installed !")
11
- exit(1)
12
- end
8
+ def initialize(dir: nil, silent: true)
9
+ Validations::check_binary!('berks')
13
10
 
14
- if @berks_dir.nil?
15
- # Create temporary directory for packer/docker communication
16
- @berkshelf_dir = Dir::tmpdir+"/"+Dir::Tmpname.make_tmpname('berks', nil)
17
- else
18
- @berkshelf_dir = berks_dir
19
- end
11
+ @dir = dir || Dir.mktmpdir('berks')
12
+ @opts = ''
20
13
 
21
- if silent
22
- @berkshelf_opts = '-q'
23
- else
24
- @berkshelf_opts = ''
25
- end
14
+ @opts << '-q' if silent
26
15
  end
27
16
 
28
17
  #
29
18
  # Run berks vendor
30
- def berks_vendor()
31
- system("berks vendor #{@berkshelf_opts} #{@berkshelf_dir}")
19
+ def vendor
20
+ OpsBuild.logger.info("Vendoring cookbooks with berks to #{@dir}")
21
+ Utils::execute("berks vendor #{@opts} #{@dir}", log_prefix: 'berks:')
32
22
  end
33
23
 
34
24
  #
35
25
  # Run berks install
36
- def berks_install
37
- system("berks install #{@berkshelf_opts}")
26
+ def install
27
+ OpsBuild.logger.info('Installing cookbooks with berks')
28
+ Utils::execute("berks install #{@opts}", log_prefix: 'berks:')
38
29
  end
39
30
 
40
31
  #
41
32
  # Cleanup Berks directory
42
- def berks_cleanup()
43
- FileUtils.rm_rf(@berkshelf_dir)
33
+ def cleanup
34
+ FileUtils.rm_rf(@dir)
44
35
  end
45
36
  end
46
37
  end
@@ -2,7 +2,7 @@
2
2
  # Chefspec management class
3
3
  #
4
4
  module OpsBuild
5
- class ChefspecSupport
5
+ class Chefspec
6
6
 
7
7
  end
8
8
  end
@@ -0,0 +1,69 @@
1
+ module OpsBuild
2
+ module Commands
3
+ class Build < Thor
4
+ def self.shared_options
5
+ option :ec2_region, type: :string, aliases: '-R', desc: 'AWS EC2 region', default: 'us-east-1'
6
+ option :aws_access, type: :string, aliases: '-A', desc: 'AWS Access key'
7
+ option :aws_secret, type: :string, aliases: '-S', desc: 'AWS Secret key'
8
+ end
9
+
10
+ desc 'packer TEMPLATE', 'build packer template'
11
+ shared_options
12
+ option :berk_dir, type: :string, aliases: '-b', desc: 'Berkshelf cookbook directory path'
13
+ def packer(template)
14
+ packer = Packer.new
15
+ berkshelf = Berkshelf.new(dir: options[:berk_dir], silent: false)
16
+ # aws = Aws.new
17
+
18
+ OpsBuild.logger.info("Building VM using packer from template #{template}")
19
+
20
+ # aws_access_key = options[:aws_access] || aws.aws_get_access_key
21
+ # aws_secret_key = options[:aws_secret] || aws.aws_get_secret_key
22
+ # aws_region = options[:ec2_region] || aws.aws_get_ec2_region
23
+
24
+ aws_access_key = options[:aws_access] || ENV['AWS_ACCESS_KEY']
25
+ aws_secret_key = options[:aws_secret] || ENV['AWS_SECRET_KEY']
26
+ aws_region = options[:ec2_region] || ENV['AWS_EC2_REGION']
27
+
28
+ # Validations::not_empty!(aws_access_key, :aws_access)
29
+ # Validations::not_empty!(aws_secret_key, :aws_secret)
30
+ # Validations::not_empty!(aws_region, :ec2_region)
31
+
32
+ # Add some config variables
33
+ packer.add_user_variable(:aws_access_key, aws_access_key) if aws_access_key
34
+ packer.add_user_variable(:aws_secret_key, aws_secret_key) if aws_secret_key
35
+ packer.add_user_variable(:aws_region, aws_region) if aws_region
36
+ packer.add_user_variable(:cookbook_path, berkshelf.dir)
37
+
38
+ begin
39
+ # Install missing cookbooks
40
+ berkshelf.install
41
+
42
+ # Load cookbooks to correct dir.
43
+ berkshelf.vendor
44
+
45
+ # Validate packer template
46
+ packer.validate(template)
47
+
48
+ # Run packer
49
+ packer.build(template)
50
+
51
+ packer.get_ami_id
52
+ rescue => e
53
+ OpsBuild.logger.error(e.message)
54
+ exit(1)
55
+ ensure
56
+ OpsBuild.logger.info("Cleaning up cookbooks/packer files from system.")
57
+ berkshelf.cleanup
58
+ packer.cleanup
59
+ end
60
+ end
61
+
62
+ desc 'vagrant TEMPLATE', 'build vagrant box'
63
+ shared_options
64
+ def vagrant(template)
65
+ # TODO
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,23 @@
1
+ module OpsBuild
2
+ module Commands
3
+ class Kitchen < Thor
4
+ desc 'coverage SUITE', 'Run kitchen converge for given suite'
5
+ def converge_kitchen(suite)
6
+ kitchen = OpsBuild::Kitchen.new
7
+ kitchen.kitchen_converge(suite)
8
+ end
9
+
10
+ desc 'verify SUITE', 'Run kitchen verify for given suite'
11
+ def verify_kitchen(suite)
12
+ kitchen = OpsBuild::Kitchen.new
13
+ kitchen.kitchen_verify(suite)
14
+ end
15
+
16
+ desc 'test SUITE', 'Run kitchen test for given platform'
17
+ def test_kitchen(suite)
18
+ kitchen = OpsBuild::Kitchen.new
19
+ kitchen.kitchen_test(suite)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ module OpsBuild
2
+ module Commands
3
+ class Validate < Thor
4
+ desc 'packer TEMPLATE', 'validate packer template'
5
+ def packer(template)
6
+ packer = OpsBuild::Packer.new
7
+ packer.packer_validate(template)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -2,7 +2,7 @@
2
2
  # Kitchen test management class
3
3
  #
4
4
  module OpsBuild
5
- class KitchenSupport
5
+ class Kitchen
6
6
  def kitchen_converge(suite)
7
7
  system("kitchen converge #{suite}")
8
8
  end
@@ -2,24 +2,17 @@
2
2
  # Packer management class
3
3
  #
4
4
  module OpsBuild
5
- require 'json'
6
- require 'tempfile'
5
+ class Packer
6
+ attr_accessor :user_vars, :user_var_file
7
7
 
8
- class PackerSupport
9
- attr_accessor :user_vars, :user_var_file, :packer_log
10
-
11
- def initialize()
8
+ def initialize
9
+ Validations::check_binary!('packer')
12
10
  @user_vars = {}
13
-
14
- unless system("packer version 1>/dev/null")
15
- puts(">>> Packer not installed !")
16
- exit(1)
17
- end
18
11
  end
19
12
 
20
13
  #
21
14
  # Add name/value pair to users_vars hash which is going to be used later for packer var-file
22
- def packer_add_user_variable(name, value)
15
+ def add_user_variable(name, value)
23
16
  unless name.nil? and value.nil?
24
17
  @user_vars[name] = value
25
18
  end
@@ -27,81 +20,45 @@ module OpsBuild
27
20
 
28
21
  #
29
22
  # Run packer build
30
- def packer_build(packer_config)
31
- packer_options = ""
23
+ def build(config)
24
+ options = ''
32
25
 
33
- packer_create_var_file()
26
+ create_var_file
34
27
 
35
28
  unless @user_var_file.nil?
36
- puts(">>>> Changing packer build with variables file from: #{@user_var_file.path} ")
37
- packer_options = "-machine-readable -var-file #{@user_var_file.path}"
38
- end
39
-
40
- if @packer_log.nil?
41
- packer_create_log_file()
42
- puts(">>>> Using file #{@packer_log.path} as log file.")
43
- end
44
-
45
- unless system("packer build #{packer_options} #{packer_config} | tee -a #{@packer_log.path}")
46
- puts(">>>> Packer build failed.")
47
- raise
29
+ OpsBuild.logger.info("Changing packer build with variables file from: #{@user_var_file.path}")
30
+ options = " -var-file #{@user_var_file.path}"
48
31
  end
49
- puts(">>>>> packer run exit $?")
50
- end
51
32
 
52
- def packer_get_ami_id()
53
- # Get AMI id by greping log for given string and then getting last value
54
- ami = File.foreach(@packer_log.path).grep(/amazon-ebs,artifact.*,id/).first
55
-
56
- if ami.nil?
57
- puts(">>>> Packer build failed.")
58
- exit(1)
59
- else
60
- puts(">>>> Packer built ami: #{ami}")
61
- ami.chomp.split(':').last
62
- end
33
+ Utils::execute("packer build -color=false -machine-readable #{options} #{config}")
63
34
  end
64
35
 
65
36
  #
66
37
  # Validate packer template
67
- def packer_validate(packer_config)
68
- packer_options = ""
38
+ def validate(config)
39
+ options = ''
69
40
 
70
- packer_create_var_file()
41
+ create_var_file
71
42
 
72
43
  unless @user_var_file.nil?
73
- puts(">>>> Customizing packer build with variable file from: #{@user_var_file.path} ")
74
- packer_options = "-var-file #{@user_var_file.path}"
44
+ OpsBuild.logger.info("Customizing packer build with variable file from: #{@user_var_file.path}")
45
+ options = "-var-file #{@user_var_file.path}"
75
46
  end
76
47
 
77
- unless system("packer validate #{packer_options} #{packer_config}")
78
- puts(">>> Packer template validation failed !")
79
- raise
80
- end
48
+ Utils::execute("packer validate #{options} #{config}")
81
49
  end
82
50
 
83
51
  #
84
- # Clean user_var-file/packer_log from system
85
- def packer_cleanup()
52
+ # Clean user_var-file/log from system
53
+ def cleanup
86
54
  unless @user_var_file.nil?
87
55
  @user_var_file.unlink
88
56
  @user_var_file.close
89
57
  end
90
-
91
- unless @packer_log.nil?
92
- @packer_log.unlink
93
- @packer_log.close
94
- end
95
58
  end
96
59
 
97
60
  private
98
- def packer_create_log_file()
99
- if @packer_log.nil?
100
- @packer_log = Tempfile.new('packer-log-file')
101
- end
102
- end
103
-
104
- def packer_create_var_file()
61
+ def create_var_file
105
62
  if @user_var_file.nil?
106
63
  @user_var_file = Tempfile.new('packer-var-file')
107
64
  @user_var_file.write(@user_vars.to_json)
@@ -0,0 +1,14 @@
1
+ module OpsBuild
2
+ class Runner < Thor
3
+ class_option :verbose, :type => :boolean
4
+
5
+ desc 'build SUBCOMMAND ...ARGS', 'build'
6
+ subcommand 'build', Commands::Build
7
+
8
+ desc 'validate SUBCOMMAND ...ARGS', 'validate'
9
+ subcommand 'validate', Commands::Validate
10
+
11
+ desc 'kitchen SUBCOMMAND ...ARGS', 'kitchen'
12
+ subcommand 'kitchen', Commands::Kitchen
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ module OpsBuild
2
+ class Utils
3
+ def self.execute(cmd, log_level: :debug, log_prefix: '', raise_on_failure: true)
4
+ OpsBuild.logger.debug("Running command '#{cmd}'")
5
+ _, out, wait_thr = Open3.popen2e(cmd)
6
+
7
+ while line = out.gets
8
+ OpsBuild.logger.__send__(log_level, "#{log_prefix} #{line}")
9
+ end
10
+
11
+ code = wait_thr.value.exitstatus # #value is blocking call
12
+ raise "Error executing '#{cmd}'. Exit code: #{code}" if code != 0 && raise_on_failure
13
+ out.close
14
+
15
+ code
16
+ end
17
+ end
18
+ end
@@ -2,7 +2,7 @@
2
2
  # Vagrant management class
3
3
  #
4
4
  module OpsBuild
5
- class VagrantSupport
5
+ class Vagrant
6
6
 
7
7
  end
8
8
  end
@@ -0,0 +1,11 @@
1
+ module OpsBuild
2
+ class Validations
3
+ def self.not_empty!(val, var_name)
4
+ raise "'#{var_name}' cannot be empty!" if val.nil? || val.empty?
5
+ end
6
+
7
+ def self.check_binary!(bin)
8
+ raise "Binary '#{bin}' not found!" if `command -v #{bin}`.empty?
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module OpsBuild
2
- VERSION="1.0.6"
2
+ VERSION = '1.1.0'
3
3
  end
data/lib/ops_build.rb CHANGED
@@ -3,95 +3,38 @@ require 'rubygems'
3
3
  require 'fileutils'
4
4
  require 'json'
5
5
  require 'rbconfig'
6
- require 'tempfile'
6
+ require 'tmpdir'
7
7
  require 'thor'
8
+ require 'open3'
8
9
  require 'yaml'
10
+ require 'logger'
9
11
 
10
- require "ops_build/version"
12
+ lib = File.expand_path('..', __FILE__)
13
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
14
+
15
+ require 'ops_build/commands/build'
16
+ require 'ops_build/commands/kitchen'
17
+ require 'ops_build/commands/validate'
18
+ require 'ops_build/runner'
19
+ require 'ops_build/version'
11
20
  require 'ops_build/aws'
12
21
  require 'ops_build/berkshelf'
13
22
  require 'ops_build/chefspec'
14
23
  require 'ops_build/kitchen'
15
24
  require 'ops_build/packer'
16
25
  require 'ops_build/vagrant'
17
-
18
- lib = File.expand_path('.', __FILE__)
19
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
20
-
21
- class OpsBuilder < Thor
22
- class_option :verbose, :type => :boolean
23
-
24
- desc 'validate template', 'validate packer template'
25
- def validate_packer(template)
26
- packer = OpsBuild::PackerSupport.new
27
- packer.packer_validate(template)
28
- end
29
-
30
- desc 'build template', 'build packer template'
31
- option :ec2_region, :type => :string, :aliases => 'R', :desc => 'AWS EC2 region'
32
- option :aws_access, :type => :string, :aliases => 'A', :desc => 'AWS Access key'
33
- option :aws_secret, :type => :string, :aliases => 'S', :desc => 'AWS Secret key'
34
- option :berk_dir, :type => :string, :aliases => 'b', :desc => 'Berkshelf cookbook directory path'
35
- def build_packer(template)
36
- packer = OpsBuild::PackerSupport.new
37
- berkshelf = OpsBuild::BerkshelfSupport.new
38
- aws = OpsBuild::AwsSupport.new
39
-
40
- puts ">> Building VM using packer from template #{template}"
41
-
42
- # Add some config variables
43
- packer.packer_add_user_variable(:aws_access_key, options[:aws_access].nil? ? aws.aws_get_access_key : options[:aws_access])
44
- packer.packer_add_user_variable(:aws_secret_key, options[:aws_secret].nil? ? aws.aws_get_secret_key : options[:aws_secret])
45
- packer.packer_add_user_variable(:aws_region, options[:ec2_region].nil? ? aws.aws_get_ec2_region : options[:ec2_region])
46
- packer.packer_add_user_variable(:cookbook_path, berkshelf.berkshelf_dir)
47
-
48
- # Install missing cookbooks
49
- berkshelf.berks_install()
50
-
51
- # Load cookbooks to correct dir.
52
- berkshelf.berks_vendor()
53
-
54
- begin
55
- # Validate packer template
56
- packer.packer_validate(template)
57
- rescue
58
- berkshelf.berks_cleanup()
59
- packer.packer_cleanup()
60
- exit(1)
61
- end
62
- puts ">>>> Vendoring cookbooks with berks to #{berkshelf.berkshelf_dir}"
63
-
64
- begin
65
- # Run packer
66
- packer.packer_build(template)
67
- rescue
68
- berkshelf.berks_cleanup()
69
- packer.packer_cleanup()
70
- exit(1)
26
+ require 'ops_build/validations'
27
+ require 'ops_build/utils'
28
+
29
+ module OpsBuild
30
+ def self.logger
31
+ if @logger.nil?
32
+ @logger = Logger.new(STDOUT)
33
+ @logger.formatter = proc do |severity, datetime, progname, msg|
34
+ "[#{severity}] [#{datetime.strftime('%Y-%m-%d %H:%M:%S')}] #{msg.strip}\n"
35
+ end
71
36
  end
72
37
 
73
- packer.packer_get_ami_id()
74
-
75
- puts ">>>> Cleaning up cookbooks/packer files from system."
76
- berkshelf.berks_cleanup()
77
- packer.packer_cleanup()
78
- end
79
-
80
- desc 'cnv suite', 'Run kitchen converge for given suite'
81
- def converge_kitchen(suite)
82
- kitchen = OpsBuild::KitchenSupport.new
83
- kitchen.kitchen_converge(suite)
84
- end
85
-
86
- desc 'vrf suite', 'Run kitchen verify for given suite'
87
- def verify_kitchen(suite)
88
- kitchen = OpsBuild::KitchenSupport.new
89
- kitchen.kitchen_verify(suite)
90
- end
91
-
92
- desc 'tst suite', 'Run kitchen test for given platform'
93
- def test_kitchen(suite)
94
- kitchen = OpsBuild::KitchenSupport.new
95
- kitchen.kitchen_test(suite)
38
+ @logger
96
39
  end
97
40
  end
data/ops_build.gemspec CHANGED
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = OpsBuild::VERSION
9
9
  spec.authors = ['HAMSIK Adam']
10
10
  spec.email = ['adh@rsd.com']
11
- spec.summary = %q{RSD Devops related build tool to run packer, berkshelf}
12
- spec.description = %q{RSD Devops related build tool to run packer, berkshelf}
13
- spec.homepage = "http://www.rsd.com"
11
+ spec.summary = %q(RSD Devops related build tool to run packer, berkshelf)
12
+ spec.description = %q(RSD Devops related build tool to run packer, berkshelf)
13
+ spec.homepage = 'http://www.rsd.com'
14
14
  spec.license = 'BSD'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -20,11 +20,11 @@ Gem::Specification.new do |spec|
20
20
  spec.require_path = 'lib'
21
21
  #spec.require_paths = ['lib']
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.6"
23
+ spec.add_development_dependency 'bundler', '~> 1.6'
24
24
  #spec.add_development_dependency "rake"
25
25
  #spec.add_development_dependency "thor"
26
26
  #spec.add_development_dependency "pry"
27
27
 
28
- spec.add_runtime_dependency 'thor'
29
- spec.add_runtime_dependency 'net-scp'
28
+ spec.add_runtime_dependency 'thor', '~> 0.19.1'
29
+ #spec.add_runtime_dependency 'net-scp'
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_build
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - HAMSIK Adam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-11 00:00:00.000000000 Z
11
+ date: 2015-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,30 +28,16 @@ dependencies:
28
28
  name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: net-scp
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
33
+ version: 0.19.1
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ">="
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '0'
40
+ version: 0.19.1
55
41
  description: RSD Devops related build tool to run packer, berkshelf
56
42
  email:
57
43
  - adh@rsd.com
@@ -65,14 +51,21 @@ files:
65
51
  - LICENSE
66
52
  - README.md
67
53
  - Rakefile
54
+ - TODO
68
55
  - bin/opsbuild
69
56
  - lib/ops_build.rb
70
57
  - lib/ops_build/aws.rb
71
58
  - lib/ops_build/berkshelf.rb
72
59
  - lib/ops_build/chefspec.rb
60
+ - lib/ops_build/commands/build.rb
61
+ - lib/ops_build/commands/kitchen.rb
62
+ - lib/ops_build/commands/validate.rb
73
63
  - lib/ops_build/kitchen.rb
74
64
  - lib/ops_build/packer.rb
65
+ - lib/ops_build/runner.rb
66
+ - lib/ops_build/utils.rb
75
67
  - lib/ops_build/vagrant.rb
68
+ - lib/ops_build/validations.rb
76
69
  - lib/ops_build/version.rb
77
70
  - ops_build.gemspec
78
71
  homepage: http://www.rsd.com