opskeleton 0.7.3 → 0.8.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: 6cfcb486138d0f5efe9d222886ec2f9132adcbde
4
- data.tar.gz: e0b64670311839c7f528965f00537caccde479ed
3
+ metadata.gz: ab1eee67ae87cd2cb4c1c0f7cee0c78fb62a89de
4
+ data.tar.gz: 5a01ca76ebd36a04f962ab72f07cd281a1a62240
5
5
  SHA512:
6
- metadata.gz: 30a40eeb9f493ea38070fe2a97de41ffaa1657c8755f11c11b6c0db35cabf14a4ffa513c13ae2e17ca72025d0e44517b3a72df2b30c4b05ae96f30ada9f4644c
7
- data.tar.gz: 92d9fab6dd1bc801df31a14c08c3fdbe2a8a96b9f6acd0d3b0b5a454c2986d1ad9a9b67cb32defd8cbbb440bf1e626760211682f33b554eeda686139bde71a48
6
+ metadata.gz: bff1fb18e8e28eb8e47fb117de5226a665d8de7a298e5a685e1901db7fdfffd22328c3249f29fdd4c93c9ed32483a30b5c135b9294eaa6d7522d94fa1dfc0c0e
7
+ data.tar.gz: ddd589e8df1c1dccbf233eb3edbf2029c18e3fbcc4ddfa4ecc9f055d37d228441a952fa01f5d64def5a5eb06a45b66bb7734841acfa222a3a1a427a01f0e0508
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ # Changes to opskeleton in version 0.8.0
2
+
3
+ * Adding plot/benchmark support.
4
+ * Officialy supporting docker using fig.
5
+
1
6
  # Changes to opskeleton in version 0.2.0
2
7
 
3
8
  * Moving to Vagrant 1.1, vagrant to be installed from package and not from gem
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- opskeleton (0.7.3)
4
+ opskeleton (0.8.0)
5
5
  bintray_deploy
6
6
  thor
7
7
 
@@ -6,6 +6,7 @@ module Opsk
6
6
  argument :box, :type => :string, :desc => 'Vagrant box type'
7
7
  class_option :box_url, :type=> :string, :desc => 'vagrant box url'
8
8
  class_option :os_type, :type=> :string, :desc => 'Operating system type (bsd/linux)'
9
+ class_option :bench_enable, :type=> :boolean, :desc => 'Control if to enable benchmarking support'
9
10
 
10
11
  desc 'Generate a Vagrant, Chef librarian and fpm project'
11
12
 
@@ -19,11 +20,11 @@ module Opsk
19
20
  end
20
21
 
21
22
  def create_gemfile
22
- copy_file('templates/chef/gemfile', "#{path}/Gemfile")
23
+ template('templates/chef/Gemfile.erb', "#{path}/Gemfile")
23
24
  end
24
25
 
25
26
  def create_rakefile
26
- copy_file('templates/chef/Rakefile', "#{path}/Rakefile")
27
+ template('templates/chef/Rakefile.erb', "#{path}/Rakefile")
27
28
  end
28
29
 
29
30
  def create_version
@@ -44,7 +45,7 @@ module Opsk
44
45
  def create_chef_base
45
46
  empty_directory("#{path}/static-cookbooks/")
46
47
  copy_file('templates/chef/Cheffile', "#{path}/Cheffile")
47
- empty_directory("#{path}/roles/")
48
+ empty_directory("#{path}/roles/")
48
49
  template('templates/chef/roles.erb', "#{path}/roles/#{name}.rb")
49
50
  template('templates/chef/dna.json.erb', "#{path}/dna.json")
50
51
  copy_file('templates/chef/run.sh', "#{path}/run.sh")
@@ -64,7 +65,9 @@ module Opsk
64
65
  end
65
66
 
66
67
  def server_spec
67
- directory('templates/parent/spec', "#{path}/spec")
68
+ empty_directory("#{path}/spec")
69
+ template('templates/parent/spec/spec_helper.erb', "#{path}/spec/spec_helper.rb")
70
+ directory('templates/parent/spec/default', "#{path}/spec/default")
68
71
  end
69
72
 
70
73
  def git
@@ -6,6 +6,7 @@ module Opsk
6
6
  argument :box, :type => :string, :desc => 'Vagrant box type'
7
7
  class_option :box_url, :type=> :string, :desc => 'vagrant box url'
