puppet 2.7.21 → 2.7.22

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.

Files changed (101) hide show
  1. data/CHANGELOG +14 -0
  2. data/Gemfile.lock +2 -2
  3. data/ext/build_defaults.yaml +2 -3
  4. data/ext/debian/control +1 -1
  5. data/ext/packaging/README.md +496 -8
  6. data/ext/packaging/spec/tasks/00_utils_spec.rb +7 -7
  7. data/ext/packaging/spec/tasks/build_object_spec.rb +3 -0
  8. data/ext/packaging/tasks/00_utils.rake +2 -2
  9. data/ext/packaging/tasks/10_setupvars.rake +8 -1
  10. data/ext/packaging/tasks/build.rake +2 -0
  11. data/ext/packaging/tasks/deb_repos.rake +48 -15
  12. data/ext/packaging/tasks/jenkins.rake +30 -2
  13. data/ext/packaging/tasks/mock.rake +3 -2
  14. data/ext/packaging/tasks/pe_remote.rake +1 -1
  15. data/ext/packaging/tasks/pe_ship.rake +4 -5
  16. data/ext/packaging/tasks/pe_sign.rake +8 -0
  17. data/ext/packaging/tasks/pe_sles.rake +8 -7
  18. data/ext/packaging/tasks/pre_tasks.rake +0 -0
  19. data/ext/packaging/tasks/retrieve.rake +11 -1
  20. data/ext/packaging/tasks/rpm_repos.rake +71 -49
  21. data/ext/packaging/tasks/ship.rake +14 -2
  22. data/ext/packaging/tasks/sign.rake +9 -3
  23. data/ext/packaging/tasks/tar.rake +5 -0
  24. data/ext/packaging/tasks/vendor_gems.rake +110 -0
  25. data/install.rb +1 -1
  26. data/lib/puppet.rb +11 -0
  27. data/lib/puppet/indirector/report/processor.rb +1 -1
  28. data/lib/puppet/indirector/report/rest.rb +7 -0
  29. data/lib/puppet/indirector/resource/rest.rb +9 -0
  30. data/lib/puppet/indirector/rest.rb +81 -47
  31. data/lib/puppet/indirector/run/rest.rb +6 -0
  32. data/lib/puppet/network/formats.rb +20 -10
  33. data/lib/puppet/network/http/handler.rb +1 -1
  34. data/lib/puppet/node.rb +25 -0
  35. data/lib/puppet/node/facts.rb +23 -4
  36. data/lib/puppet/resource.rb +2 -4
  37. data/lib/puppet/resource/status.rb +28 -0
  38. data/lib/puppet/run.rb +24 -2
  39. data/lib/puppet/status.rb +6 -2
  40. data/lib/puppet/transaction/event.rb +19 -0
  41. data/lib/puppet/transaction/report.rb +39 -0
  42. data/lib/puppet/util/log.rb +19 -0
  43. data/lib/puppet/util/metric.rb +6 -0
  44. data/lib/puppet/util/monkey_patches.rb +0 -16
  45. data/lib/puppet/vendor.rb +55 -0
  46. data/lib/puppet/vendor/load_safe_yaml.rb +1 -0
  47. data/lib/puppet/vendor/require_vendored.rb +4 -0
  48. data/lib/puppet/vendor/safe_yaml/CHANGES.md +104 -0
  49. data/lib/puppet/vendor/safe_yaml/Gemfile +11 -0
  50. data/lib/puppet/vendor/safe_yaml/LICENSE.txt +22 -0
  51. data/lib/puppet/vendor/safe_yaml/README.md +179 -0
  52. data/lib/puppet/vendor/safe_yaml/Rakefile +6 -0
  53. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml.rb +253 -0
  54. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/deep.rb +34 -0
  55. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/date.rb +27 -0
  56. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/hexadecimal.rb +12 -0
  57. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/sexagesimal.rb +26 -0
  58. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/psych_handler.rb +92 -0
  59. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/psych_resolver.rb +52 -0
  60. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/resolver.rb +94 -0
  61. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/safe_to_ruby_visitor.rb +17 -0
  62. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_hack.rb +36 -0
  63. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_node_monkeypatch.rb +43 -0
  64. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_resolver.rb +38 -0
  65. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform.rb +41 -0
  66. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_boolean.rb +21 -0
  67. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_date.rb +11 -0
  68. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_float.rb +33 -0
  69. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_integer.rb +25 -0
  70. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_nil.rb +18 -0
  71. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_symbol.rb +13 -0
  72. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/transformation_map.rb +47 -0
  73. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/version.rb +3 -0
  74. data/lib/puppet/vendor/safe_yaml/run_specs_all_ruby_versions.sh +21 -0
  75. data/lib/puppet/vendor/safe_yaml/safe_yaml.gemspec +18 -0
  76. data/lib/puppet/vendor/safe_yaml/spec/exploit.1.9.2.yaml +2 -0
  77. data/lib/puppet/vendor/safe_yaml/spec/exploit.1.9.3.yaml +2 -0
  78. data/lib/puppet/vendor/safe_yaml/spec/psych_resolver_spec.rb +10 -0
  79. data/lib/puppet/vendor/safe_yaml/spec/resolver_specs.rb +250 -0
  80. data/lib/puppet/vendor/safe_yaml/spec/safe_yaml_spec.rb +702 -0
  81. data/lib/puppet/vendor/safe_yaml/spec/spec_helper.rb +18 -0
  82. data/lib/puppet/vendor/safe_yaml/spec/support/exploitable_back_door.rb +29 -0
  83. data/lib/puppet/vendor/safe_yaml/spec/syck_resolver_spec.rb +10 -0
  84. data/lib/puppet/vendor/safe_yaml/spec/transform/base64_spec.rb +11 -0
  85. data/lib/puppet/vendor/safe_yaml/spec/transform/to_date_spec.rb +34 -0
  86. data/lib/puppet/vendor/safe_yaml/spec/transform/to_float_spec.rb +42 -0
  87. data/lib/puppet/vendor/safe_yaml/spec/transform/to_integer_spec.rb +59 -0
  88. data/lib/puppet/vendor/safe_yaml/spec/transform/to_symbol_spec.rb +49 -0
  89. data/lib/puppet/version.rb +1 -1
  90. data/spec/lib/puppet_spec/matchers.rb +8 -0
  91. data/spec/unit/file_serving/metadata_spec.rb +20 -28
  92. data/spec/unit/indirector/report/rest_spec.rb +41 -0
  93. data/spec/unit/indirector/rest_spec.rb +314 -339
  94. data/spec/unit/network/formats_spec.rb +36 -27
  95. data/spec/unit/network/http/handler_spec.rb +3 -12
  96. data/spec/unit/node_spec.rb +81 -0
  97. data/spec/unit/resource_spec.rb +5 -35
  98. data/spec/unit/run_spec.rb +22 -8
  99. data/spec/unit/status_spec.rb +6 -0
  100. data/test/network/handler/report.rb +0 -36
  101. metadata +148 -102
