ops_build 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 029c22f8a5e081ce0116366f250c629850c2594a
4
+ data.tar.gz: 11e03b09c7a12e6b3a9415828e1b601adca8b26a
5
+ SHA512:
6
+ metadata.gz: 938c7bf7943ed432b4d85f8e9486b9e4d895821655977e82c5d4f458c522bb11c8a363458a0ccc9c5e9fee5b78d300bafbc0ececddc6921b0375d1021230d18e
7
+ data.tar.gz: bc7aadbdd7457e14a7a9f9dd3464d29e123a37d74da955047646a782015141eece0e6b421d62fbe085e285badbe2bace1e569271586e144d9527252d26207a84
data/.gitignore ADDED
@@ -0,0 +1,55 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+
24
+ /.config
25
+ /coverage/
26
+ /InstalledFiles
27
+ /pkg/
28
+ /spec/reports/
29
+ /test/tmp/
30
+ /test/version_tmp/
31
+ /tmp/
32
+
33
+ ## Specific to RubyMotion:
34
+ .dat*
35
+ .repl_history
36
+ build/
37
+
38
+ ## Documentation cache and generated files:
39
+ /.yardoc/
40
+ /_yardoc/
41
+ /doc/
42
+ /rdoc/
43
+
44
+ ## Environment normalisation:
45
+ /.bundle/
46
+ /lib/bundler/man/
47
+
48
+ # for a library or gem, you might want to ignore these files since the code is
49
+ # intended to run in multiple environments; otherwise, check them in:
50
+ # Gemfile.lock
51
+ # .ruby-version
52
+ # .ruby-gemset
53
+
54
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
55
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+
2
+ source "https://rubygems.org"
3
+
4
+ gem 'rake'
5
+ gem 'erubis'
data/LICENSE ADDED
@@ -0,0 +1,10 @@
1
+ Copyright (c) 2014, RSD IG
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7
+
8
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
9
+
10
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,8 @@
1
+ # Simple Thor application to make devops tasks easier
2
+
3
+ ops_build is simple tool which can be used to as one place to go to use various devops tools. It can be used for:
4
+
5
+ * building vagrant machines automatically
6
+ * buid amazon aws ami with packer
7
+ * run kitchen server spec tests
8
+ * run chefspec tests on cookbooks
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/opsbuild ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ops_build'
4
+
5
+ OpsBuilder.start(ARGV)
6
+
7
+
@@ -0,0 +1,18 @@
1
+ #
2
+ # AWS management class
3
+ #
4
+ module OpsBuild
5
+ class AwsSupport
6
+ def aws_get_account_id
7
+ ENV['AWS_ACCOUNT_ID']
8
+ end
9
+
10
+ def aws_get_access_key
11
+ ENV['AWS_ACCESS_KEY']
12
+ end
13
+
14
+ def aws_get_secret_key
15
+ ENV['AWS_SECRET_KEY']
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,46 @@
1
+ #
2
+ # Berkshelf management class
3
+ #
4
+ module OpsBuild
5
+ class BerkshelfSupport
6
+ attr_accessor :berkshelf_dir, :berkshelf_opts
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
13
+
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
20
+
21
+ if silent
22
+ @berkshelf_opts = '-q'
23
+ else
24
+ @berkshelf_opts = ''
25
+ end
26
+ end
27
+
28
+ #
29
+ # Run berks vendor
30
+ def berks_vendor()
31
+ system("berks vendor #{@berkshelf_opts} #{@berkshelf_dir}")
32
+ end
33
+
34
+ #
35
+ # Run berks install
36
+ def berks_install
37
+ system("berks install #{@berkshelf_opts}")
38
+ end
39
+
40
+ #
41
+ # Cleanup Berks directory
42
+ def berks_cleanup()
43
+ FileUtils.rm_rf(@berkshelf_dir)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,8 @@
1
+ #
2
+ # Chefspec management class
3
+ #
4
+ module OpsBuild
5
+ class ChefspecSupport
6
+
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ #
2
+ # Kitchen test management class
3
+ #
4
+ module OpsBuild
5
+ class KitchenSupport
6
+ def kitchen_converge(suite)
7
+ system("kitchen converge #{suite}")
8
+ end
9
+
10
+ def kitchen_verify(suite)
11
+ system("kitchen verify #{suite}")
12
+ end
13
+
14
+ def kitchen_test(suite)
15
+ system("kitchen test #{suite}")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,66 @@
1
+ #
2
+ # Packer management class
3
+ #
4
+ module OpsBuild
5
+ require 'json'
6
+ require 'tempfile'
7
+
8
+ class PackerSupport
9
+ attr_accessor :user_vars, :user_var_file
10
+
11
+ def initialize()
12
+ @user_vars = {}
13
+
14
+ unless system("packer version 1>/dev/null")
15
+ puts(">>> Packer not installed !")
16
+ exit(1)
17
+ end
18
+ end
19
+
20
+ def packer_add_user_variable(name, value)
21
+ unless name.nil? and value.nil?
22
+ @user_vars[name] = value
23
+ end
24
+ end
25
+
26
+ #
27
+ # Run packer build
28
+ def packer_build(packer_config)
29
+ packer_options = ""
30
+
31
+ packer_create_var_file()
32
+
33
+ unless @user_var_file.nil?
34
+ puts(">>>> Customising packer build with variable file from: #{@user_var_file.path} ")
35
+ packer_options = "-var-file #{@user_var_file.path}"
36
+ end
37
+
38
+ system("packer build #{packer_options} #{packer_config}")
39
+ end
40
+
41
+ #
42
+ # Validate packer template
43
+ def packer_validate(packer_config)
44
+ unless system("packer validate #{packer_config}")
45
+ puts(">>> Packer template validation failed !")
46
+ exit(1)
47
+ end
48
+ end
49
+
50
+ #
51
+ # Clean user_var-file from system
52
+ def packer_cleanup()
53
+ unless @user_var_file.nil?
54
+ @user_var_file.unlink
55
+ @user_var_file.close
56
+ end
57
+ end
58
+
59
+ private
60
+ def packer_create_var_file()
61
+ @user_var_file = Tempfile.new('packer-var-file')
62
+ @user_var_file.write(@user_vars.to_json)
63
+ @user_var_file.rewind
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,8 @@
1
+ #
2
+ # Vagrant management class
3
+ #
4
+ module OpsBuild
5
+ class VagrantSupport
6
+
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module OpsBuild
2
+ VERSION="1.0.0"
3
+ end
data/lib/ops_build.rb ADDED
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+
3
+ require 'fileutils'
4
+ require 'json'
5
+ require 'rbconfig'
6
+ require 'tempfile'
7
+ require 'thor'
8
+ require 'yaml'
9
+
10
+ require "ops_build/version"
11
+ require 'ops_build/aws'
12
+ require 'ops_build/berkshelf'
13
+ require 'ops_build/chefspec'
14
+ require 'ops_build/kitchen'
15
+ require 'ops_build/packer'
16
+ 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
+ desc 'validate template', 'validate packer template'
23
+ def validate_packer(template)
24
+ packer = OpsBuild::PackerSupport.new
25
+ packer.packer_validate(template)
26
+ end
27
+
28
+ desc 'build template', 'build packer template'
29
+ def build_packer(template)
30
+ packer = OpsBuild::PackerSupport.new
31
+ berkshelf = OpsBuild::BerkshelfSupport.new
32
+ aws = OpsBuild::AwsSupport.new
33
+
34
+ puts ">> Building VM using packer from template #{template}"
35
+
36
+ # Add some config variables
37
+ packer.packer_add_user_variable(:aws_account_id, aws.aws_get_account_id)
38
+ packer.packer_add_user_variable(:aws_access_key, aws.aws_get_access_key)
39
+ packer.packer_add_user_variable(:aws_secret_key, aws.aws_get_secret_key)
40
+ packer.packer_add_user_variable(:cookbook_path, berkshelf.berkshelf_dir)
41
+
42
+ # Validate packer template
43
+ packer.packer_validate(template)
44
+
45
+ # Install missing cookbooks
46
+ berkshelf.berks_install()
47
+
48
+ # Load cookbooks to correct dir.
49
+ berkshelf.berks_vendor()
50
+ puts ">>>> Vendoring cookbooks with berks to #{berkshelf.berkshelf_dir}"
51
+
52
+ # Run packer
53
+ packer.packer_build(template)
54
+
55
+ puts ">>>> Cleaning up cookbooks/packer files from system."
56
+ berkshelf.berks_cleanup()
57
+ packer.packer_cleanup()
58
+ end
59
+
60
+ desc 'cnv suite', 'Run kitchen converge for given suite'
61
+ def converge_kitchen(suite)
62
+ kitchen = OpsBuild::KitchenSupport.new
63
+ kitchen.kitchen_converge(suite)
64
+ end
65
+
66
+ desc 'vrf suite', 'Run kitchen verify for given suite'
67
+ def verify_kitchen(suite)
68
+ kitchen = OpsBuild::KitchenSupport.new
69
+ kitchen.kitchen_verify(suite)
70
+ end
71
+
72
+ desc 'tst suite', 'Run kitchen test for given platform'
73
+ def test_kitchen(suite)
74
+ kitchen = OpsBuild::KitchenSupport.new
75
+ kitchen.kitchen_test(suite)
76
+ end
77
+ end
data/ops_build.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ops_build/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'ops_build'
8
+ spec.version = OpsBuild::VERSION
9
+ spec.authors = ['HAMSIK Adam']
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"
14
+ spec.license = 'BSD'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ #spec.files = Dir['{bin/*,lib/**/*}'] + %w(ops_build.gemspec Rakefile README.md LICENSE.txt Gemfile)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_path = 'lib'
21
+ #spec.require_paths = ['lib']
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.6"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "thor"
26
+ spec.add_development_dependency "pry"
27
+
28
+ #spec.add_dependency 'erubis'
29
+ #spec.add_dependency 'json'
30
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ops_build
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - HAMSIK Adam
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
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: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: RSD Devops related build tool to run packer, berkshelf
70
+ email:
71
+ - adh@rsd.com
72
+ executables:
73
+ - opsbuild
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - Gemfile
79
+ - LICENSE
80
+ - README.md
81
+ - Rakefile
82
+ - bin/opsbuild
83
+ - lib/ops_build.rb
84
+ - lib/ops_build/aws.rb
85
+ - lib/ops_build/berkshelf.rb
86
+ - lib/ops_build/chefspec.rb
87
+ - lib/ops_build/kitchen.rb
88
+ - lib/ops_build/packer.rb
89
+ - lib/ops_build/vagrant.rb
90
+ - lib/ops_build/version.rb
91
+ - ops_build.gemspec
92
+ homepage: http://www.rsd.com
93
+ licenses:
94
+ - BSD
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.2.2
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: RSD Devops related build tool to run packer, berkshelf
116
+ test_files: []