8
8
  class_option :os_type, :type=> :string, :desc => 'Operating system type (bsd/linux)'
9
+ class_option :bench_enable, :type=> :boolean, :desc => 'Control if to enable benchmarking support'
9
10
 
10
11
  desc 'Generate a Vagrant, Puppet librarian and fpm project'
11
12
 
@@ -24,11 +25,11 @@ module Opsk
24
25
  end
25
26
 
26
27
  def create_gemfile
27
- copy_file('templates/puppet/gemfile', "#{path}/Gemfile")
28
+ template('templates/puppet/Gemfile.erb', "#{path}/Gemfile")
28
29
  end
29
30
 
30
31
  def create_rakefile
31
- copy_file('templates/puppet/Rakefile', "#{path}/Rakefile")
32
+ template('templates/puppet/Rakefile.erb', "#{path}/Rakefile")
32
33
  end
33
34
 
34
35
  def create_version
@@ -73,9 +74,12 @@ module Opsk
73
74
  end
74
75
 
75
76
  def server_spec
76
- directory('templates/parent/spec', "#{path}/spec")
77
+ empty_directory("#{path}/spec")
78
+ template('templates/parent/spec/spec_helper.erb', "#{path}/spec/spec_helper.rb")
79
+ directory('templates/parent/spec/default', "#{path}/spec/default")
77
80
  end
78
81
 
82
+
79
83
  def git
80
84
  if(!File.exists?("#{path}/.git"))
81
85
  copy_file('templates/gitignore', "#{path}/.gitignore")
@@ -1,3 +1,3 @@
1
1
  module Opskeleton
2
- VERSION = '0.7.3'
2
+ VERSION = '0.8.0'
3
3
  end
data/puppet.md CHANGED
@@ -127,9 +127,33 @@ Opskeleton generates a Vagrant file with couple of enhancements:
127
127
  The only assumption that Opskelaton makes is that the target host will have Pupppet installed, this enables us to create docker images from our sandboxes quite easily:
128
128
 
129
129
  ```bash
130
- $ opsk package
131
- # creates the Dockerfile
130
+ # creates dockerfiles/<host> and fig.yml
132
131
  $ opsk dockerize
133
- # builds <sandbox>/<version> image
134
- $ sudo ./build_docker.sh
132
+ $ opsk package
133
+ # grabs the opsk tar file
134
+ $ sudo fig build
135
+ ```
136
+
137
+ ## Benchmarking
138
+ Tracking the speed of our provisioning code is important for keeping a consistent level of service with the produced sandboxes, enabling benchmarking:
139
+
140
+ ```bash
141
+ $ opsk generate_puppet redis ubuntu-14.04 --bench-enable
142
+ # install imagemagic before bundle install
143
+ $ sudo apt-get install imagemagick libmagickwand-dev
144
+ $ rake serverspec:redis
145
+ # with each run more result lines will be recorded
146
+ $ cat benchmark.json
147
+ {"total":656,"host":"redis","revision":"5d03a41ade9fc3dd5296d4119ccb0b0ad8290b9e","time":"2014-12-17 02:57:45 +0200"}
148
+ # add it to git for tracking
149
+ $ git add benchmark.json
135
150
  ```
