builderator 0.3.15 → 1.0.0.pre.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +9 -0
- data/Gemfile.lock +440 -0
- data/README.md +72 -18
- data/Rakefile +1 -2
- data/VERSION +1 -1
- data/bin/build-clean +102 -0
- data/bin/build-data +45 -0
- data/builderator.gemspec +7 -4
- data/docs/configuration.md +154 -0
- data/docs/configuration/cookbook.md +19 -0
- data/docs/configuration/profile.md +71 -0
- data/docs/versioning.md +65 -0
- data/lib/builderator.rb +3 -0
- data/lib/builderator/config.rb +93 -0
- data/lib/builderator/config/attributes.rb +287 -0
- data/lib/builderator/config/defaults.rb +163 -0
- data/lib/builderator/config/file.rb +336 -0
- data/lib/builderator/config/rash.rb +80 -0
- data/lib/builderator/control/cleaner.rb +138 -0
- data/lib/builderator/control/cookbook.rb +16 -0
- data/lib/builderator/control/data.rb +16 -0
- data/lib/builderator/control/data/image.rb +98 -0
- data/lib/builderator/control/version.rb +128 -0
- data/lib/builderator/control/version/auto.rb +48 -0
- data/lib/builderator/control/version/bump.rb +82 -0
- data/lib/builderator/control/version/comparable.rb +77 -0
- data/lib/builderator/control/version/git.rb +45 -0
- data/lib/builderator/control/version/scm.rb +92 -0
- data/lib/builderator/interface.rb +67 -0
- data/lib/builderator/interface/berkshelf.rb +38 -0
- data/lib/builderator/interface/packer.rb +75 -0
- data/lib/builderator/interface/vagrant.rb +31 -0
- data/lib/builderator/metadata.rb +5 -3
- data/lib/builderator/model/cleaner.rb +49 -0
- data/lib/builderator/model/cleaner/images.rb +93 -0
- data/lib/builderator/model/cleaner/instances.rb +58 -0
- data/lib/builderator/model/cleaner/launch_configs.rb +47 -0
- data/lib/builderator/model/cleaner/scaling_groups.rb +45 -0
- data/lib/builderator/model/cleaner/snapshots.rb +50 -0
- data/lib/builderator/model/cleaner/volumes.rb +48 -0
- data/lib/builderator/patch/berkshelf.rb +18 -0
- data/lib/builderator/patch/thor-actions.rb +47 -0
- data/lib/builderator/tasks.rb +127 -17
- data/lib/builderator/tasks/berkshelf.rb +63 -0
- data/lib/builderator/tasks/packer.rb +17 -56
- data/lib/builderator/tasks/vagrant.rb +111 -42
- data/lib/builderator/tasks/vendor.rb +94 -0
- data/lib/builderator/tasks/version.rb +58 -0
- data/lib/builderator/util.rb +37 -11
- data/lib/builderator/util/aws_exception.rb +1 -1
- data/lib/builderator/util/limit_exception.rb +12 -11
- data/lib/builderator/util/task_exception.rb +0 -2
- data/mkmf.log +4 -0
- data/spec/config_spec.rb +30 -0
- data/spec/data/Berksfile +6 -0
- data/spec/data/Buildfile +0 -0
- data/spec/data/Vagrantfile +0 -0
- data/spec/data/history.json +483 -0
- data/spec/data/packer.json +0 -0
- data/spec/interface_spec.rb +36 -0
- data/spec/resource/Buildfile +27 -0
- data/spec/spec_helper.rb +90 -0
- data/spec/version_spec.rb +282 -0
- data/template/Berksfile.erb +10 -0
- data/template/Buildfile.erb +28 -0
- data/template/Gemfile.erb +16 -0
- data/template/README.md.erb +61 -0
- data/template/Vagrantfile.erb +75 -0
- data/template/gitignore.erb +104 -0
- data/{.rubocop.yml → template/rubocop.erb} +0 -0
- metadata +203 -56
- data/.gitignore +0 -14
- data/lib/builderator/control/ami.rb +0 -65
- data/lib/builderator/control/clean.rb +0 -130
- data/lib/builderator/model.rb +0 -46
- data/lib/builderator/model/images.rb +0 -89
- data/lib/builderator/model/instances.rb +0 -55
- data/lib/builderator/model/launch_configs.rb +0 -46
- data/lib/builderator/model/scaling_groups.rb +0 -43
- data/lib/builderator/model/snapshots.rb +0 -49
- data/lib/builderator/model/volumes.rb +0 -48
- data/lib/builderator/tasks/ami.rb +0 -47
- data/lib/builderator/tasks/berks.rb +0 -68
- data/lib/builderator/tasks/clean.rb +0 -97
- data/lib/builderator/util/berkshim.rb +0 -34
- data/lib/builderator/util/cookbook.rb +0 -87
- data/lib/builderator/util/packer.rb +0 -39
- data/lib/builderator/util/shell.rb +0 -44
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'aws-sdk'
|
2
|
-
require_relative '../util'
|
3
|
-
|
4
|
-
module Builderator
|
5
|
-
module Model
|
6
|
-
|
7
|
-
def self.scaling_groups
|
8
|
-
@scaling_groups ||= ScalingGroups.new
|
9
|
-
end
|
10
|
-
|
11
|
-
##
|
12
|
-
# AutoScaling Group Resoruces
|
13
|
-
##
|
14
|
-
class ScalingGroups < Model::Base
|
15
|
-
attr_reader :resources
|
16
|
-
PROPERTIES = %w(auto_scaling_group_arn min_size max_size desired_capacity
|
17
|
-
default_cooldown availability_zones load_balancer_names
|
18
|
-
vpc_zone_identifier status termination_policies)
|
19
|
-
|
20
|
-
def fetch
|
21
|
-
@resources = {}.tap do |i|
|
22
|
-
Util.asg.describe_auto_scaling_groups.each do |page|
|
23
|
-
page.auto_scaling_groups.each do |a|
|
24
|
-
properties = Util.from_tags(a.tags)
|
25
|
-
properties['creation_date'] = a.created_time.to_datetime
|
26
|
-
PROPERTIES.each { |pp| properties[pp] = a[pp.to_sym] }
|
27
|
-
|
28
|
-
i[a.launch_configuration_name] = {
|
29
|
-
:id => a.auto_scaling_group_name,
|
30
|
-
:properties => properties,
|
31
|
-
:config => a.launch_configuration_name
|
32
|
-
}
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def launch_configs
|
39
|
-
resources.values.map { |g| g[:config] }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'aws-sdk'
|
2
|
-
require_relative '../util'
|
3
|
-
|
4
|
-
module Builderator
|
5
|
-
module Model
|
6
|
-
|
7
|
-
def self.snapshots
|
8
|
-
@snapshots ||= Snapshots.new
|
9
|
-
end
|
10
|
-
|
11
|
-
##
|
12
|
-
# EC2 Snapshot Resources
|
13
|
-
##
|
14
|
-
class Snapshots < Model::Base
|
15
|
-
LIMIT = 24
|
16
|
-
PROPERTIES = %w(state owner_id description volume_size)
|
17
|
-
|
18
|
-
def fetch
|
19
|
-
@resources = {}.tap do |s|
|
20
|
-
Util.ec2.describe_snapshots(:filters => [
|
21
|
-
{
|
22
|
-
:name => 'status',
|
23
|
-
:values => %w(completed)
|
24
|
-
}
|
25
|
-
], :owner_ids => ['self']).each do |page|
|
26
|
-
page.snapshots.each do |snap|
|
27
|
-
properties = Util.from_tags(snap.tags)
|
28
|
-
properties['creation_date'] = snap.start_time.to_datetime
|
29
|
-
PROPERTIES.each { |pp| properties[pp] = snap[pp.to_sym] }
|
30
|
-
|
31
|
-
s[snap.snapshot_id] = {
|
32
|
-
:id => snap.snapshot_id,
|
33
|
-
:properties => properties,
|
34
|
-
:volume => snap.volume_id
|
35
|
-
}
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def in_use(_)
|
42
|
-
{}.tap do |used|
|
43
|
-
used.merge!(select(Model.volumes.snapshots))
|
44
|
-
used.merge!(select(Model.images.snapshots))
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'aws-sdk'
|
2
|
-
require_relative '../util'
|
3
|
-
|
4
|
-
module Builderator
|
5
|
-
module Model
|
6
|
-
|
7
|
-
def self.volumes
|
8
|
-
@volumes ||= Volumes.new
|
9
|
-
end
|
10
|
-
|
11
|
-
##
|
12
|
-
# EC2 Volume Resources
|
13
|
-
##
|
14
|
-
class Volumes < Model::Base
|
15
|
-
LIMIT = 8
|
16
|
-
PROPERTIES = %w(size availability_zone state volume_type iops)
|
17
|
-
|
18
|
-
def fetch
|
19
|
-
@resources = {}.tap do |v|
|
20
|
-
Util.ec2.describe_volumes.each do |page|
|
21
|
-
page.volumes.each do |vol|
|
22
|
-
properties = Util.from_tags(vol.tags)
|
23
|
-
properties['creation_date'] = vol.create_time.to_datetime
|
24
|
-
PROPERTIES.each { |pp| properties[pp] = vol[pp.to_sym] }
|
25
|
-
|
26
|
-
|
27
|
-
v[vol.volume_id] = {
|
28
|
-
:id => vol.volume_id,
|
29
|
-
:properties => properties,
|
30
|
-
:snapshot => vol.snapshot_id
|
31
|
-
}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def snapshots
|
38
|
-
resources.values.map { |v| v[:snapshot] }
|
39
|
-
end
|
40
|
-
|
41
|
-
def in_use(_)
|
42
|
-
{}.tap do |used|
|
43
|
-
used.merge!(select(Model.instances.volumes))
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require_relative '../control/ami'
|
3
|
-
|
4
|
-
module Builderator
|
5
|
-
module Tasks
|
6
|
-
class AMI < Thor
|
7
|
-
namespace :ami
|
8
|
-
|
9
|
-
class_option :root_device_type,
|
10
|
-
:default => 'ebs',
|
11
|
-
:desc => 'The type of the root device volume (ebs | instance-store)'
|
12
|
-
class_option :virtualization_type,
|
13
|
-
:default => 'hvm',
|
14
|
-
:desc => 'The virtualization type (paravirtual | hvm)'
|
15
|
-
class_option :architecture,
|
16
|
-
:default => 'x86_64',
|
17
|
-
:desc => 'The image architecture (i386 | x86_64)'
|
18
|
-
|
19
|
-
desc 'ubuntu SEARCH', 'Print the latest AMI ID for an Ubuntu image matching the SEARCH string'
|
20
|
-
def ubuntu(search = '*/hvm-ssd/ubuntu-trusty-daily-amd64-server-20*')
|
21
|
-
puts Control::AMI.latest(:owner => Builderator::Control::AMI::Owners::UBUNTU,
|
22
|
-
'root-device-type' => options['root_device_type'],
|
23
|
-
'virtualization-type' => options['virtualization_type'],
|
24
|
-
'architecture' => options['architecture'],
|
25
|
-
'name' => search).image_id
|
26
|
-
end
|
27
|
-
|
28
|
-
desc 'private [KEY VALUE ...]', 'Find the latest AMI ID with tags KEY=VALUE'
|
29
|
-
def private(*args)
|
30
|
-
puts Control::AMI.latest({ :owner => Builderator::Control::AMI::Owners::SELF,
|
31
|
-
'root-device-type' => options['root_device_type'],
|
32
|
-
'virtualization-type' => options['virtualization_type'],
|
33
|
-
'architecture' => options['architecture'] }.merge(Hash[*args])).image_id
|
34
|
-
end
|
35
|
-
|
36
|
-
desc 'windows SEARCH', 'Print the latest AMI ID for a Windows image matching the SEARCH string'
|
37
|
-
def windows(search = 'Windows_Server-2012-R2_RTM-English-64Bit-Base*')
|
38
|
-
puts Control::AMI.latest(:owner => Builderator::Control::AMI::Owners::AMAZON,
|
39
|
-
'root-device-type' => options['root_device_type'],
|
40
|
-
'virtualization-type' => options['virtualization_type'],
|
41
|
-
'architecture' => options['architecture'],
|
42
|
-
'name' => search).image_id
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'thor/actions'
|
3
|
-
require_relative './cookbook'
|
4
|
-
require_relative '../util/cookbook'
|
5
|
-
|
6
|
-
module Builderator
|
7
|
-
module Tasks
|
8
|
-
class Berks < Thor
|
9
|
-
include Thor::Actions
|
10
|
-
class_option :config, :aliases => :c, :desc => "Path to Berkshelf's config.json"
|
11
|
-
class_option :cookbook, :aliases => :b, :desc => 'Path to the cookbook to use'
|
12
|
-
class_option :version, :type => :boolean,
|
13
|
-
:default => true,
|
14
|
-
:desc => 'Write current verison to file'
|
15
|
-
|
16
|
-
desc "local [PATH = #{ Util::Cookbook::DEFAULT_VENDOR }]", 'Vendor the local cookbook source and its dependencies'
|
17
|
-
def local(path = Util::Cookbook::DEFAULT_VENDOR.to_s)
|
18
|
-
Util::Cookbook.path(options['cookbook'])
|
19
|
-
|
20
|
-
command = 'BERKS_INSTALL_FROM=source'
|
21
|
-
command << " berks vendor #{ path }"
|
22
|
-
command << " -c #{ options['config'] }" if options.include?('config')
|
23
|
-
command << " -b #{ Util::Cookbook.berksfile }"
|
24
|
-
|
25
|
-
remove_file File.expand_path('Berksfile.lock', Util::Cookbook.path)
|
26
|
-
invoke Tasks::Cookbook, 'metadata', [], options
|
27
|
-
run command
|
28
|
-
end
|
29
|
-
|
30
|
-
desc "vendor [PATH = #{ Util::Cookbook::DEFAULT_VENDOR }]", 'Vendor a cookbook release and its dependencies'
|
31
|
-
def vendor(path = Util::Cookbook::DEFAULT_VENDOR.to_s)
|
32
|
-
Util::Cookbook.path(options['cookbook'])
|
33
|
-
|
34
|
-
command = 'BERKS_INSTALL_FROM=release'
|
35
|
-
command << " berks vendor #{ path }"
|
36
|
-
command << " -c #{ options['config'] }" if options.include?('config')
|
37
|
-
command << " -b #{ Util::Cookbook.berksfile }"
|
38
|
-
|
39
|
-
remove_file File.expand_path('Berksfile.lock', Util::Cookbook.path)
|
40
|
-
run command
|
41
|
-
end
|
42
|
-
|
43
|
-
desc 'upload', 'Upload the local cookbook source and its dependencies to the Chef server'
|
44
|
-
option 'dry-run', :type => :boolean, :default => false
|
45
|
-
def upload(path = Util::Cookbook::DEFAULT_VENDOR.to_s)
|
46
|
-
command = 'BERKS_INSTALL_FROM=source'
|
47
|
-
command << " berks upload"
|
48
|
-
command << " -c #{ options['config'] }" if options.include?('config')
|
49
|
-
command << " -b #{ Util::Cookbook.berksfile }"
|
50
|
-
|
51
|
-
invoke Tasks::Berks, :local, [path], options
|
52
|
-
|
53
|
-
return say_status :dryrun, command if options['dry-run']
|
54
|
-
run command
|
55
|
-
end
|
56
|
-
|
57
|
-
desc 'uncache', 'Delete the Berkshelf cache'
|
58
|
-
def uncache
|
59
|
-
remove_dir File.join(ENV['HOME'], '.berkshelf/cookbooks')
|
60
|
-
end
|
61
|
-
|
62
|
-
desc "clean [PATH = #{ Util::Cookbook::DEFAULT_VENDOR }]", 'Remove a local vendor directory'
|
63
|
-
def clean(path = Util::Cookbook::DEFAULT_VENDOR.to_s)
|
64
|
-
remove_dir path
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require_relative '../control/clean'
|
3
|
-
|
4
|
-
module Builderator
|
5
|
-
module Tasks
|
6
|
-
class Clean < Thor
|
7
|
-
class_option :region,
|
8
|
-
:type => :string,
|
9
|
-
:default => 'us-east-1',
|
10
|
-
:aliases => :r,
|
11
|
-
:desc => 'AWS Region in which to perform tasks'
|
12
|
-
class_option :commit,
|
13
|
-
:type => :boolean,
|
14
|
-
:default => false,
|
15
|
-
:desc => 'Perform mutating API calls to cleanup resources'
|
16
|
-
class_option :filter,
|
17
|
-
:type => :array,
|
18
|
-
:aliases => :f,
|
19
|
-
:desc => 'Key/value pairs to filter resources (--filter name foo owner_id 123456789)'
|
20
|
-
class_option :limit,
|
21
|
-
:type => :boolean,
|
22
|
-
:default => true,
|
23
|
-
:desc => 'By default, limit the number of resources to remove'
|
24
|
-
|
25
|
-
def initialize(*_)
|
26
|
-
super
|
27
|
-
|
28
|
-
## Convert array of filter key-values to a hash
|
29
|
-
options['filters'] = Hash[*options['filter']] if options['filter'].is_a?(Array)
|
30
|
-
|
31
|
-
Control::Clean.options(options)
|
32
|
-
end
|
33
|
-
|
34
|
-
desc 'configs', 'Delete unused launch configurations'
|
35
|
-
def configs
|
36
|
-
Control::Clean.configs!(&method(:say_status))
|
37
|
-
end
|
38
|
-
|
39
|
-
desc 'images', 'Deregister unused images'
|
40
|
-
option 'group-by',
|
41
|
-
:type => :array,
|
42
|
-
:desc => 'Tags/properties to group images by for pruning'
|
43
|
-
option 'sort-by',
|
44
|
-
:type => :string,
|
45
|
-
:default => 'creation_date',
|
46
|
-
:desc => 'Tag/property to sort grouped images on'
|
47
|
-
option :keep,
|
48
|
-
:type => :numeric,
|
49
|
-
:default => 5,
|
50
|
-
:desc => 'Number of images in each group to keep'
|
51
|
-
def images
|
52
|
-
Control::Clean.images!(&method(:say_status))
|
53
|
-
end
|
54
|
-
|
55
|
-
desc 'snapshots', 'Delete unused snapshots'
|
56
|
-
def snapshots
|
57
|
-
Control::Clean.snapshots!(&method(:say_status))
|
58
|
-
end
|
59
|
-
|
60
|
-
desc 'volumes', 'Delete unused volumes'
|
61
|
-
def volumes
|
62
|
-
Control::Clean.volumes!(&method(:say_status))
|
63
|
-
end
|
64
|
-
|
65
|
-
desc 'all', 'Clean volumes, launch configs, images, and snapshots in order'
|
66
|
-
option 'group-by',
|
67
|
-
:type => :array,
|
68
|
-
:desc => 'Tags/properties to group images by for pruning'
|
69
|
-
option 'sort-by',
|
70
|
-
:type => :string,
|
71
|
-
:default => 'creation_date',
|
72
|
-
:desc => 'Tag/property to sort grouped images on'
|
73
|
-
option :keep,
|
74
|
-
:type => :numeric,
|
75
|
-
:default => 5,
|
76
|
-
:desc => 'Number of images in each group to keep'
|
77
|
-
def all
|
78
|
-
invoke :volumes, [], options
|
79
|
-
invoke :configs, [], options
|
80
|
-
invoke :images, [], options
|
81
|
-
invoke :snapshots, [], options
|
82
|
-
|
83
|
-
## TODO Print resource counts here.
|
84
|
-
return if Control::Clean.exceptions.empty?
|
85
|
-
|
86
|
-
say_status :fail, 'Not all tasks completed successfully. The following '\
|
87
|
-
'exceptions occured:', :red
|
88
|
-
Control::Clean.exceptions.each do |e|
|
89
|
-
say_status(*e.status)
|
90
|
-
end
|
91
|
-
|
92
|
-
## Mark the Jenkins job as fail if there were errors.
|
93
|
-
exit(1)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# Roll up some shared logic for Berksfiles
|
3
|
-
##
|
4
|
-
require_relative './cookbook'
|
5
|
-
|
6
|
-
module Builderator
|
7
|
-
module Util
|
8
|
-
module Berkshim
|
9
|
-
def shims
|
10
|
-
|
11
|
-
## Root cookbook sources
|
12
|
-
metadata if ENV['BERKS_INSTALL_FROM'] == 'source'
|
13
|
-
|
14
|
-
if ENV['BERKS_INSTALL_FROM'] == 'release'
|
15
|
-
cookbook_spec = [].tap do |arguments|
|
16
|
-
arguments << Util::Cookbook.metadata.name
|
17
|
-
arguments << ENV['VERSION'] if ENV.include?('VERSION')
|
18
|
-
|
19
|
-
arguments << {}.tap do |options|
|
20
|
-
options[:path] = ENV['COOKBOOK_PATH'] if ENV.include?('COOKBOOK_PATH')
|
21
|
-
options[:git] = ENV['COOKBOOK_REPO'] if ENV.include?('COOKBOOK_REPO')
|
22
|
-
options[:github] = ENV['COOKBOOK_GITHUB'] if ENV.include?('COOKBOOK_GITHUB')
|
23
|
-
options[:branch] = ENV['COOKBOOK_BRANCH'] if ENV.include?('COOKBOOK_BRANCH')
|
24
|
-
options[:ref] = ENV['COOKBOOK_REF'] if ENV.include?('COOKBOOK_REF')
|
25
|
-
options[:tag] = ENV['COOKBOOK_TAG'] if ENV.include?('COOKBOOK_TAG')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
cookbook(*cookbook_spec)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'chef/cookbook/metadata'
|
2
|
-
require 'ignorefile'
|
3
|
-
|
4
|
-
require_relative '../util'
|
5
|
-
|
6
|
-
module Builderator
|
7
|
-
module Util
|
8
|
-
module Cookbook
|
9
|
-
DEFAULT_VENDOR = Util.working_dir('vendor/chef/cookbooks')
|
10
|
-
|
11
|
-
## Don't vendor VCS files.
|
12
|
-
## Reference GNU tar --exclude-vcs: https://www.gnu.org/software/tar/manual/html_section/tar_49.html
|
13
|
-
## Boosted from https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/berksfile.rb
|
14
|
-
EXCLUDED_VCS_FILES = [
|
15
|
-
'.arch-ids', '{arch}', '.bzr', '.bzrignore', '.bzrtags',
|
16
|
-
'CVS', '.cvsignore', '_darcs', '.git', '.hg', '.hgignore',
|
17
|
-
'.hgrags', 'RCS', 'SCCS', '.svn', '**/.git', '.temp'].freeze
|
18
|
-
|
19
|
-
class Metadata < Chef::Cookbook::Metadata
|
20
|
-
def files
|
21
|
-
return @files unless @files.nil?
|
22
|
-
|
23
|
-
@files ||= Pathname.glob(Util::Cookbook.path.join('**/{*,.*}'))
|
24
|
-
ignorefile.apply!(@files)
|
25
|
-
|
26
|
-
@files
|
27
|
-
end
|
28
|
-
|
29
|
-
def archive
|
30
|
-
Util.working_dir("#{ name }-#{ version }.tgz")
|
31
|
-
end
|
32
|
-
|
33
|
-
def chefignore
|
34
|
-
Util::Cookbook.path.join('chefignore')
|
35
|
-
end
|
36
|
-
|
37
|
-
def gitignore
|
38
|
-
Util.working_dir('.gitignore')
|
39
|
-
end
|
40
|
-
|
41
|
-
def ignorefile
|
42
|
-
return @ignorefile unless @ignorefile.nil?
|
43
|
-
|
44
|
-
## Construct an ignorefile
|
45
|
-
@ignorefile = IgnoreFile.new(Util::Cookbook::EXCLUDED_VCS_FILES)
|
46
|
-
@ignorefile.load_file(chefignore)
|
47
|
-
@ignorefile.load_file(gitignore)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
class << self
|
52
|
-
def path(arg = nil)
|
53
|
-
## Set an explicit path to a cookbook
|
54
|
-
return @path = Pathname.new(arg) unless arg.nil?
|
55
|
-
return @path unless @path.nil?
|
56
|
-
|
57
|
-
## Check for an embedded cookbook? ('./cookbook')
|
58
|
-
return @path = Util.working_dir('cookbook') if Util.working_dir('cookbook').exist?
|
59
|
-
|
60
|
-
@path = Util.working_dir
|
61
|
-
end
|
62
|
-
|
63
|
-
def archive_path(metadata, file)
|
64
|
-
Pathname.new(metadata.name).join(Pathname.new(file).relative_path_from(path))
|
65
|
-
end
|
66
|
-
|
67
|
-
def berksfile
|
68
|
-
path.join('Berksfile')
|
69
|
-
end
|
70
|
-
|
71
|
-
def metadata
|
72
|
-
Metadata.new.tap do |c|
|
73
|
-
if path.join('metadata.rb').exist?
|
74
|
-
c.from_file(path.join('metadata.rb').to_s)
|
75
|
-
|
76
|
-
elsif path.join('metadata.json').exist?
|
77
|
-
c.from_json(path.join('metadata.json').read)
|
78
|
-
|
79
|
-
else
|
80
|
-
fail IOError, 'Unable to read metadata.rb or metadata.json!'
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|