Version information
This version is compatible with:
- Puppet Enterprise 2019.8.x, 2019.7.x, 2019.5.x, 2019.4.x, 2019.3.x, 2019.2.x, 2019.1.x, 2019.0.x, 2018.1.x, 2017.3.x, 2017.2.x, 2016.4.x
- Puppet >= 4.10.0 < 7.0.0
- , , , , , , , , , ,
Start using this module
Add this module to your Puppetfile:
mod 'levinine-dockerfile', '2.0.0'
Learn more about managing modules with a PuppetfileDocumentation
Dockerfile
Table of Contents
Description
The Puppet dockerfile module manage content of dockerfile, exposing instructions as key/values while supporting multistage builds. All dockerfile instructions are supported:
- ADD
- ARG
- CMD
- COPY
- ENTRYPOINT
- ENV
- EXPOSE
- FROM
- HEALTHCHECK
- LABEL
- ONBUILD
- RUN
- SHELL
- STOPSIGNAL
- USER
- VOLUME
- WORKDIR
Setup
To install Dockerfile module use puppet module install command:
puppet module install levinine-dockerfile
Usage
Config
In order to provide configuration for dockerfile use the dockerfile::config
defined type in the manifest file:
dockerfile::config { 'Dockerfile':
ensure => 'present',
home => '/var/lib/jenkins/Docker-Build',
type => 'multistage',
conf => {},
}
Config types
Multistage
Multistage config type Hiera example:
dockerfile::configs:
Multistage:
type: multistage
home: /var/lib/jenkins/Docker-Build
conf:
Header:
comment:
- Starting comment 1
- Starting comment 2
Stage1:
ensure: present
comment: Build some docker image
arg:
BUILD_NUM: latest
SOMEARG1: ''
SOMEARG2: 5
from:
platform: linux/amd64
image: centos:7.6.1810
as: TEST
env:
NUM: $BUILD_NUM
SOMEENV: test
label:
'com.levi9.cluster': cluster
'com.levi9.role': role
expose: 80/tcp
copy:
from: 0
source:
- /tmp with space
- /test
destination: /home
add:
chown: '0:0'
source: /tmp
destination: /home
volume: test
cmd:
- /bin/sh
- -c
- top
entrypoint:
- /bin/sh
- -c
- top
user: '0:0'
run:
- apt-get update
- apt-get clean
workdir: /tmp
stopsignal: signal
shell:
- powershell
- noprofile
order: '10'
Stage2:
ensure: present
from:
image: centos:7.6.1810
env:
NUM: $BUILD_NUM
SOMEENV: test
label:
'com.levi9.cluster': cluster
'com.levi9.role': role
expose: 80/tcp
copy:
from: 0
chown: '0:0'
source:
- /tmp
- /test
destination: /home
add:
chown: '0:0'
source: /tmp
destination: /home
volume: test
cmd:
- /bin/sh
- -c
- top
entrypoint:
- /bin/sh
- -c
- top
user: '0:0'
run:
- apt-get update
- apt-get clean
workdir: /tmp
stopsignal: signal
shell:
- powershell
- noprofile
healthcheck:
interval: 30s
timeout: 30s
start-period: 0s
retries: 3
cmd: curl http://localhost
order: '20'
Multiple COPY/RUN instructions Hiera example:
dockerfile::configs:
Multistage:
type: multistage
home: /var/lib/jenkins/Docker-Build
conf:
Stage1:
from:
image: centos:7.6.1810
as: TEST
Copy1:
comment: Copy some files
copy:
from: TEST
source:
- /tmp1
destination: /home
Run1:
ensure: absent
run:
- apt-get update
- apt-get clean
Copy2:
onbuild: true
copy:
source:
- /tmp2
destination: /home
Stage2:
comment: Expose some ports
expose:
- 80/tcp
- 8080/tcp
Plain
Plain config type Hiera example:
dockerfile::configs:
Plain:
type: plain
home: /var/lib/jenkins/Docker-Build2
conf: |
FROM ubuntu:18.04 as BUILD
ARG BUILD_NUM="latest"
ENV PUPPET_AGENT_VERSION="5.5.10" CERTNAME=$BUILD_NUM CODENAME="bionic"
LABEL BUILD=intermediate
RUN apt-get update && \
apt-get install --no-install-recommends -y lsb-release wget ca-certificates && \
wget https://apt.puppetlabs.com/puppet5-release-"$CODENAME".deb && \
dpkg -i puppet5-release-"$CODENAME".deb && \
rm puppet5-release-"$CODENAME".deb && \
apt-get update && \
apt-get install --no-install-recommends -y puppet-agent="$PUPPET_AGENT_VERSION"-1"$CODENAME" && \
apt-get remove --purge -y wget && \
apt-get autoremove -y && \
apt-get clean && \
mkdir -p /etc/puppetlabs/facter/facts.d/ && \
rm -rf /var/lib/apt/lists/*
RUN apt-get update && \
/opt/puppetlabs/bin/puppet agent --verbose --onetime --no-daemonize --summarize && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
FROM ubuntu:18.04
COPY --from=BUILD /tmp/mydir/myfile .
Reference
See Reference.
Limitations
This module depends on Puppetlabs Concat module, it should be working on all operating systems supported by this module.
Development
Use Report Issues link to report any issues.
Contributors
- Mladen Pavlik
- Dragan Nastic
- Karolj Kocmaros
- Marko Stojanovic
Reference
Table of Contents
Classes
dockerfile
: Manage content of Dockerfiles.
Defined types
dockerfile::config
: A define that manages a Dockerfile configuration.dockerfile::config::multistage
: Manage Dockerfile using concat resource. Supports multistages.dockerfile::config::plain
: Heredoc passthrough from $conf variable to Dockerfile.dockerfile::config::stage
: Single stage configuration for docker::config::multistage. Private defined type.
Functions
order_dockerfile_stages
: Increments order attribute in each stage by increment of 10 starting from '10' if not already defined. Stages are prefixed with prefix in ord
Classes
dockerfile
Manage content of Dockerfiles.
Parameters
The following parameters are available in the dockerfile
class.
configs
Data type: Any
Configurations for Dockerfiles. Creates dockerfile::config resources.
Default value: {}
Defined types
dockerfile::config
A define that manages a Dockerfile configuration.
Parameters
The following parameters are available in the dockerfile::config
defined type.
home
Data type: String
Directory in which Dockerfile is located.
dockerfile_name
Data type: String
The name of the managed dockerfile
Default value: 'Dockerfile'
conf
Data type: Variant[String, Hash]
Configuration for Dockerfile. Depends on type.
Default value: {}
type
Data type: String
Type of Dockerfile configuration.
Default value: 'multistage'
ensure
Data type: String
Manage existance of Dockerfile.
Default value: 'present'
owner
Data type: Optional[Variant[String, Integer]]
Specifies the owner of the destination file.
Default value: undef
group
Data type: Optional[Variant[String, Integer]]
Specifies a permissions group for the destination file.
Default value: undef
mode
Data type: Optional[Variant[String, Integer]]
Specifies the permissions mode of the destination file.
Default value: undef
dockerfile::config::multistage
Manage Dockerfile using concat resource. Supports multistages.
Parameters
The following parameters are available in the dockerfile::config::multistage
defined type.
dockerfile
Data type: String
Full path to Dockerfile to manage.
conf
Data type: Hash
Configuration in key/value form. Keys are mapped to names of dockerfile::config::stage resources.
ensure
Data type: String
Manage existance of Dockerfile.
Default value: 'present'
owner
Data type: Optional[Variant[String, Integer]]
Specifies the owner of the destination file.
Default value: undef
group
Data type: Optional[Variant[String, Integer]]
Specifies a permissions group for the destination file.
Default value: undef
mode
Data type: Optional[Variant[String, Integer]]
Specifies the permissions mode of the destination file.
Default value: undef
dockerfile::config::plain
Heredoc passthrough from $conf variable to Dockerfile.
Parameters
The following parameters are available in the dockerfile::config::plain
defined type.
dockerfile
Data type: String
Full path to Dockerfile to manage.
conf
Data type: String
Configuration in text form.
ensure
Data type: String
Manage existance of Dockerfile.
Default value: 'present'
owner
Data type: Optional[Variant[String, Integer]]
Specifies the owner of the destination file.
Default value: undef
group
Data type: Optional[Variant[String, Integer]]
Specifies a permissions group for the destination file.
Default value: undef
mode
Data type: Optional[Variant[String, Integer]]
Specifies the permissions mode of the destination file.
Default value: undef
dockerfile::config::stage
Single stage configuration for docker::config::multistage. Private defined type.
Parameters
The following parameters are available in the dockerfile::config::stage
defined type.
dockerfile
Data type: String
Target of concat::fragment.
ensure
Data type: String
Should stage exist in Dockerfile.
Default value: 'present'
comment
Data type: Variant[Array[String], String, Undef]
Use to add comment to stage.
Default value: undef
arg
Data type: Variant[Hash, Undef]
ARG instruction of Dockerfile.
Default value: undef
from
Data type: Variant[Hash, Undef]
FROM instruction of Dockerfile.
Default value: undef
copy
Data type: Variant[Hash, Undef]
COPY instruction of Dockerfile.
Default value: undef
add
Data type: Variant[Hash, Undef]
ADD instruction of Dockerfile.
Default value: undef
env
Data type: Variant[Hash, Undef]
ENV instruction of Dockerfile.
Default value: undef
expose
Data type: Variant[Array[Variant[String, Integer]], String, Integer, Undef]
EXPOSE instruction of Dockerfile.
Default value: undef
label
Data type: Variant[Hash, Undef]
LABEL instruction of Dockerfile.
Default value: undef
stopsignal
Data type: Variant[String, Undef]
STOPSIGNAL instruction of Dockerfile.
Default value: undef
user
Data type: Variant[String, Undef]
USER instruction of Dockerfile.
Default value: undef
volume
Data type: Variant[Array, String, Undef]
VOLUME instruction of Dockerfile.
Default value: undef
workdir
Data type: Variant[String, Undef]
WORKDIR instruction of Dockerfile.
Default value: undef
healthcheck
Data type: Variant[String, Hash, Undef]
HEALTHCHECK instruction of Dockerfile.
Default value: undef
cmd
Data type: Variant[Array, Undef]
CMD instruction of Dockerfile.
Default value: undef
entrypoint
Data type: Variant[Array, Undef]
ENTRYPOINT instruction of Dockerfile.
Default value: undef
shell
Data type: Variant[Array, Undef]
SHELL instruction of Dockerfile.
Default value: undef
run
Data type: Variant[Array, String, Undef]
RUN instruction of Dockerfile.
Default value: undef
onbuild
Data type: Boolean
All instructions in this stage will be prefixed with ONBUILD.
Default value: false
pre
Data type: Hash
Default value: {}
post
Data type: Hash
Default value: {}
order
Data type: Variant[String, Undef]
Default value: undef
Functions
order_dockerfile_stages
Type: Ruby 4.x API
Increments order attribute in each stage by increment of 10 starting from '10' if not already defined. Stages are prefixed with prefix in order to avoid duplicate declarations.
Examples
Calling the function
order_dockerfile_stages({
Stage1 => {},
Stage2 => {},
Stage3 => {
order => '15'
}
},
'prefix-'
)
will return
{
prefix-Stage1 => {
order => '10'
},
prefix-Stage2 => {
order => '20'
},
prefix-Stage3 => {
order => '15'
}
}
order_dockerfile_stages(Hash $hash, String $prefix)
Increments order attribute in each stage by increment of 10 starting from '10' if not already defined. Stages are prefixed with prefix in order to avoid duplicate declarations.
Returns: Hash
Transformed hash with added order attributes and prefixed keys
Examples
Calling the function
order_dockerfile_stages({
Stage1 => {},
Stage2 => {},
Stage3 => {
order => '15'
}
},
'prefix-'
)
will return
{
prefix-Stage1 => {
order => '10'
},
prefix-Stage2 => {
order => '20'
},
prefix-Stage3 => {
order => '15'
}
}
hash
Data type: Hash
Multistage hash for ordering.
prefix
Data type: String
Prefix for hash keys.
Version 2.0.0
Implemented acceptance tests with litmus
Removed warnings when using empty function
Version 1.6.0
Added support for comments in stages
Version 1.5.1
Added support for platform flag in FROM instruction
Version 1.5.0
Added support for ONBUILD instruction
Version 1.4.1
EXPOSE parameter now accepts array
Version 1.4.0
Supported chown option in COPY instruction
Removed dependency on stdlib
Version 1.3.1
Make stages ensurable
Version 1.3.0
Manage permissions of Dockerfile
Version 1.2.1
Updated documentation
Version 1.2.0
Implemented persistent ordering for multistages
Version 1.1.0
Added creating of resources from init.pp
Version 1.0.0
Initial Version
Dependencies
- puppetlabs/concat (>= 5.1.0 <= 6.2.0)
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.