151
+
152
+ Now after a number of runs we could plot and view the results of a single host or of all the hosts side by side:
153
+
154
+ ```bash
155
+ $ rake plot:hosts plot:per_hosts
156
+ # resulting png files
157
+ $ google-chrome plots
158
+ ```
159
+
@@ -0,0 +1,21 @@
1
+ source "https://rubygems.org"
2
+
3
+ # base
4
+ gem 'chef'
5
+
6
+ group :testing do
7
+ gem 'serverspec', '~> 1.14.0'
8
+ gem 'test-kitchen'
9
+ end
10
+
11
+ group :build do
12
+ gem 'rake'
13
+ gem 'foodcritic'
14
+ gem 'librarian-chef'
15
+ gem 'opskeleton'
16
+ end
17
+
18
+ <% if(@options[:bench_enable]) %>
19
+ gem 'gruff', :group => :benchmark
20
+ <% end %>
21
+
@@ -0,0 +1,76 @@
1
+ require 'rake'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.pattern = 'spec/*/*_spec.rb'
6
+ end
7
+
8
+ task :default => :spec
9
+
10
+ desc "Run serverspec to all hosts"
11
+ task :spec => 'serverspec:all'
12
+
13
+ class ServerspecTask < RSpec::Core::RakeTask
14
+
15
+ attr_accessor :target
16
+
17
+ def spec_command
18
+ cmd = super
19
+ "env TARGET_HOST=#{target} #{cmd}"
20
+ end
21
+
22
+ end
23
+
24
+ namespace :serverspec do
25
+
26
+ %w(<%=@name%>).each do |profile|
27
+ ServerspecTask.new(profile.to_sym) do |t|
28
+ t.target = profile
29
+ t.pattern = "spec/#{profile}/*_spec.rb"
30
+ end
31
+ end
32
+ end
33
+
34
+ <% if(@options[:bench_enable]) %>
35
+ require 'gruff'
36
+ require 'json'
37
+
38
+ PLOTS = 'plots'
39
+
40
+ namespace :plot do
41
+
42
+ directory PLOTS
43
+
44
+ task :hosts => [PLOTS] do
45
+ hosts = IO.readlines('benchmark.json').map {|b|
46
+ JSON.parse(b,{:symbolize_names => true })
47
+ }.group_by {|m|
48
+ m[:host]
49
+ }
50
+
51
+ g = Gruff::Line.new
52
+ g.title = 'All Hosts side by side'
53
+ g.labels = Hash[hosts.keys.each_with_index.map {|i,h| [h , i]}]
54
+ g.labels.each_pair {|i, l|
55
+ g.data(l, hosts[l].map {|h| h[:total] })
56
+ }
57
+ g.write("#{PLOTS}/all_hosts.png")
58
+ end
59
+
60
+ task :per_host => [PLOTS] do
61
+ hosts = IO.readlines('benchmark.json').map {|b|
62
+ JSON.parse(b,{:symbolize_names => true })
63
+ }.group_by {|m|
64
+ m[:host]
65
+ }
66
+
67
+ hosts.each_pair {|h,data|
68
+ g = Gruff::Line.new
69
+ g.title = h
70
+ g.labels = {0 => h}
71
+ g.data(h, data.map {|d| d[:total] })
72
+ g.write("#{PLOTS}/#{h}.png")
73
+ }
74
+ end
75
+ end
76
+ <% end %>
@@ -12,6 +12,21 @@ def run(cmd)
12
12
  end
13
13
  end
14
14
 
15
+ <% if(options[:bench_enable]) -%>
16
+ class StopWatch
17
+ attr_accessor :total
18
+ def stop
19
+ @total = Time.now - @start
20
+ end
21
+
22
+ def reset
23
+ @start = Time.now
24
+ end
25
+ end
26
+
27
+ WATCH = StopWatch.new
28
+ <% end -%>
29
+
15
30
  RSpec.configure do |c|
16
31
  c.before :suite do
17
32
  c.host = ENV['TARGET_HOST']
@@ -19,6 +34,9 @@ RSpec.configure do |c|
19
34
  options = Net::SSH::Config.for(c.host)
20
35
  if(!ENV['LOCAL'])
21
36
  run("vagrant destroy #{c.host} -f")
37
+ <% if(options[:bench_enable]) %>
38
+ WATCH.reset
39
+ <% end %>
22
40
  run("vagrant up #{c.host}")
23
41
  config = `vagrant ssh-config #{c.host}`
24
42
  sshhost = sshuser = ''
@@ -44,6 +62,14 @@ RSpec.configure do |c|
44
62
 
45
63
  c.after :suite do
46
64
  c.host = ENV['TARGET_HOST']
65
+ <% if(options[:bench_enable]) %>
66
+ WATCH.stop
67
+ rev = %x{git rev-parse HEAD}.chomp
68
+ File.open('benchmark.json', 'a') { |f|
69
+ json = {:total => WATCH.total.to_i, :host => c.host, :revision => rev, :time => Time.now}.to_json
70
+ f.write("#{json}\n")
71
+ }
72
+ <% end %>
47
73
  run("vagrant destroy #{c.host} -f")
48
74
  end
49
75
  end
