puppet 2.7.19 → 2.7.20.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CONTRIBUTING.md +61 -238
- data/Gemfile +32 -0
- data/Gemfile.lock +44 -0
- data/LICENSE +1 -1
- data/README_DEVELOPER.md +300 -5
- data/Rakefile +41 -37
- data/ext/build_defaults.yaml +20 -0
- data/ext/debian/README.Debian +8 -0
- data/ext/debian/README.source +2 -0
- data/ext/debian/TODO.Debian +1 -0
- data/ext/debian/changelog.erb +1104 -0
- data/ext/debian/compat +1 -0
- data/ext/debian/control +142 -0
- data/ext/debian/copyright +361 -0
- data/ext/debian/docs +1 -0
- data/ext/debian/fileserver.conf +17 -0
- data/ext/debian/puppet-common.dirs +8 -0
- data/ext/debian/puppet-common.install +3 -0
- data/ext/debian/puppet-common.lintian-overrides +7 -0
- data/ext/debian/puppet-common.manpages +2 -0
- data/ext/debian/puppet-common.postinst +35 -0
- data/ext/debian/puppet-common.postrm +32 -0
- data/ext/debian/puppet-el.dirs +1 -0
- data/ext/debian/puppet-el.emacsen-install +25 -0
- data/ext/debian/puppet-el.emacsen-remove +11 -0
- data/ext/debian/puppet-el.emacsen-startup +9 -0
- data/ext/debian/puppet-el.install +1 -0
- data/ext/debian/puppet-testsuite.install +3 -0
- data/ext/debian/puppet-testsuite.lintian-overrides +4 -0
- data/ext/debian/puppet.NEWS +86 -0
- data/ext/debian/puppet.conf +14 -0
- data/ext/debian/puppet.default +7 -0
- data/ext/debian/puppet.dirs +1 -0
- data/ext/debian/puppet.init +118 -0
- data/ext/debian/puppet.install +4 -0
- data/ext/debian/puppet.lintian-overrides +3 -0
- data/ext/debian/puppet.logrotate +11 -0
- data/ext/debian/puppet.manpages +36 -0
- data/ext/debian/puppet.postinst +20 -0
- data/ext/debian/puppet.postrm +20 -0
- data/ext/debian/puppet.preinst +20 -0
- data/ext/debian/puppetmaster-common.install +5 -0
- data/ext/debian/puppetmaster-common.manpages +5 -0
- data/ext/debian/puppetmaster-common.puppetqd.default +27 -0
- data/ext/debian/puppetmaster-common.puppetqd.init +84 -0
- data/ext/debian/puppetmaster-passenger.dirs +4 -0
- data/ext/debian/puppetmaster-passenger.postinst +66 -0
- data/ext/debian/puppetmaster-passenger.postrm +33 -0
- data/ext/debian/puppetmaster.NEWS +13 -0
- data/ext/debian/puppetmaster.README.debian +16 -0
- data/ext/debian/puppetmaster.default +38 -0
- data/ext/debian/puppetmaster.dirs +1 -0
- data/ext/debian/puppetmaster.init +158 -0
- data/ext/debian/puppetmaster.install +1 -0
- data/ext/debian/puppetmaster.lintian-overrides +3 -0
- data/ext/debian/puppetmaster.manpages +1 -0
- data/ext/debian/puppetmaster.postinst +20 -0
- data/ext/debian/puppetmaster.postrm +5 -0
- data/ext/debian/puppetmaster.preinst +22 -0
- data/ext/debian/rules +127 -0
- data/ext/debian/source/format +1 -0
- data/ext/debian/source/options +1 -0
- data/ext/debian/vim-puppet.README.Debian +13 -0
- data/ext/debian/vim-puppet.dirs +3 -0
- data/ext/debian/vim-puppet.yaml +5 -0
- data/ext/debian/watch +2 -0
- data/ext/emacs/puppet-mode.el +1 -0
- data/{conf → ext}/osx/PackageInfo.plist +0 -0
- data/{conf → ext}/osx/createpackage.sh +0 -0
- data/ext/osx/file_mapping.yaml +38 -0
- data/ext/osx/preflight.erb +37 -0
- data/{tasks/rake/templates → ext/osx}/prototype.plist.erb +0 -0
- data/ext/packaging/README-Solaris.md +117 -0
- data/ext/packaging/README.md +255 -0
- data/ext/packaging/spec/spec_helper.rb +12 -0
- data/ext/packaging/spec/tasks/00_utils_spec.rb +66 -0
- data/ext/packaging/tasks/00_utils.rake +382 -0
- data/ext/packaging/tasks/10_setupvars.rake +71 -0
- data/ext/packaging/tasks/20_setupextravars.rake +25 -0
- data/ext/packaging/tasks/apple.rake +201 -0
- data/ext/packaging/tasks/clean.rake +5 -0
- data/ext/packaging/tasks/deb.rake +108 -0
- data/ext/packaging/tasks/doc.rake +20 -0
- data/ext/packaging/tasks/fetch.rake +18 -0
- data/ext/packaging/tasks/gem.rake +68 -0
- data/ext/packaging/tasks/ips.rake +80 -0
- data/ext/packaging/tasks/mock.rake +126 -0
- data/ext/packaging/tasks/pe_deb.rake +9 -0
- data/ext/packaging/tasks/pe_remote.rake +45 -0
- data/ext/packaging/tasks/pe_rpm.rake +21 -0
- data/ext/packaging/tasks/pe_ship.rake +30 -0
- data/ext/packaging/tasks/pe_sign.rake +27 -0
- data/ext/packaging/tasks/pe_sles.rake +96 -0
- data/ext/packaging/tasks/release.rake +73 -0
- data/ext/packaging/tasks/remote_build.rake +78 -0
- data/ext/packaging/tasks/rpm.rake +52 -0
- data/ext/packaging/tasks/ship.rake +78 -0
- data/ext/packaging/tasks/sign.rake +82 -0
- data/ext/packaging/tasks/tag.rake +8 -0
- data/ext/packaging/tasks/tar.rake +68 -0
- data/ext/packaging/tasks/template.rake +13 -0
- data/ext/packaging/tasks/update.rake +16 -0
- data/ext/packaging/tasks/version.rake +21 -0
- data/ext/project_data.yaml +24 -0
- data/{conf/redhat/puppet.spec → ext/redhat/puppet.spec.erb} +18 -10
- data/install.rb +8 -8
- data/lib/puppet.rb +2 -6
- data/lib/puppet/agent/locker.rb +2 -0
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/agent.rb +1 -1
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/application/cert.rb +5 -6
- data/lib/puppet/application/describe.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/kick.rb +1 -1
- data/lib/puppet/application/master.rb +1 -1
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/defaults.rb +21 -3
- data/lib/puppet/external/dot.rb +1 -1
- data/lib/puppet/face/help/global.erb +1 -1
- data/lib/puppet/face/module/install.rb +1 -1
- data/lib/puppet/face/module/list.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/node/clean.rb +23 -18
- data/lib/puppet/face/parser.rb +11 -2
- data/lib/puppet/file_collection.rb +16 -27
- data/lib/puppet/file_collection/lookup.rb +6 -16
- data/lib/puppet/file_serving/base.rb +4 -4
- data/lib/puppet/indirector/catalog/static_compiler.rb +3 -4
- data/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/face.rb +2 -2
- data/lib/puppet/indirector/key/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/node/exec.rb +13 -1
- data/lib/puppet/indirector/request.rb +4 -0
- data/lib/puppet/metatype/manager.rb +17 -10
- data/lib/puppet/network/authstore.rb +1 -1
- data/lib/puppet/network/rights.rb +1 -2
- data/lib/puppet/node/environment.rb +1 -0
- data/lib/puppet/parameter/value.rb +9 -3
- data/lib/puppet/parser/ast.rb +1 -4
- data/lib/puppet/parser/files.rb +1 -1
- data/lib/puppet/parser/functions.rb +68 -22
- data/lib/puppet/parser/functions/create_resources.rb +2 -3
- data/lib/puppet/parser/functions/shellquote.rb +21 -25
- data/lib/puppet/parser/lexer.rb +40 -6
- data/lib/puppet/parser/relationship.rb +3 -1
- data/lib/puppet/parser/resource.rb +2 -3
- data/lib/puppet/parser/resource/param.rb +3 -5
- data/lib/puppet/parser/scope.rb +7 -4
- data/lib/puppet/property.rb +5 -3
- data/lib/puppet/provider.rb +5 -5
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/windows.rb +10 -29
- data/lib/puppet/provider/group/groupadd.rb +2 -3
- data/lib/puppet/provider/group/ldap.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +1 -1
- data/lib/puppet/provider/ldap.rb +5 -1
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +2 -2
- data/lib/puppet/provider/package/gem.rb +6 -2
- data/lib/puppet/provider/package/portage.rb +4 -2
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +2 -2
- data/lib/puppet/provider/service/base.rb +2 -41
- data/lib/puppet/provider/service/daemontools.rb +1 -1
- data/lib/puppet/provider/service/launchd.rb +1 -1
- data/lib/puppet/provider/service/redhat.rb +6 -5
- data/lib/puppet/provider/service/runit.rb +1 -1
- data/lib/puppet/provider/service/service.rb +43 -0
- data/lib/puppet/provider/service/windows.rb +1 -8
- data/lib/puppet/provider/user/user_role_add.rb +2 -1
- data/lib/puppet/provider/user/useradd.rb +8 -3
- data/lib/puppet/provider/user/windows_adsi.rb +12 -1
- data/lib/puppet/provider/zone/solaris.rb +1 -1
- data/lib/puppet/rails/inventory_node.rb +26 -13
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +20 -5
- data/lib/puppet/resource/status.rb +1 -1
- data/lib/puppet/ssl/certificate_authority.rb +2 -0
- data/lib/puppet/ssl/host.rb +31 -6
- data/lib/puppet/test/test_helper.rb +3 -1
- data/lib/puppet/transaction/event.rb +1 -1
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/type.rb +30 -25
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +2 -2
- data/lib/puppet/type/exec.rb +6 -6
- data/lib/puppet/type/file.rb +5 -15
- data/lib/puppet/type/file/content.rb +1 -1
- data/lib/puppet/type/file/ensure.rb +1 -1
- data/lib/puppet/type/file/mode.rb +1 -1
- data/lib/puppet/type/file/selcontext.rb +6 -2
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/package.rb +1 -1
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/scheduled_task.rb +1 -1
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/whit.rb +16 -9
- data/lib/puppet/util.rb +27 -11
- data/lib/puppet/util/adsi.rb +25 -23
- data/lib/puppet/util/autoload.rb +1 -1
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/feature.rb +3 -1
- data/lib/puppet/util/fileparsing.rb +9 -9
- data/lib/puppet/util/filetype.rb +55 -40
- data/lib/puppet/util/instance_loader.rb +5 -5
- data/lib/puppet/util/instrumentation.rb +3 -5
- data/lib/puppet/util/log_paths.rb +1 -3
- data/lib/puppet/util/monkey_patches.rb +34 -8
- data/lib/puppet/util/platform.rb +7 -0
- data/lib/puppet/util/posix.rb +3 -3
- data/lib/puppet/util/provider_features.rb +2 -3
- data/lib/puppet/util/rdoc.rb +4 -3
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/selinux.rb +31 -36
- data/lib/puppet/util/tagging.rb +28 -6
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/process.rb +3 -3
- data/lib/puppet/util/windows/security.rb +9 -46
- data/lib/puppet/util/windows/sid.rb +96 -0
- data/lib/puppet/util/windows/user.rb +65 -2
- data/lib/puppet/util/zaml.rb +109 -59
- data/lib/puppet/version.rb +18 -0
- data/spec/fixtures/unit/util/filetype/aixtab_output +44 -0
- data/spec/fixtures/unit/util/filetype/suntab_output +9 -0
- data/spec/integration/defaults_spec.rb +26 -7
- data/spec/integration/parser/functions_spec.rb +0 -4
- data/spec/integration/util/file_locking_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +3 -23
- data/spec/lib/puppet_spec/files.rb +3 -3
- data/spec/shared_contexts/platform.rb +8 -0
- data/spec/spec_helper.rb +6 -1
- data/spec/unit/application/queue_spec.rb +2 -1
- data/spec/unit/configurer_spec.rb +1 -1
- data/spec/unit/face/{instrumentation_data.rb → instrumentation_data_spec.rb} +0 -0
- data/spec/unit/face/{instrumentation_listener.rb → instrumentation_listener_spec.rb} +0 -0
- data/spec/unit/face/{instrumentation_probe.rb → instrumentation_probe_spec.rb} +0 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +194 -0
- data/spec/unit/indirector/certificate/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/key/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/request_spec.rb +22 -0
- data/spec/unit/network/http/webrick_spec.rb +0 -7
- data/spec/unit/node/environment_spec.rb +8 -8
- data/spec/unit/parser/ast_spec.rb +0 -5
- data/spec/unit/parser/collector_spec.rb +1 -0
- data/spec/unit/parser/files_spec.rb +2 -2
- data/spec/unit/parser/functions/create_resources_spec.rb +3 -4
- data/spec/unit/parser/functions/require_spec.rb +0 -6
- data/spec/unit/parser/functions/shellquote_spec.rb +0 -5
- data/spec/unit/parser/functions/template_spec.rb +6 -1
- data/spec/unit/parser/functions_spec.rb +73 -23
- data/spec/unit/parser/lexer_spec.rb +133 -8
- data/spec/unit/parser/relationship_spec.rb +24 -0
- data/spec/unit/parser/resource_spec.rb +0 -4
- data/spec/unit/parser/scope_spec.rb +2 -2
- data/spec/unit/property_spec.rb +21 -1
- data/spec/unit/provider/exec/posix_spec.rb +7 -6
- data/spec/unit/provider/file/windows_spec.rb +29 -29
- data/spec/unit/provider/group/groupadd_spec.rb +36 -30
- data/spec/unit/provider/group/windows_adsi_spec.rb +2 -2
- data/spec/unit/provider/package/gem_spec.rb +12 -0
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +14 -11
- data/spec/unit/provider/service/redhat_spec.rb +11 -1
- data/spec/unit/provider/service/windows_spec.rb +19 -0
- data/spec/unit/provider/user/ldap_spec.rb +22 -8
- data/spec/unit/provider/user/user_role_add_spec.rb +12 -0
- data/spec/unit/provider/user/useradd_spec.rb +146 -118
- data/spec/unit/provider/user/windows_adsi_spec.rb +24 -2
- data/spec/unit/puppet_spec.rb +10 -0
- data/spec/unit/resource/status_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +73 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +25 -1
- data/spec/unit/ssl/host_spec.rb +73 -27
- data/spec/unit/ssl/key_spec.rb +0 -4
- data/spec/unit/transaction/event_spec.rb +1 -1
- data/spec/unit/type/exec_spec.rb +1 -1
- data/spec/unit/type/file/content_spec.rb +6 -4
- data/spec/unit/type/file/{ctime.rb → ctime_spec.rb} +0 -0
- data/spec/unit/type/file/{mtime.rb → mtime_spec.rb} +0 -0
- data/spec/unit/type/file/{type.rb → type_spec.rb} +0 -0
- data/spec/unit/type/file_spec.rb +2 -12
- data/spec/unit/type/host_spec.rb +14 -5
- data/spec/unit/type/mount_spec.rb +8 -0
- data/spec/unit/type/scheduled_task_spec.rb +2 -2
- data/spec/unit/util/adsi_spec.rb +23 -8
- data/spec/unit/util/command_line_spec.rb +11 -2
- data/spec/unit/util/feature_spec.rb +12 -1
- data/spec/unit/util/filetype_spec.rb +161 -55
- data/spec/unit/util/log_spec.rb +1 -1
- data/spec/unit/util/monkey_patches_spec.rb +7 -0
- data/spec/unit/util/rdoc_spec.rb +8 -2
- data/spec/unit/util/selinux_spec.rb +24 -32
- data/spec/unit/util/windows/sid_spec.rb +100 -0
- data/spec/unit/util/zaml_spec.rb +165 -25
- data/spec/unit/util_spec.rb +3 -9
- data/spec/watchr.rb +2 -6
- data/tasks/rake/gem.rake +4 -2
- data/tasks/rake/sign.rake +1 -1
- data/test/language/parser.rb +1 -0
- data/test/language/scope.rb +0 -5
- data/test/language/snippets.rb +1 -2
- data/test/lib/puppettest.rb +16 -27
- data/test/lib/puppettest/parsertesting.rb +0 -1
- data/test/network/authstore.rb +2 -4
- data/test/puppet/defaults.rb +0 -4
- data/test/util/fileparsing.rb +2 -6
- metadata +1706 -1617
- data/conf/osx/preflight +0 -24
- data/spec/spec.opts +0 -4
- data/spec/unit/file_collection/lookup_spec.rb +0 -45
- data/spec/unit/file_collection_spec.rb +0 -52
- data/tasks/rake/apple.rake +0 -176
- data/test/puppet/errortest.rb +0 -19
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rspec'
|
3
|
+
require 'pathname'
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
SPECDIR = Pathname(__FILE__).dirname
|
7
|
+
|
8
|
+
def require_task(name)
|
9
|
+
return false if (@loaded ||= {})[name]
|
10
|
+
load SPECDIR + '..' + 'tasks' + "#{name}.rake"
|
11
|
+
@loaded[name] = true
|
12
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
require_task '00_utils'
|
4
|
+
|
5
|
+
describe "00_utils" do
|
6
|
+
TestVersions = {
|
7
|
+
'0.7.0' => {
|
8
|
+
:git_describe_version => %w{0.7.0},
|
9
|
+
:get_dash_version => '0.7.0',
|
10
|
+
:get_ips_version => '0.7.0,3.14159-0',
|
11
|
+
:get_dot_version => '0.7.0'
|
12
|
+
},
|
13
|
+
'0.7.0rc1' => {
|
14
|
+
:git_describe_version => %w{0.7.0rc1},
|
15
|
+
:get_dash_version => '0.7.0rc1',
|
16
|
+
:get_ips_version => '0.7.0rc1,3.14159-0',
|
17
|
+
:get_dot_version => '0.7.0rc1'
|
18
|
+
},
|
19
|
+
'0.7.0-rc1' => {
|
20
|
+
:git_describe_version => %w{0.7.0 rc1},
|
21
|
+
:get_dash_version => '0.7.0-rc1',
|
22
|
+
:get_ips_version => '0.7.0,3.14159-0',
|
23
|
+
:get_dot_version => '0.7.0.rc1'
|
24
|
+
},
|
25
|
+
'0.7.0-rc1-63-ge391f55' => {
|
26
|
+
:git_describe_version => %w{0.7.0 rc1 63},
|
27
|
+
:get_dash_version => '0.7.0-rc1-63',
|
28
|
+
:get_ips_version => '0.7.0,3.14159-63',
|
29
|
+
:get_dot_version => '0.7.0.rc1.63'
|
30
|
+
},
|
31
|
+
'0.7.0-rc1-63-ge391f55-dirty' => {
|
32
|
+
:git_describe_version => %w{0.7.0 rc1 63 dirty},
|
33
|
+
:get_dash_version => '0.7.0-rc1-63-dirty',
|
34
|
+
:get_ips_version => '0.7.0,3.14159-63-dirty',
|
35
|
+
:get_dot_version => '0.7.0.rc1.63.dirty'
|
36
|
+
},
|
37
|
+
'0.7.0-63-ge391f55' => {
|
38
|
+
:git_describe_version => %w{0.7.0 63},
|
39
|
+
:get_dash_version => '0.7.0-63',
|
40
|
+
:get_ips_version => '0.7.0,3.14159-63',
|
41
|
+
:get_dot_version => '0.7.0.63'
|
42
|
+
},
|
43
|
+
'0.7.0-63-ge391f55-dirty' => {
|
44
|
+
:git_describe_version => %w{0.7.0 63 dirty},
|
45
|
+
:get_dash_version => '0.7.0-63-dirty',
|
46
|
+
:get_ips_version => '0.7.0,3.14159-63-dirty',
|
47
|
+
:get_dot_version => '0.7.0.63.dirty'
|
48
|
+
},
|
49
|
+
}
|
50
|
+
|
51
|
+
TestVersions.keys.sort.each do |input|
|
52
|
+
results = TestVersions[input]
|
53
|
+
results.keys.sort_by(&:to_s).each do |method|
|
54
|
+
it "using #{method} #{input.inspect} becomes #{results[method].inspect}" do
|
55
|
+
# We have to call the `stub!` alias because we are trying to stub on
|
56
|
+
# `self`, and in the scope of an rspec block that is overridden to
|
57
|
+
# return a new double, not to stub a method!
|
58
|
+
self.stub!(:uname_r) { "3.14159" }
|
59
|
+
self.stub!(:is_git_repo) { true }
|
60
|
+
self.should_receive(:run_git_describe_internal).and_return(input)
|
61
|
+
|
62
|
+
self.send(method).should == results[method]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,382 @@
|
|
1
|
+
# Utility methods used by the various rake tasks
|
2
|
+
|
3
|
+
def check_tool(tool)
|
4
|
+
return true if has_tool(tool)
|
5
|
+
STDERR.puts "#{tool} tool not found...exiting"
|
6
|
+
exit 1
|
7
|
+
end
|
8
|
+
|
9
|
+
def find_tool(tool)
|
10
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |root|
|
11
|
+
location = File.join(root, tool)
|
12
|
+
return location if FileTest.executable? location
|
13
|
+
end
|
14
|
+
return nil
|
15
|
+
end
|
16
|
+
alias :has_tool :find_tool
|
17
|
+
|
18
|
+
def check_file(file)
|
19
|
+
unless File.exist?(file)
|
20
|
+
STDERR.puts "#{file} file not found...exiting"
|
21
|
+
exit 2
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def check_var(varname,var=nil)
|
26
|
+
if var.nil?
|
27
|
+
STDERR.puts "Requires #{varname} be set...exiting"
|
28
|
+
exit 3
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def check_host(host)
|
33
|
+
unless host == %x{hostname}.chomp!
|
34
|
+
STDERR.puts "Requires host to be #{host}...exiting"
|
35
|
+
exit 5
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def erb(erbfile, outfile)
|
40
|
+
template = File.read(erbfile)
|
41
|
+
message = ERB.new(template, nil, "-")
|
42
|
+
message.filename = erbfile
|
43
|
+
output = message.result(binding)
|
44
|
+
File.open(outfile, 'w') { |f| f.write output }
|
45
|
+
puts "Generated: #{outfile}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def cp_pr(src, dest, options={})
|
49
|
+
mandatory = {:preserve => true}
|
50
|
+
cp_r(src, dest, options.merge(mandatory))
|
51
|
+
end
|
52
|
+
|
53
|
+
def cp_p(src, dest, options={})
|
54
|
+
mandatory = {:preserve => true}
|
55
|
+
cp(src, dest, options.merge(mandatory))
|
56
|
+
end
|
57
|
+
|
58
|
+
def mv_f(src, dest, options={})
|
59
|
+
force = {:force => true}
|
60
|
+
mv(src, dest, options.merge(mandatory))
|
61
|
+
end
|
62
|
+
|
63
|
+
def git_co(dist)
|
64
|
+
%x{git reset --hard ; git checkout #{dist}}
|
65
|
+
unless $?.success?
|
66
|
+
STDERR.puts 'Could not checkout #{dist} git branch to build package from...exiting'
|
67
|
+
exit 1
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_temp
|
72
|
+
temp = `mktemp -d -t tmpXXXXXX`.strip
|
73
|
+
end
|
74
|
+
|
75
|
+
def remote_ssh_cmd target, command
|
76
|
+
check_tool('ssh')
|
77
|
+
puts "Executing '#{command}' on #{target}"
|
78
|
+
sh "ssh -t #{target} '#{command.gsub("'", "'\\\\''")}'"
|
79
|
+
end
|
80
|
+
|
81
|
+
def rsync_to *args
|
82
|
+
check_tool('rsync')
|
83
|
+
flags = "-Havxl -O --no-perms --no-owner --no-group"
|
84
|
+
source = args[0]
|
85
|
+
target = args[1]
|
86
|
+
dest = args[2]
|
87
|
+
puts "rsyncing #{source} to #{target}"
|
88
|
+
sh "rsync #{flags} #{source} #{target}:#{dest}"
|
89
|
+
end
|
90
|
+
|
91
|
+
def rsync_from *args
|
92
|
+
check_tool('rsync')
|
93
|
+
flags = "-Havxl -O --no-perms --no-owner --no-group"
|
94
|
+
source = args[0]
|
95
|
+
target = args[1]
|
96
|
+
dest = args[2]
|
97
|
+
puts "rsyncing #{source} from #{target} to #{dest}"
|
98
|
+
sh "rsync #{flags} #{target}:#{source} #{dest}"
|
99
|
+
end
|
100
|
+
|
101
|
+
def scp_file_from(host,path,file)
|
102
|
+
%x{scp #{host}:#{path}/#{file} #{@tempdir}/#{file}}
|
103
|
+
end
|
104
|
+
|
105
|
+
def scp_file_to(host,path,file)
|
106
|
+
%x{scp #{@tempdir}/#{file} #{host}:#{path}}
|
107
|
+
end
|
108
|
+
|
109
|
+
def timestamp
|
110
|
+
Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
111
|
+
end
|
112
|
+
|
113
|
+
# Return information about the current tree, using `git describe`, ready for
|
114
|
+
# further processing.
|
115
|
+
#
|
116
|
+
# Returns an array of one to four elements, being:
|
117
|
+
# * version (three dot-joined numbers, leading `v` stripped)
|
118
|
+
# * the string 'rcX' (if the last tag was an rc release, where X is the rc number)
|
119
|
+
# * commits (string containing integer, number of commits since that version was tagged)
|
120
|
+
# * dirty (string 'dirty' if local changes exist in the repo)
|
121
|
+
def git_describe_version
|
122
|
+
return nil unless is_git_repo and raw = run_git_describe_internal
|
123
|
+
# reprocess that into a nice set of output data
|
124
|
+
# The elements we select potentially change if this is an rc
|
125
|
+
# For an rc with added commits our string will be something like '0.7.0-rc1-63-g51ccc51'
|
126
|
+
# and our return will be [0.7.0, rc1, 63, <dirty>]
|
127
|
+
# For a final with added commits, it will look like '0.7.0-63-g51ccc51'
|
128
|
+
# and our return will be [0.7.0, 64, <dirty>]
|
129
|
+
info = raw.chomp.sub(/^v/, '').split('-')
|
130
|
+
if info[1].to_s.match('^[\d]+')
|
131
|
+
version_string = info.values_at(0,1,3).compact
|
132
|
+
else
|
133
|
+
version_string = info.values_at(0,1,2,4).compact
|
134
|
+
end
|
135
|
+
version_string
|
136
|
+
end
|
137
|
+
|
138
|
+
# This is a stub to ease testing...
|
139
|
+
def run_git_describe_internal
|
140
|
+
raw = %x{git describe --tags --dirty 2>/dev/null}
|
141
|
+
$?.success? ? raw : nil
|
142
|
+
end
|
143
|
+
|
144
|
+
def get_dash_version
|
145
|
+
if info = git_describe_version
|
146
|
+
info.join('-')
|
147
|
+
else
|
148
|
+
get_pwd_version
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def uname_r
|
153
|
+
%x{uname -r}.chomp
|
154
|
+
end
|
155
|
+
|
156
|
+
def get_ips_version
|
157
|
+
if info = git_describe_version
|
158
|
+
version, commits, dirty = info
|
159
|
+
if commits.to_s.match('^rc[\d]+')
|
160
|
+
commits = info[2]
|
161
|
+
dirty = info[3]
|
162
|
+
end
|
163
|
+
osrelease = uname_r
|
164
|
+
"#{version},#{osrelease}-#{commits.to_i}#{dirty ? '-dirty' : ''}"
|
165
|
+
else
|
166
|
+
get_pwd_version
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def get_dot_version
|
171
|
+
get_dash_version.gsub('-', '.')
|
172
|
+
end
|
173
|
+
|
174
|
+
def get_pwd_version
|
175
|
+
%x{pwd}.strip.split('.')[-1]
|
176
|
+
end
|
177
|
+
|
178
|
+
def get_debversion
|
179
|
+
(@version.include?("rc") ? @version.sub(/rc[0-9]+/, '0.1\0') : "#{@version.gsub('-','.')}-1") + "#{@packager}#{get_debrelease}"
|
180
|
+
end
|
181
|
+
|
182
|
+
def get_origversion
|
183
|
+
@debversion.split('-')[0]
|
184
|
+
end
|
185
|
+
|
186
|
+
def get_rpmversion
|
187
|
+
@version.match(/^([0-9.]+)/)[1]
|
188
|
+
end
|
189
|
+
|
190
|
+
def get_version_file_version
|
191
|
+
# Match version files containing 'VERSION = "x.x.x"' and just x.x.x
|
192
|
+
contents = IO.read(@version_file)
|
193
|
+
if version_string = contents.match(/VERSION =.*/)
|
194
|
+
version_string.to_s.split()[-1]
|
195
|
+
else
|
196
|
+
contents
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def get_debrelease
|
201
|
+
ENV['RELEASE'] || '1'
|
202
|
+
end
|
203
|
+
|
204
|
+
def get_rpmrelease
|
205
|
+
ENV['RELEASE'] ||
|
206
|
+
if @version.include?("rc")
|
207
|
+
"0.1" + @version.gsub('-', '_').match(/rc[0-9]+.*/)[0]
|
208
|
+
else
|
209
|
+
"1"
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def load_keychain
|
214
|
+
unless @keychain_loaded
|
215
|
+
kill_keychain
|
216
|
+
start_keychain
|
217
|
+
@keychain_loaded = TRUE
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def kill_keychain
|
222
|
+
%x{keychain -k mine}
|
223
|
+
end
|
224
|
+
|
225
|
+
def start_keychain
|
226
|
+
keychain = %x{/usr/bin/keychain -q --agents gpg --eval #{@gpg_key}}.chomp
|
227
|
+
new_env = keychain.match(/(GPG_AGENT_INFO)=([^;]*)/)
|
228
|
+
ENV[new_env[1]] = new_env[2]
|
229
|
+
end
|
230
|
+
|
231
|
+
def gpg_sign_file(file)
|
232
|
+
gpg ||= find_tool('gpg')
|
233
|
+
|
234
|
+
if gpg
|
235
|
+
sh "#{gpg} --armor --detach-sign -u #{@gpg_key} #{file}"
|
236
|
+
else
|
237
|
+
STDERR.puts "No gpg available. Cannot sign tarball. Exiting..."
|
238
|
+
exit 1
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
def mkdir_pr *args
|
243
|
+
args.each do |arg|
|
244
|
+
mkdir_p arg
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def set_cow_envs(cow)
|
249
|
+
elements = cow.split('-')
|
250
|
+
if elements.size != 3
|
251
|
+
STDERR.puts "Expecting a cow name split on hyphens, e.g. 'base-squeeze-i386'"
|
252
|
+
exit 1
|
253
|
+
else
|
254
|
+
dist = elements[1]
|
255
|
+
arch = elements[2]
|
256
|
+
if dist.nil? or arch.nil?
|
257
|
+
STDERR.puts "Couldn't get the arg and dist from cow name. Expecting something like 'base-dist-arch'"
|
258
|
+
exit 1
|
259
|
+
end
|
260
|
+
arch = arch.split('.')[0] if arch.include?('.')
|
261
|
+
end
|
262
|
+
|
263
|
+
ENV['DIST'] = dist
|
264
|
+
ENV['ARCH'] = arch
|
265
|
+
end
|
266
|
+
|
267
|
+
def ln(target, name)
|
268
|
+
FileUtils.ln(name, target, :force => true, :verbose => true)
|
269
|
+
end
|
270
|
+
|
271
|
+
def git_commit_file(file)
|
272
|
+
if has_tool('git') and File.exist?('.git')
|
273
|
+
%x{git commit #{file} -m "Commit changes to #{file}" &> /dev/null}
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
def ship_gem(file)
|
278
|
+
%x{gem push #{file}}
|
279
|
+
end
|
280
|
+
|
281
|
+
def x(v)
|
282
|
+
puts %[#{v}]
|
283
|
+
print %x[#{v}]
|
284
|
+
end
|
285
|
+
|
286
|
+
def ask_yes_or_no
|
287
|
+
return boolean_value(ENV['ANSWER_OVERRIDE']) unless ENV['ANSWER_OVERRIDE'].nil?
|
288
|
+
answer = STDIN.gets.downcase.chomp
|
289
|
+
return TRUE if answer =~ /^y$|^yes$/
|
290
|
+
return FALSE if answer =~ /^n$|^no$/
|
291
|
+
puts "Nope, try something like yes or no or y or n, etc:"
|
292
|
+
ask_yes_or_no
|
293
|
+
end
|
294
|
+
|
295
|
+
def handle_method_failure(method, args)
|
296
|
+
STDERR.puts "There was an error running the method #{method} with the arguments:"
|
297
|
+
args.each { |param, arg| STDERR.puts "\t#{param} => #{arg}\n" }
|
298
|
+
STDERR.puts "The rake session is paused. Would you like to retry #{method} with these args and continue where you left off? [y,n]"
|
299
|
+
if ask_yes_or_no
|
300
|
+
send(method, args)
|
301
|
+
else
|
302
|
+
exit 1
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def invoke_task(task, args=nil)
|
307
|
+
Rake::Task[task].reenable
|
308
|
+
Rake::Task[task].invoke(args)
|
309
|
+
end
|
310
|
+
|
311
|
+
def confirm_ship(files)
|
312
|
+
STDOUT.puts "The following files have been built and are ready to ship:"
|
313
|
+
files.each { |file| STDOUT.puts "\t#{file}\n" unless File.directory?(file) }
|
314
|
+
STDOUT.puts "Ship these files?? [y,n]"
|
315
|
+
ask_yes_or_no
|
316
|
+
end
|
317
|
+
|
318
|
+
def boolean_value(var)
|
319
|
+
return TRUE if (var == TRUE || ( var.is_a?(String) && ( var.downcase == 'true' || var.downcase =~ /^y$|^yes$/ )))
|
320
|
+
FALSE
|
321
|
+
end
|
322
|
+
|
323
|
+
def git_tag(version)
|
324
|
+
begin
|
325
|
+
sh "git tag -s -u #{@gpg_key} -m '#{version}' #{version}"
|
326
|
+
rescue Exception => e
|
327
|
+
STDERR.puts e
|
328
|
+
STDERR.puts "Unable to tag repo at #{version}"
|
329
|
+
exit 1
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
def rand_string
|
334
|
+
rand.to_s.split('.')[1]
|
335
|
+
end
|
336
|
+
|
337
|
+
def git_bundle(treeish)
|
338
|
+
temp = get_temp
|
339
|
+
appendix = rand_string
|
340
|
+
sh "git bundle create #{temp}/#{@name}-#{@version}-#{appendix} #{treeish} --tags"
|
341
|
+
cd temp do
|
342
|
+
sh "tar -czf #{@name}-#{@version}-#{appendix}.tar.gz #{@name}-#{@version}-#{appendix}"
|
343
|
+
rm_rf "#{@name}-#{@version}-#{appendix}"
|
344
|
+
end
|
345
|
+
"#{temp}/#{@name}-#{@version}-#{appendix}.tar.gz"
|
346
|
+
end
|
347
|
+
|
348
|
+
def remote_bootstrap(host, treeish)
|
349
|
+
tarball = git_bundle(treeish)
|
350
|
+
tarball_name = File.basename(tarball).gsub('.tar.gz','')
|
351
|
+
rsync_to(tarball, host, '/tmp')
|
352
|
+
appendix = rand_string
|
353
|
+
sh "ssh -t #{host} 'tar -zxvf /tmp/#{tarball_name}.tar.gz -C /tmp/ ; git clone --recursive /tmp/#{tarball_name} /tmp/#{@name}-#{appendix} ; cd /tmp/#{@name}-#{appendix} ; rake package:bootstrap'"
|
354
|
+
"/tmp/#{@name}-#{appendix}"
|
355
|
+
end
|
356
|
+
|
357
|
+
def is_git_repo
|
358
|
+
%x{git rev-parse --git-dir > /dev/null 2>&1}
|
359
|
+
return $?.success?
|
360
|
+
end
|
361
|
+
|
362
|
+
def git_pull(remote, branch)
|
363
|
+
sh "git pull #{remote} #{branch}"
|
364
|
+
end
|
365
|
+
|
366
|
+
def create_rpm_repo(dir)
|
367
|
+
check_tool('createrepo')
|
368
|
+
cd dir do
|
369
|
+
sh "createrepo -d ."
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def update_rpm_repo(dir)
|
374
|
+
check_tool('createrepo')
|
375
|
+
cd dir do
|
376
|
+
sh "createrepo -d --update ."
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
def empty_dir?(dir)
|
381
|
+
File.exist?(dir) and File.directory?(dir) and Dir["#{dir}/**/*"].empty?
|
382
|
+
end
|