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 +7 -0
- data/.gitignore +55 -0
- data/Gemfile +5 -0
- data/LICENSE +10 -0
- data/README.md +8 -0
- data/Rakefile +2 -0
- data/bin/opsbuild +7 -0
- data/lib/ops_build/aws.rb +18 -0
- data/lib/ops_build/berkshelf.rb +46 -0
- data/lib/ops_build/chefspec.rb +8 -0
- data/lib/ops_build/kitchen.rb +18 -0
- data/lib/ops_build/packer.rb +66 -0
- data/lib/ops_build/vagrant.rb +8 -0
- data/lib/ops_build/version.rb +3 -0
- data/lib/ops_build.rb +77 -0
- data/ops_build.gemspec +30 -0
- metadata +116 -0
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
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
data/bin/opsbuild
ADDED
@@ -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,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
|
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: []
|