@@ -0,0 +1,22 @@
1
+ source "https://rubygems.org"
2
+
3
+ # base
4
+ gem 'puppet'
5
+
6
+ group :testing do
7
+ gem 'rspec-puppet'
8
+ gem 'puppetlabs_spec_helper', '>= 0.1.0'
9
+ gem 'serverspec', '~> 1.14.0'
10
+ end
11
+
12
+ group :build do
13
+ gem 'puppet-lint', :group => :build
14
+ gem 'rake', :group => :build
15
+ gem 'librarian-puppet', :group => :build
16
+ gem 'opskeleton', :group => :build
17
+ end
18
+
19
+ <% if(@options[:bench_enable]) %>
20
+ gem 'gruff', :group => :benchmark
21
+ <% end %>
22
+
@@ -0,0 +1,101 @@
1
+ require 'rake'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.pattern = 'spec/*/*_spec.rb'
6
+ end
7
+
8
+ task :default => :spec
9
+
10
+ task :modspec do
11
+ FileList["static-modules/**/Rakefile"].each do |project|
12
+ Rake::Task.clear
13
+ load project
14
+ dir = project.pathmap("%d")
15
+ Dir.chdir(dir) do
16
+ spec_task = Rake::Task[:spec]
17
+ spec_task.invoke()
18
+ end
19
+ end
20
+ end
21
+
22
+ require 'puppet-lint/tasks/puppet-lint'
23
+
24
+ # see https://github.com/rodjek/puppet-lint/issues/331
25
+ Rake::Task[:lint].clear
26
+
27
+ PuppetLint::RakeTask.new :lint do |config|
28
+ config.pattern = 'static-modules/**/*.pp'
29
+ config.ignore_paths = ['modules']
30
+ config.disable_checks = ['80chars']
31
+ config.with_context = true
32
+ end
33
+
34
+
35
+ desc "Run serverspec to all hosts"
36
+ task :spec => 'serverspec:all'
37
+
38
+ class ServerspecTask < RSpec::Core::RakeTask
39
+
40
+ attr_accessor :target
41
+
42
+ def spec_command
43
+ cmd = super
44
+ "env TARGET_HOST=#{target} #{cmd}"
45
+ end
46
+
47
+ end
48
+
49
+ namespace :serverspec do
50
+
51
+ %w(<%=@name%>).each do |profile|
52
+ ServerspecTask.new(profile.to_sym) do |t|
53
+ t.target = profile
54
+ t.pattern = "spec/#{profile}/*_spec.rb"
55
+ end
56
+ end
57
+ end
58
+
59
+ <% if(@options[:bench_enable]) %>
60
+ require 'gruff'
61
+ require 'json'
62
+
63
+ PLOTS = 'plots'
64
+
65
+ namespace :plot do
66
+
67
+ directory PLOTS
68
+
69
+ task :hosts => [PLOTS] do
70
+ hosts = IO.readlines('benchmark.json').map {|b|
71
+ JSON.parse(b,{:symbolize_names => true })
72
+ }.group_by {|m|
73
+ m[:host]
74
+ }
75
+
76
+ g = Gruff::Line.new
77
+ g.title = 'All Hosts side by side'
78
+ g.labels = Hash[hosts.keys.each_with_index.map {|i,h| [h , i]}]
79
+ g.labels.each_pair {|i, l|
80
+ g.data(l, hosts[l].map {|h| h[:total] })
81
+ }
82
+ g.write("#{PLOTS}/all_hosts.png")
83
+ end
84
+
85
+ task :per_host => [PLOTS] do
86
+ hosts = IO.readlines('benchmark.json').map {|b|
87
+ JSON.parse(b,{:symbolize_names => true })
88
+ }.group_by {|m|
89
+ m[:host]
90
+ }
91
+
92
+ hosts.each_pair {|h,data|
93
+ g = Gruff::Line.new
94
+ g.title = h
95
+ g.labels = {0 => h}
96
+ g.data(h, data.map {|d| d[:total] })
97
+ g.write("#{PLOTS}/#{h}.png")
98
+ }
99
+ end
100
+ end
101
+ <% end %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opskeleton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - narkisr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-18 00:00:00.000000000 Z
11
+ date: 2014-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -151,11 +151,11 @@ files:
151
151
  - templates/LICENSE-2.0.txt
152
152
  - templates/README.erb
153
153
  - templates/chef/Cheffile
154
- - templates/chef/Rakefile
154
+ - templates/chef/Gemfile.erb
155
+ - templates/chef/Rakefile.erb
155
156
  - templates/chef/boot.sh
156
157
  - templates/chef/dna.json.erb
157
158
  - templates/chef/environments/dev.rb
158
- - templates/chef/gemfile
159
159
  - templates/chef/gitignore
160
160
  - templates/chef/opsk.yaml