data/CHANGELOG CHANGED
@@ -1,3 +1,17 @@
1
+ 2.7.22
2
+ ===
3
+ ba8c021 [packaging] Update mocks for rpmbuilder mock format
4
+ 7f40007 (packaging) Update debian build-depends to be ruby1.8 so that the shebang is correct after install and ruby1.9.1 isn't used on newer debians.
5
+ 96be982 (packaging) Update build_defaults to remove EOL platforms (natty, f15, f16).
6
+ fea3cb6 Improve CVE 2013 1654 SSLv2 Downgrade Master test
7
+ fd758ad Remove acceptance test for yaml parsing that was no longer valid
8
+ 5926d1a (#20584) Only deserialize expected objects from YAML
9
+ e8c30cb Vendor safe_yaml 0.9.2
10
+ ee741eb Fix installation of vendored libs
11
+ 2333fa4 Add vendoring system into puppet
12
+ 535da9b Add acceptance test for report processing
13
+ 788fdaf Don't keep Gemfile.lock checked in.
14
+
1
15
  2.7.21
2
16
  ===
3
17
  570e4d2 Update CHANGELOG, PUPPETVERSION for 2.7.21
@@ -8,11 +8,11 @@ GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  diff-lcs (1.1.3)
11
- facter (1.6.11)
11
+ facter (1.6.18)
12
12
  metaclass (0.0.1)
13
13
  mocha (0.10.5)
14
14
  metaclass (~> 0.0.1)
15
- rack (1.4.1)
15
+ rack (1.4.5)
16
16
  rspec (2.10.0)
17
17
  rspec-core (~> 2.10.0)
18
18
  rspec-expectations (~> 2.10.0)
@@ -2,15 +2,14 @@
2
2
  packaging_url: 'git://github.com/puppetlabs/packaging.git --branch=master'
3
3
  packaging_repo: 'packaging'
4
4
  default_cow: 'base-squeeze-i386.cow'
5
- cows: 'base-lucid-i386.cow base-natty-i386.cow base-oneiric-i386.cow base-precise-i386.cow base-quantal-i386.cow base-sid-i386.cow base-squeeze-i386.cow base-stable-i386.cow base-testing-i386.cow base-unstable-i386.cow base-wheezy-i386.cow'
5
+ cows: 'base-lucid-i386.cow base-oneiric-i386.cow base-precise-i386.cow base-quantal-i386.cow base-sid-i386.cow base-squeeze-i386.cow base-stable-i386.cow base-testing-i386.cow base-unstable-i386.cow base-wheezy-i386.cow'
6
6
  pbuild_conf: '/etc/pbuilderrc'
7
7
  packager: 'puppetlabs'
8
8
  gpg_name: 'info@puppetlabs.com'
9
9
  gpg_key: '4BD6EC30'
10
10
  sign_tar: False
11
11
  # a space separated list of mock configs
12
- final_mocks: 'pl-5-i386 pl-6-i386 fedora-15-i386 fedora-16-i386 fedora-17-i386'
13
- rc_mocks: 'pl-5-i386-dev pl-6-i386-dev fedora-15-i386-dev fedora-16-i386-dev fedora-17-i386-dev'
12
+ final_mocks: 'pl-el-5-i386 pl-el-6-i386 pl-fedora-17-i386'
14
13
  yum_host: 'burji.puppetlabs.com'
15
14
  yum_repo_path: '/opt/repository/yum/'
16
15
  build_gem: FALSE
@@ -3,7 +3,7 @@ Section: admin
3
3
  Priority: optional
4
4
  Maintainer: Puppet Labs <info@puppetlabs.com>
5
5
  Uploaders: Micah Anderson <micah@debian.org>, Andrew Pollock <apollock@debian.org>, Nigel Kersten <nigel@explanatorygap.net>, Stig Sandbeck Mathisen <ssm@debian.org>
6
- Build-Depends-Indep: ruby (>= 1.8.1), libopenssl-ruby, facter (>= 1.5), facter (<< 2.0)
6
+ Build-Depends-Indep: ruby1.8, libopenssl-ruby, facter (>= 1.5), facter (<< 2.0)
7
7
  Build-Depends: debhelper (>= 7.0.0), openssl
8
8
  Standards-Version: 3.9.1
9
9
  Vcs-Git: git://git.debian.org/git/pkg-puppet/puppet.git
@@ -54,10 +54,13 @@ certainly be modified to suit other environments, and much effort went into
54
54
  making tasks as modular and reusable as possible. Several Puppet Labs-specific
55
55
  tasks are only available if the file '~/.packaging' is present. This file is
56
56
  created by the `pl:fetch` task, which curls two yaml files into 'team' and
57
- 'project' subdirectories. from a [separate build data
57
+ 'project' subdirectories from a [separate build data
58
58
  repository](https://github.com/puppetlabs/build-data), which contains
59
- additional settings/data specific to Puppet Labs release infrastructure. The
60
- goal in separating these data and tasks out is to refrain from presenting by
59
+ additional settings/data specific to Puppet Labs release infrastructure. By
60
+ default, the team data file is pulled from the 'dev' branch of the repo, and
61
+ the project data file is pulled from a branch named after the project (e.g. for
62
+ puppet, there is a branch named puppet with a build data file). The goal in
63
+ separating these data and tasks out is to refrain from presenting by
61
64
  default yet more Puppet Labs-specific tasks that aren't generally consumable by
62
65
  everyone. To build a deb from a local repository using a `pl` task, ssh into a
63
66
  builder (e.g., one stood up using the modules detailed below) and clone the
@@ -119,9 +122,16 @@ pl:build_from_params PARAMS_FILE=/path/to/previously/sent/file`.
119
122
  7) Maintain the ssh connection until the build finishes, and rsync the packages
120
123
  from the builder to the local workstation.
121
124
 
125
+ Note that these tasks require ssh access to the builder hosts that are
126
+ specified in the build-data file, and appropriate membership in the build
127
+ groups, e.g. to use mock on the builder, membership in the mock group. This is
128
+ a major hurdle, and is resolved with the `jenkins` tasks below.
129
+
122
130
  ## `:jenkins:` tasks
123
- Jenkins tasks are similar to the `:remote:` tasks, but
124
- they do not require ssh access to the builders. The jenkins tasks enable the
131
+ Jenkins tasks are similar to the `:remote:` tasks, but they do not require ssh
132
+ access to the builders. They do require being on the local network - the
133
+ jenkins instance that performs package builds is an internal server only,
134
+ accessible when connected via VPN or on-site. The jenkins tasks enable the
125
135
  packaging repo to kick off packaging builds on a remote jenkins slave. They
126
136
  work in a similar way to the :remote tasks, but with a few key differences. The
127
137
  jenkins tasks transmit information to a jenkins coordinator, which handles the
@@ -155,8 +165,12 @@ Parameter Plugin, as described above. When the pl:jenkins:\* task triggers a
155
165
  build, it passes values for all of these parameters. The Label parameter is
156
166
  associated with the build type. This way we can queue the job on a builder with
157
167
  the appropriate capabilities just by assigning a builder the label "deb" or
158
- "rpm," etc. The actual build itself is accomplished via a shell build task. The
159
- contents of the task are:
168
+ "rpm," etc. The job allows parallel execution of jobs - in this way, we can
169
+ queue many package jobs on the jenkins instance, which will farm them out to
170
+ builders that are slaves of that jenkins instance. This also allows us to scale
171
+ building capacity simply by adding builders as slaves to the jenkins instance.
172
+ The actual build itself is accomplished via a shell build task. The contents of
173
+ the task are:
160
174
 
161
175
  ```bash
162
176
  #################
@@ -170,7 +184,6 @@ contents of the task are:
170
184
  # job, we don't actually know what's in it, just that it's a
171
185
  # git bundle.
172
186
 
173
-
174
187
  [ -f "PROJECT_BUNDLE" ] || exit 1
175
188
  mkdir project && tar -xzf PROJECT_BUNDLE -C project/
176
189
 
@@ -196,6 +209,11 @@ contents of the task are:
196
209
  #################
197
210
  ```
198
211
 
212
+ ## Task Explanations
213
+ For a listing of all available tasks and their functions, see the [Task
214
+ Dictionary](https://github.com/MosesMendoza/packaging/tree/more_documentation#task-dictionary)
215
+ at the end of this README.
216
+
199
217
  ## Modules
200
218
 
201
219
  A puppet module,
@@ -295,6 +313,16 @@ apt_repo_path: '/opt/repository/incoming'
295
313
  # Whether to present the gem and apple tasks
296
314
  build_gem: TRUE
297
315
  build_dmg: TRUE
316
+ # Whether to execute the rdoc rake tasks prior to composing the tarball
317
+ build_doc: FALSE
318
+ # Whether to present the Solaris 11 IPS packaging tasks
319
+ # This requires suitable IPS packaging artifacts in the project in ext/ips
320
+ build_ips: FALSE
321
+ # Whether this project is a PE project or not
322
+ build_pe: FALSE
323
+ # An optional task to execute pre-tarball composition. See the tasks in
324
+ # the 'pretasks' directory
325
+ pre_tar_task: 'package:vendor_gems'
298
326
  ```
299
327
  This is the sample project_data.yaml file:
300
328
  ```yaml
@@ -428,3 +456,463 @@ files:
428
456
  group: 'wheel'
429
457
  perms: '0644'
430
458
  ```
459
+
460
+ ## Task Dictionary
461
+
462
+ * **package:apple**
463
+
464
+ Use `PackageMaker` to create a pkg package inside a dmg. Requires 'sudo'
465
+ privileges. `build_dmg: TRUE` must be set in `ext/build_defaults.yaml`.
466
+ Packages are staged in ./pkg/apple. See the Mac packaging section of
467
+ [Setting up projects for the Packaging
468
+ Repo](https://github.com/MosesMendoza/packaging/tree/more_documentation#setting-up-projects-for-the-packaging-repo).
469
+
470
+ * **package:bootstrap**
471
+
472
+ Clone the packaging repo into this project. This task isn't actually in the
473
+ packaging repo itself, but resides in the project. See [Setting up projects
474
+ for the Packaging
475
+ Repo](https://github.com/puppetlabs/packaging#setting-up-projects-for-the-packaging-repo).
476
+
477
+ * **package:deb**
478
+
479
+ Use `debbuild` to create a deb package and associated debian package
480
+ artifacts from the repository. Requires all build dependencies be satisfied
481
+ locally. Packages are staged in ./pkg/deb.
482
+
483
+ * **package:gem**
484
+ Use the `rubygems/package_task` library to create a rubygem from the
485
+ repository. Requires `build_gem: TRUE` and gem-related parameters be set in
486
+ `ext/build_defaults.yaml` and `ext/project\_data.yaml`. The gem is staged
487
+ in `./pkg`.
488
+
489
+ * **package:implode**
490
+
491
+ Remove the packaging repo entirely from the project. This task isn't
492
+ actually in the packaging repo itself, but resides in the project. See
493
+ [Setting up projects for the Packaging
494
+ Repo](https://github.com/puppetlabs/packaging#setting-up-projects-for-the-packaging-repo).
495
+
496
+ * **package:ips**
497
+
498
+ Use Solaris 11 pkg* tools to create a IPS package from the project.
499
+ Packages are staged in `./pkg/ips/pkgs`. Requires all `pkg`, `pkgdepend`,
500
+ `pkgsend`, `pkglint`, and `pkgmogrify`. Currently only puppet, facter, and
501
+ hiera have this capability.
502
+
503
+ * **package:rpm**
504
+
505
+ Use `rpmbuild` to create an rpm of the project. This will also make a
506
+ source rpm. Requires all build dependencies by satisfied locally. Packages
507
+ are staged in `./pkg/rpm`.
508
+
509
+ * **package:srpm**
510
+
511
+ Use `rpmbuild` to create a source rpm of the project. Source rpm is staged
512
+ in `./pkg/srpm`.
513
+
514
+ * **package:tar**
515
+
516
+ Create a source tarball of the project. The tarball is staged in `./pkg`.
517
+
518
+ * **package:update**
519
+
520
+ Update the clone of the packaging repo by pulling from origin.
521
+
522
+ * **pl:build_from_params**
523
+
524
+ Invoke a build from a build parameters yaml file. The parameters file
525
+ should be created with `rake pl:write_build_params`. The settings in the
526
+ build parameters file will override all values contained in
527
+ `./ext/build_defaults.yaml` and `./ext/project_data.yaml`.
528
+
529
+ * **pl:deb**
530
+
531
+ Use pdebuild with cowbuilder to create a debian package and associated
532
+ source artifacts from the default "cow", currently Debian Squeeze i386.
533
+ Requires that pbuilder/cowbuilder be installed and set up with a Debian
534
+ Squeeze cow. See the
535
+ [puppetlabs-debbuilder](https://github.com/puppetlabs/puppetlabs-debbuilder)
536
+ module for an easy way to set up a host for building with cows. The deb and
537
+ source artifacts are staged in `./pkg/deb/squeeze`.
538
+
539
+ * **pl:deb_all***
540
+
541
+ The same as `rake pl:deb`, but a package is built for every cow listed in
542
+ `ext/build_defaults.yaml` on the line `cows:<cows>`. The packages and
543
+ associated source artifacts are staged in `./pkg/deb/$distribution`, where
544
+ $distribution is the Debian/Ubuntu codename of the cow that was used to
545
+ build the package, e.g. "wheezy" or "precise."
546
+
547
+ * **pl:ips**
548
+
549
+ Invoke package:ips, but do so after pl:fetch and pl:load_extras, which load
550
+ signing/certificate information. The resulting packages are signed. IPS
551
+ packages are staged in `./pkg/ips/pkgs`
552
+
553
+ * **pl:jenkins:deb**
554
+
555
+ Perform `pl:deb` by posting a jenkins build, as described above. Once the
556
+ build is complete, run `pl:jenkins:retrieve` to retrieve the built
557
+ packages.
558
+
559
+ * **pl:jenkins:deb_all**
560
+
561
+ Perform what is a effectively a `pl:deb_all` but in a different fashion.
562
+ `pl:deb_all` performs debian cow builds in serial with every cow listed in
563
+ ext/build_defaults.yaml. `pl:jenkins:deb_all` splits the cows listed, and
564
+ posts a separate `pl:jenkins:deb` job for every cow listed to the jenkins
565
+ server, allowing jenkins to parallelize the building of packages for every
566
+ cow. Execute `pl:jenkins:retrieve` to retrieve all packages.
567
+
568
+ * **pl:jenkins:deb_repo_configs**
569
+
570
+ On the distribution server generate a listing of all debian repositories
571
+ that exist for the current SHA/ref of HEAD of the project repository. Then
572
+ generate debian apt client configuration files for every existing
573
+ repository. The distribution server is a web server, so the client
574
+ configurations can be placed on a debian client in /etc/apt/sources.list.d/
575
+ and the client will be able to install the built packages via apt. Requires
576
+ SSH access to the distribution server.
577
+
578
+ * **pl:jenkins:deb_repos**
579
+
580
+ On the distribution server, generate debian apt repositories for every
581
+ distribution containing any packages that are stored that match the current
582
+ SHA/ref of HEAD of the project repository. Requires SSH access to the
583
+ distribution server.
584
+
585
+ * **pl:jenkins:dmg**
586
+
587
+ Perform `package:apple` by posting a jenkins build. Run
588
+ `pl:jenkins:retrieve` to retrieve the built packages.
589
+
590
+ * **pl:jenkins:gem**
591
+
592
+ Perform `package:gem` by posting a jenkins build. Run `pl:jenkins:retrieve`
593
+ to retrieve the built packages.
594
+
595
+ * **pl:jenkins:mock**
596
+
597
+ Perform `pl:mock` by posting a jenkins build. Run `pl:jenkins:retrieve` to
598
+ retrieve the built packages.
599
+
600
+ * **pl:jenkins:mock_all**
601
+
602
+ Perform what is effectively a `pl:mock_all` but in a different fashion.
603
+ `pl:mock_all` performs mock builds in serial with every mock listed in
604
+ ext/build_defaults.yaml. `pl:jenkins:mock_all` splits the mocks listed, and
605
+ posts a separate `pl:jenkins:mock` job for every mock to the jenkins
606
+ server, allowing jenkins to parallelize the building of packages for every
607
+ mock configuration. The mock build root is randomized by the packaging
608
+ repo, avoiding conflicts with existing builds of the same mock
609
+ configuration. To retrieve built packages, call `pl:jenkins:retrieve`.
610
+
611
+ * **pl:jenkins:post[uri]**
612
+
613
+ Post to the jenkins server as specified in the team build_extras.yaml file,
614
+ with the job uri specified.
615
+
616
+ * **pl:jenkins:retrieve[target]**
617
+
618
+ Retrieve packages stored on the distribution server that have been built
619
+ from the current SHA/ref of HEAD of the project repository. Optionally pass
620
+ [target] to override the default, which is to retrieve the contents of the
621
+ "artifacts" subdirectory. Other targets are "repos" and "shipped".
622
+
623
+ * **pl:jenkins:rpm_repo_configs**
624
+
625
+ On the distribution server generate a listing of all yum rpm package
626
+ repositories that exist for the current SHA/ref of HEAD of the project
627
+ repository. Then generate yum client configuration files for every existing
628
+ repository. The distribution server is a web server, so the client
629
+ configurations can be placed on a redhat client in /etc/yum.repos.d/ and
630
+ the client will be able to install the packages via yum install. Requires
631
+ SSH access to the distribution server.
632
+
633
+ * **pl:jenkins:rpm_repos**
634
+
635
+ On the distribution server, generate yum rpm repositories for every
636
+ distribution containing any packages that are stored that match the current
637
+ SHA/ref of HEAD of the project repository. Requires SSH access to the
638
+ distribution server. The yum repos are created in a "repos" subdirectory of
639
+ the standard builds location, e.g.
640
+ /opt/jenkins-builds/$project/${SHA|ref}/repos, using everything currently
641
+ in the "artifacts" subdirectory of the same location.
642
+
643
+ * **pl:jenkins:ship[target]**
644
+
645
+ Take the packages staged in pkg/ and ship them to locations partially
646
+ specified by data in the project build_extras.yaml file. The current
647
+ paradigm is to ship the files to a subdirectory of /opt/jenkins-builds on
648
+ the distribution server. The subdirectory is constructed with the project
649
+ and SHA or ref of HEAD of the project repository. That is, if project HEAD
650
+ is currently at the tag "1.2.3", then the directory that packages will be
651
+ shipped to is /opt/jenkins-builds/$project/1.2.3/. If HEAD is a git SHA,
652
+ then "1.2.3" will instead be that SHA. By default, all artifacts in pkg/
653
+ will be shipped to a "artifacts" subdirectory of the standard target. E.g.
654
+ /opt/jenkins-builds/$project/1.2.3/artifacts. When a final shipping occurs,
655
+ e.g. when shipping signed artifacts into production, a second subdirectory
656
+ is created - "shipped" - and all artifacts that are shipped to production
657
+ are also shipped here. This allows a historical archive of all shipped
658
+ artifacts.
659
+
660
+ * **pl:jenkins:sign_all**
661
+
662
+ Take all packages staged in pkg/ and sign them via the various signing
663
+ tasks. All signing occurs on the distribution server:
664
+ * create a git-bundle of the project and rsync it to the distribution
665
+ * server ssh to the distribution server and clone the git-bundle, and clone
666
+ * the packaging repository rsync the contents of the local pkg/ directory
667
+ * into the pkg/ directory of the remote git project ssh to the distribution
668
+ * server and execute the following rake tasks:
669
+ - pl:sign_tar
670
+ - pl:sign_rpms
671
+ - pl:sign_deb_changes
672
+ * rsync the remote pkg/ directory contents to the local pkg/ directory
673
+
674
+ * **pl:jenkins:tar**
675
+
676
+ Perform `package:tar` by posting a jenkins build. Run `pl:jenkins:retrieve` to
677
+ retrieve the built packages.
678
+
679
+ * **pl:jenkins:uber_build**
680
+
681
+ An aggregate of build tasks. These include `jenkins:deb_all`,
682
+ `pl:jenkins:mock_all`, `pl:jenkins:tar`, `pl:jenkins:dmg`, and `pl:jenkins:gem`. Each
683
+ task is a separate job that is posted to the jenkins build server,
684
+ separated by a 5 second sleep.
685
+
686
+ * **pl:jenkins:uber_ship**
687
+
688
+ An aggregate of retrieval, signing, and shipping tasks. Execute
689
+ `pl:jenkins:retrieve` to retrieve any packages on the distribution server
690
+ that were built from the SHA/ref of HEAD. Then `pl:jenkins:sign_all` to
691
+ sign all packages. Finally, `pl:uber_ship`, `pl:remote:freight`, and
692
+ `pl:remote:update_yum_repo`. `pl:jenkins:uber_build` combined with
693
+ `pl:jenkins:uber_ship` performs the entire build and release process for a
694
+ project.
695
+
696
+ * **pl:mock**
697
+
698
+ Use `mock` to build an rpm package using the default mock distribution,
699
+ Redhat Linux 5, i386. Requires that the `mock` package be installed. See
700
+ the
701
+ [puppetlabs-rpmbuilder](https://github.com/puppetlabs/puppetlabs-rpmbuilder)
702
+ module for an easy way to set up a host for building with mock. Resulting
703
+ rpm is staged in `./pkg/el/rpm/5/(products | devel)/(i386 | SRPMS)`. The
704
+ placement into the "products" or "devel" subdirectories is determined by
705
+ the name of the package. If the package has a Release Candidate version, it
706
+ is placed in "devel". Otherwise it is placed in "products". A Release
707
+ Candidate is determined by parsing the `git describe` string, and searching
708
+ for `rc` after the version numbers.
709
+
710
+ * **pl:mock_all**
711
+
712
+ The same as `rake pl:mock`, but a package is built for every mock listed in
713
+ `ext/build_defaults.yaml` on the line `mocks:<mocks>`. Packages are staged
714
+ in `./pkg/(el | fedora)/$version/(products | devel)/(i386 | x86_64 |
715
+ SRPMS)`. The subdirectories are dependent on the mock that is used. The
716
+ task assumes that the mock configurations are the standard Puppet Labs mock
717
+ configurations that are generated by the
718
+ [puppetlabs-rpmbuilder](https://github.com/puppetlabs/puppetlabs-rpmbuilder)
719
+ module.
720
+
721
+ * **pl:print_build_params**
722
+
723
+ Print all build parameters to STDOUT as they would be used in a package
724
+ build. This prints data that is loaded from `ext/build_defaults.yaml` and
725
+ `ext/project_data.yaml`, as well as whatever is overridden with environment
726
+ variables. Useful for debugging problems with parameter values.
727
+
728
+ * **pl:release_deb**
729
+
730
+ A composite task of `package:tar`, `pl:deb_all`, `pl:sign_deb_changes`, and
731
+ `pl:ship_debs`
732
+
733
+ * **pl:release_dmg**
734
+
735
+ A composite task of `package:apple`, and `pl:ship_dmg`
736
+
737
+ * **pl:release_gem**
738
+
739
+ A composite task of `package:gem`, and `pl:ship_gem`
740
+
741
+ * **pl:release_ips**
742
+
743
+ A composite task of `pl:ips`, and `pl:ship_ips`
744
+
745
+ * **pl:release_rpm**
746
+
747
+ A composite task of `pl:mock_all`, `pl:sign_rpms`, `pl:ship_rpms`, and
748
+ `pl:remote:update_yum_repo`
749
+
750
+ * **pl:release_tar**
751
+
752
+ A composes task of `package:tar`, `pl:sign_tar`, and `pl:ship_tar`
753
+
754
+ * **pl:remote:deb**
755
+
756
+ As described above, this is a remote task, which means that the task is
757
+ performed remotely on the debian build host as specified in team
758
+ build_data.yaml retrieved from github.com/puppetlabs/build-data. This task
759
+ performs a `pl:deb` remotely on the builder
760
+
761
+ * **pl:remote:deb_all**
762
+
763
+ Perform `pl:deb_all` on the remote debian build host as specified in the
764
+ team build_data.yaml file
765
+
766
+ * **pl:remote:dmg**
767
+
768
+
769
+ Perform `package:apple` on the remote Mac build host as specified in the
770
+ team build_data.yaml file
771
+
772
+ * **pl:remote:freight**
773
+
774
+ Performs an ssh call to the package server that calls a server-side rake
775
+ task. The rake task takes the debian packages that have (presumably) been
776
+ shipped via `pl:ship_debs` and invokes
777
+ [freight](https://github.com/rcrowley/freight) with them, which places them
778
+ in the apt repository.
779
+
780
+ * **pl:remote:ips**
781
+
782
+ Perform `pl:ips` on the remote IPS build host as specified in the team
783
+ build_data.yaml file
784
+
785
+ * **pl:remote:mock**
786
+
787
+ Perform `pl:mock` on the remote RPM build host as specified in the team
788
+ build_data.yaml file
789
+
790
+ * **pl:remote:mock_all**
791
+
792
+ Perform `pl:mock_all` on the remote RPM build host as specified in the team
793
+ build_data.yaml file
794
+
795
+ * **pl:remote:release_deb**
796
+
797
+ Perform `pl:release_deb` on the remote debian build host. The caveat is
798
+ that while performing a `pl:release:deb` locally will prompt you to confirm
799
+ shipping the resulting debian packages, `pl:remote:release_deb` overrides
800
+ this and just retrieves the packages, to be staged locally under pkg/deb.
801
+
802
+ * **pl:remote:release_rpm**
803
+
804
+ Perform `pl:release_rpm` on the remote RPM build host. The same caveat
805
+ applies as for `pl:remote:release_deb` - Packages aren't shipped into
806
+ production, but rather retrieved from the remote builder and staged locally
807
+ under pkg/el and pkg/fedora.
808
+
809
+ * **pl:remote:update_yum_repo**
810
+
811
+ As with `pl:remote:freight`, this task performs an ssh call to the yum RPM
812
+ package server, and invokes an existing server-side rake task. The task
813
+ iterates through the `el` and `fedora` directories of the yum repository
814
+ and re-creates package server metadata for rpms in the subdirectories.
815
+
816
+ * **pl:ship_debs**
817
+
818
+ Rsync pkg/deb/* to the "incoming" directory on the debian apt package
819
+ repository server. Note: this task does not place the packages into
820
+ production - it is more accurate to consider the packages "staged" on the
821
+ repository server rather than actually shipped. The `pl:remote:freight`
822
+ task takes the packages in the "incoming" directory and actually places
823
+ them in the apt server.
824
+
825
+ * **pl:ship_gem**
826
+
827
+ Takes the built gem in pkg/ and pushes it to rubygems.com. This task assumes
828
+ you have the appropriate rubygems.com access and config to push the gem.
829
+
830
+ * **pl:ship_ips**
831
+
832
+ Takes the IPS packages in pkg/ips/pkgs/ and rsyncs them to a holding
833
+ directory on a package download server. This is not a true IPS server yet,
834
+ but just a basic file server. Eventually the goal is to have a true IPS
835
+ package repository running.
836
+
837
+ * **pl:ship_rpms**
838
+
839
+ Rsyncs the contents of pkg/el and pkg/fedora into the yum repository
840
+ server. While these packages are available immediately for download by
841
+ browsing the yum server directories directly, the yum repodata metadata has
842
+ not been updated, and thus the packages are not available to yum clients.
843
+ The `pl:remote:update_yum_repo` task updates the metadata, after which the
844
+ packages will be available to yum clients.
845
+
846
+ * **pl:sign_rpms**
847
+
848
+ Sign the rpms staged locally under pkg/ with the gpg key user ID (e.g.
849
+ email) specified in ext/build_defaults.yaml as `gpg_name`. This value can
850
+ be overridden by passing GPG_NAME as an environment variable to the rake
851
+ task.
852
+
853
+ * **pl:sign_tar**
854
+
855
+ Use gpg to create a detached signature of the tarball. By default this uses
856
+ the gpg_key value specified in ext/build_defaults.yaml in the project. This
857
+ can be overridden by passing GPG_KEY as an environment variable to the rake
858
+ task.
859
+
860
+ * **pl:tag**
861
+
862
+ Create a signed, annotated git tag of the current repository. Requires TAG
863
+ be passed as an environment variable to the rake task, which is the value
864
+ that will be used as both the tag message and the name of the tag. The gpg
865
+ key that is used for signing is assumed from gpg_key in
866
+ ext/build_defaults.yaml. This can be overridden by passing GPG_KEY as an
867
+ environment variable to the rake task.
868
+
869
+ * **pl:uber_release**
870
+
871
+ A composite task that performs the following tasks:
872
+ `package:gem` (if build_gem is "true" in build_defaults.yaml)
873
+ `pl:remote:release_deb`
874
+ `pl:remote:release_rpm`
875
+ `pl:remote:dmg` (if build_dmg is "true" in build_defaults.yaml)
876
+ `package:tar`
877
+ `pl:sign_tar`
878
+ `pl:uber_ship`
879
+ `pl:remote:freight`
880
+ `pl:remote:update_yum_repo`
881
+ This is essentially a complete build from start to finish. Gem and tarball
882
+ are generated locally, and other packages (deb, rpm, dmg) are all created
883
+ remotely. Assumes ssh access and appropriate build tool access on all
884
+ respective build hosts.
885
+
886
+ * **pl:uber_ship**
887
+
888
+ A composite task that performs the following tasks:
889
+ `pl:ship_gem`
890
+ `pl:ship_rpms`
891
+ `pl:ship_debs`
892
+ `pl:ship_dmgs`
893
+ `pl:ship_tar`
894
+ `pl:jenkins:ship`
895
+ This is essentially a "ship all the things" task, but it is important to
896
+ note that it does not update either yum or apt repo metadata on these
897
+ respective servers - this has to be done via `pl:remote:update_yum_repo`
898
+ and `pl:remote:freight`.
899
+
900
+ * **pl:update_ips_repo**
901
+
902
+ Take the packages in pkg/ips/pkg and rsync them to the IPS repository
903
+ server specified in the build_extras.yaml file. Via ssh commands, call
904
+ pkgrecv, pkgrepo, svcadm on the IPS repository server. Via ssh, restart the
905
+ IPS repository service.
906
+
907
+ * **pl:write_build_params**
908
+
909
+ Generate a yaml file with all the build properties that have been loaded
910
+ from build_defaults.yaml, project_data.yaml, (optionally)
911
+ build_extras.yaml(s) via `pl:fetch`, and any environment variables. This
912
+ file can be used by the packaging repo as a single source of truth for
913
+ build data via `pl:build_from_params`. By default it is written to a
914
+ temporary location and its location is printed to STDOUT. To override the
915
+ destination, pass OUTPUT_DIR as a environment variable to the task. By
916
+ default, the name of the file will be either the git tag, if HEAD of the
917
+ project repository is a tag, or the git sha of HEAD.
918
+