161
161
  - templates/chef/roles.erb
@@ -171,13 +171,13 @@ files:
171
171
  - templates/module/Rakefile.erb
172
172
  - templates/module/spec_helper.rb
173
173
  - templates/parent/spec/default/stub_spec.rb
174
- - templates/parent/spec/spec_helper.rb
174
+ - templates/parent/spec/spec_helper.erb
175
175
  - templates/parent/travis.erb
176
- - templates/puppet/Rakefile
176
+ - templates/puppet/Gemfile.erb
177
+ - templates/puppet/Rakefile.erb
177
178
  - templates/puppet/boot.sh
178
179
  - templates/puppet/default.erb
179
180
  - templates/puppet/docker/ubuntu_docker.erb
180
- - templates/puppet/gemfile
181
181
  - templates/puppet/opsk.yaml
182
182
  - templates/puppet/run.sh
183
183
  - templates/puppet/scripts/lookup.rb
@@ -1,34 +0,0 @@
1
- require 'rake'
2
- require 'rspec/core/rake_task'
3
-
4
- RSpec::Core::RakeTask.new(:spec) do |t|
5
- t.pattern = 'spec/*/*_spec.rb'
6
- end
7
-
8
- task :default => :spec
9
-
10
- desc "Run serverspec to all hosts"
11
- task :spec => 'serverspec:all'
12
-
13
- class ServerspecTask < RSpec::Core::RakeTask
14
-
15
- attr_accessor :target
16
-
17
- def spec_command
18
- cmd = super
19
- "env TARGET_HOST=#{target} #{cmd}"
20
- end
21
-
22
- end
23
-
24
- namespace :serverspec do
25
-
26
- %w(<%=@name%>).each do |profile|
27
- ServerspecTask.new(profile.to_sym) do |t|
28
- t.target = profile
29
- t.pattern = "spec/#{profile}/*_spec.rb"
30
- end
31
- end
32
- end
33
-
34
- task :default => 'serverspec:minimal'
@@ -1,14 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # base
4
- gem 'chef'
5
-
6
- # testing
7
- gem 'serverspec', '~> 1.14.0'
8
- gem 'test-kitchen'
9
-
10
- # build
11
- gem 'rake'
12
- gem 'foodcritic'
13
- gem 'librarian-chef'
14
- gem 'opskeleton'
@@ -1,50 +0,0 @@
1
- require 'rake'
2
- require 'rspec/core/rake_task'
3
-
4
- RSpec::Core::RakeTask.new(:spec) do |t|
5
- t.pattern = 'spec/*/*_spec.rb'
6
- end
7
-
8
- task :default => :spec
9
-
10
- task :modspec do
11
- FileList["static-modules/**/Rakefile"].each do |project|
12
- Rake::Task.clear
13
- load project
14
- dir = project.pathmap("%d")
15
- Dir.chdir(dir) do
16
- spec_task = Rake::Task[:spec]
17
- spec_task.invoke()
18
- end
19
- end
20
- end
21
-
22
- require 'puppet-lint/tasks/puppet-lint'
23
- PuppetLint.configuration.ignore_paths =['modules/**/*', 'vendor/**/*']
24
- PuppetLint.configuration.send("disable_80chars")
25
-
26
- desc "Run serverspec to all hosts"
27
- task :spec => 'serverspec:all'
28
-
29
- class ServerspecTask < RSpec::Core::RakeTask
30
-
31
- attr_accessor :target
32
-
33
- def spec_command
34
- cmd = super
35
- "env TARGET_HOST=#{target} #{cmd}"
36
- end
37
-
38
- end
39
-
40
- namespace :serverspec do
41
-
42
- %w(<%=@name%>).each do |profile|
43
- ServerspecTask.new(profile.to_sym) do |t|
44
- t.target = profile
45
- t.pattern = "spec/#{profile}/*_spec.rb"
46
- end
47
- end
48
- end
49
-
50
- task :default => 'serverspec:minimal'
@@ -1,15 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # base
4
- gem 'puppet'
5
-
6
- # testing
7
- gem 'rspec-puppet'
8
- gem 'puppetlabs_spec_helper', '>= 0.1.0'
9
- gem 'serverspec', '~> 1.14.0'
10
-
11
- # build
12
- gem 'puppet-lint'
13
- gem 'rake'
14
- gem 'librarian-puppet'
15
- gem 'opskeleton'