vanagon 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +81 -37
- data/bin/build +1 -1
- data/lib/makefile.rb +8 -58
- data/lib/vanagon/component.rb +22 -8
- data/lib/vanagon/component/dsl.rb +7 -7
- data/lib/vanagon/component/rules.rb +7 -3
- data/lib/vanagon/component/source/local.rb +1 -1
- data/lib/vanagon/driver.rb +9 -3
- data/lib/vanagon/environment.rb +40 -29
- data/lib/vanagon/optparse.rb +1 -1
- data/lib/vanagon/platform.rb +40 -0
- data/lib/vanagon/platform/deb.rb +10 -0
- data/lib/vanagon/platform/dsl.rb +10 -12
- data/lib/vanagon/platform/rpm.rb +9 -0
- data/lib/vanagon/project.rb +9 -2
- data/lib/vanagon/project/dsl.rb +30 -9
- data/resources/Makefile.erb +3 -4
- data/resources/deb/rules.erb +4 -0
- data/resources/rpm/project.spec.erb +12 -1
- data/resources/windows/nuget/project.nuspec.erb +2 -2
- data/spec/lib/makefile_spec.rb +5 -5
- data/spec/lib/vanagon/component/dsl_spec.rb +9 -2
- data/spec/lib/vanagon/component/rules_spec.rb +12 -8
- data/spec/lib/vanagon/component/source/git_spec.rb +1 -1
- data/spec/lib/vanagon/component_spec.rb +36 -8
- data/spec/lib/vanagon/driver_spec.rb +3 -3
- data/spec/lib/vanagon/environment_spec.rb +10 -23
- data/spec/lib/vanagon/project/dsl_spec.rb +83 -0
- metadata +16 -17
- data/resources/metrics/profiling_shell.sh +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '07341460977d9693423374862c7a7793998b4008'
|
4
|
+
data.tar.gz: 2a4a0e66a4fb11bdaa96d1d7fb3aa36d7908c541
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f83beaff1911b965ff21bbaf64ab2087ae9cef078c77b6b5cf3050bde80d59843dbfacb0aef31feb6788241e450e255a06c0728708d3db2152d280bcfd360592
|
7
|
+
data.tar.gz: 370382929914b3cdb7dd16d350c66777e5ea0ccf228507c5c5e0e2961f23a18f11f4dd6649f6118f590ec4e14d3c91f9cb9d4dda61784785bb6a3f18d39211d9
|
data/README.md
CHANGED
@@ -1,21 +1,32 @@
|
|
1
1
|

|
2
|
-
The Vanagon Project
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
2
|
+
# The Vanagon Project
|
3
|
+
|
4
|
+
<!-- MarkdownTOC -->
|
5
|
+
|
6
|
+
- [What is Vanagon?](#what-is-vanagon)
|
7
|
+
- [Runtime Requirements](#runtime-requirements)
|
8
|
+
- [Local Host:](#local-host)
|
9
|
+
- [Remote Build Target:](#remote-build-target)
|
10
|
+
- [Configuration and Usage](#configuration-and-usage)
|
11
|
+
- [`build` usage](#build-usage)
|
12
|
+
- [`inspect` usage](#inspect-usage)
|
13
|
+
- [`devkit` usage](#devkit-usage)
|
14
|
+
- [Engines](#engines)
|
15
|
+
- [Amazon Ec2](#amazon-ec2)
|
16
|
+
- [Contributing](#contributing)
|
17
|
+
- [License](#license)
|
18
|
+
- [Overview](#overview)
|
19
|
+
- [Maintainers](#maintainers)
|
20
|
+
|
21
|
+
<!-- /MarkdownTOC -->
|
22
|
+
|
23
|
+
|
24
|
+
## What is Vanagon?
|
25
|
+
|
15
26
|
Vanagon is a tool to build a single package out of a project, which can itself
|
16
27
|
contain one or more components. This tooling is being used to develop the
|
17
28
|
puppet-agent package, which contains components such as openssl, ruby, and
|
18
|
-
augeas among others. For a simple example, please see the examples directory.
|
29
|
+
augeas among others. For a simple example, please see the project in the `examples/` directory.
|
19
30
|
|
20
31
|
Vanagon builds up a Makefile and packaging files (specfile for RPM,
|
21
32
|
control/rules/etc for DEB) and copies them to a remote host, where make can be
|
@@ -28,15 +39,37 @@ creates a master makefile for the project, and configures, builds, and installs
|
|
28
39
|
all components. The result is an environment where you can work on individual
|
29
40
|
components, then rebuild the project and test the installed artifacts.
|
30
41
|
|
31
|
-
Runtime Requirements
|
32
|
-
|
33
|
-
Vanagon is
|
34
|
-
|
35
|
-
|
36
|
-
|
42
|
+
## Runtime Requirements
|
43
|
+
|
44
|
+
Vanagon carries two sets of requirements: requirements for the local host where Vanagon is run, and for the remote target where compilation and packaging happens.
|
45
|
+
|
46
|
+
Also, Vanagon ships with a number of engines which may include additional optional dependencies if you wish to use them. These engines are currently considered experimental, and receive less attention than the `Hardware` or `vmpooler` engines do. If you find a bug in these engines, [please open a ticket](https://tickets.puppetlabs.com/browse/PA) and let us know.
|
47
|
+
|
48
|
+
### Local Host:
|
49
|
+
|
50
|
+
- [Ruby](https://www.ruby-lang.org/en/) (Ruby 2.1.x is the miniumum supported version)
|
51
|
+
- [fustigit](https://github.com/mckern/fustigit)
|
52
|
+
- [ruby-git](https://github.com/schacon/ruby-git)
|
53
|
+
- The command line tool `ssh` ([homepage](https://www.openssh.com/)) available on the local `${PATH}` (any modern version should suffice)
|
54
|
+
- The command line tool `rsync` ([homepage](https://rsync.samba.org/)) available on the local `${PATH}` (At least rsync 2.6.x)
|
55
|
+
- The command line tool `git` ([homepage](https://git-scm.com/)) available on the local `${PATH}` (Vanagon is tested against Git version 1.8.x but should work with any newer version)
|
56
|
+
|
57
|
+
#### Optional requirements
|
58
|
+
|
59
|
+
- [AWS SDK for Ruby](https://github.com/aws/aws-sdk-ruby), if you're using the EC2 engine
|
60
|
+
- [Docker](https://www.docker.com/community-edition), if you're using the Docker engine
|
61
|
+
|
62
|
+
### Remote Build Target:
|
63
|
+
|
64
|
+
**Note:** package installation & builder configuration for the remote target can be customized in the `Platform` configuration that defines target provisioning instructions.
|
65
|
+
|
66
|
+
- GNU Make ([homepage](https://www.gnu.org/software/make/)) (Vanagon specifically targets the feature set provided by [GNU Make 3.81](http://git.savannah.gnu.org/cgit/make.git/tree/NEWS?h=3.81&id=776d8b7bc2ff83f8ebf5d357ec89e3bbe6d83962) but newer versions are known to work -- older versions are specifically known to **not** work!)
|
67
|
+
- Bash ([homepage](https://www.gnu.org/software/bash/)) is required by the Makefiles that Vanagon generates
|
68
|
+
- An ssh server ([homepage](https://www.openssh.com/)) is required by most engines
|
69
|
+
- The command line tool `rsync` ([homepage](https://rsync.samba.org/)) (At least rsync 2.6.x)
|
70
|
+
|
71
|
+
## Configuration and Usage
|
37
72
|
|
38
|
-
Configuration and Usage
|
39
|
-
---
|
40
73
|
Vanagon won't be much use without a project to build. Beyond that, you must
|
41
74
|
define any platforms you want to build for. Vanagon ships with some simple
|
42
75
|
binaries to use, but the one you probably care about is named 'build'.
|
@@ -44,7 +77,6 @@ binaries to use, but the one you probably care about is named 'build'.
|
|
44
77
|
### `build` usage
|
45
78
|
The build command has positional arguments and position independent flags.
|
46
79
|
|
47
|
-
|
48
80
|
#### Arguments (position dependent)
|
49
81
|
|
50
82
|
##### project name
|
@@ -57,7 +89,7 @@ The name of the target platform to build `<project_name>` against; a file named
|
|
57
89
|
directory. This can also be a comma separated list of platforms such as `platform1,platform2`;
|
58
90
|
note that there are no spaces after the comma.
|
59
91
|
|
60
|
-
##### target host
|
92
|
+
##### target host <optional>
|
61
93
|
Target host is an optional argument to override the host selection. Instead of using
|
62
94
|
a random VM collected from the pooler (Vanagon's default build engine), the build will
|
63
95
|
attempt connect to the target host over SSH as the `root` user.
|
@@ -70,13 +102,15 @@ than platforms, the extra platforms will be ignored.
|
|
70
102
|
|
71
103
|
Build machines should be cleaned between builds.
|
72
104
|
|
73
|
-
#### Flagged arguments
|
105
|
+
#### Flagged arguments
|
106
|
+
|
107
|
+
**Note:** command flags can be used anywhere in the command.
|
74
108
|
|
75
109
|
##### -w DIR, --workdir DIR
|
76
110
|
Specifies a directory on the local host where the sources should be placed and builds performed.
|
77
111
|
Defaults to a temporary directory created with Ruby's `Dir.mktmpdir` method.
|
78
112
|
|
79
|
-
##### --
|
113
|
+
##### -r DIR, --remote-workdir DIR
|
80
114
|
Explicitly specify a directory on the remote target to place sources and perform
|
81
115
|
builds. Components can then be rebuilt manually on the build host for faster iteration. Sources may not be correctly updated if this directory already exists.
|
82
116
|
Defaults to a temporary directory created by running `mktemp -d` on the remote target.
|
@@ -94,15 +128,17 @@ Currently supported engines are:
|
|
94
128
|
* `hardware` - Build on a specific taget and lock it in redis
|
95
129
|
* `ec2` - Build on a specific AWS instance.
|
96
130
|
|
97
|
-
#### Flags
|
131
|
+
#### Flags
|
132
|
+
|
133
|
+
**Note:** command flags can be used anywhere in the command.
|
98
134
|
|
99
135
|
##### -p, --preserve
|
100
136
|
Indicates that the host used for building the project should be left intact
|
101
137
|
after the build instead of destroyed. The host is usually destroyed after a
|
102
138
|
successful build, or left after a failed build.
|
103
139
|
|
104
|
-
##### -v, --verbose
|
105
|
-
|
140
|
+
##### -v, --verbose
|
141
|
+
(Reserved for future implementation) Will increase the verbosity of output, when implemented.
|
106
142
|
|
107
143
|
##### -h, --help
|
108
144
|
Display command-line help.
|
@@ -172,13 +208,15 @@ directory.
|
|
172
208
|
|
173
209
|
Platform can also be a comma separated list of platforms such as platform1,platform2.
|
174
210
|
|
175
|
-
#### Flagged arguments
|
211
|
+
#### Flagged arguments
|
212
|
+
|
213
|
+
**Note:** command flags can be used anywhere in the command.
|
176
214
|
|
177
215
|
##### -w DIR, --workdir DIR
|
178
216
|
Specifies a directory where the sources should be placed and builds performed.
|
179
217
|
Defaults to a temporary directory created with Ruby's Dir.mktmpdir.
|
180
218
|
|
181
|
-
##### -c DIR, --configdir DIR
|
219
|
+
##### -c DIR, --configdir DIR <optional>
|
182
220
|
Specifies where project configuration is found. Defaults to $pwd/configs.
|
183
221
|
|
184
222
|
##### -e ENGINE, --engine ENGINE
|
@@ -188,7 +226,9 @@ rendered -- the `inspect` command performs no compilation.
|
|
188
226
|
|
189
227
|
Supported engines are the same as the `build` command.
|
190
228
|
|
191
|
-
#### Flags
|
229
|
+
#### Flags
|
230
|
+
|
231
|
+
**Note:** command flags can be used anywhere in the command.
|
192
232
|
|
193
233
|
##### -v, --verbose (not yet implemented)
|
194
234
|
Increase verbosity of output.
|
@@ -223,20 +263,24 @@ As in `build` arguments.
|
|
223
263
|
##### platform name
|
224
264
|
As in `build` arguments.
|
225
265
|
|
226
|
-
##### component names
|
266
|
+
##### component names <optional>
|
227
267
|
Specifies specific components that should be built. If components are not
|
228
268
|
specified, then all components in the project will be built. If components
|
229
269
|
are specified as arguments, then any in the project that aren't specified
|
230
270
|
as arguments will be retrieved from packages rather than built from source.
|
231
271
|
|
232
|
-
#### Flagged arguments
|
272
|
+
#### Flagged arguments
|
273
|
+
|
274
|
+
**Note:** command flags can be used anywhere in the command.
|
233
275
|
|
234
276
|
Supports all flagged arguments from the `build` command.
|
235
277
|
|
236
278
|
##### -t HOST, --target HOST
|
237
279
|
As in the `build` target host optional argument.
|
238
280
|
|
239
|
-
#### Flags
|
281
|
+
#### Flags
|
282
|
+
|
283
|
+
**Note:** command flags can be used anywhere in the command.
|
240
284
|
|
241
285
|
##### -h, --help
|
242
286
|
Display command-line help.
|
@@ -248,7 +292,7 @@ Engines
|
|
248
292
|
|
249
293
|
### Amazon Ec2
|
250
294
|
|
251
|
-
Note: If you have the `aws_ami` setup
|
295
|
+
Note: If you have the `aws_ami` setup Vanagon will default to the ec2 engine.
|
252
296
|
|
253
297
|
To use the ec2 engine you should have your credentials set either via your `~/.aws/credentials` or environment variables.
|
254
298
|
After this you can setup your `configs/platforms/<platform>.rb` to use your
|
@@ -294,7 +338,7 @@ If I wanted to build it for debian wheezy, I would define a platform called
|
|
294
338
|
wheezy and build my project against it.
|
295
339
|
|
296
340
|
For more detailed examples of the DSLs available, please see the
|
297
|
-
[examples](https://github.com/puppetlabs/vanagon/tree/master/examples) directory and the YARD documentation for
|
341
|
+
[examples](https://github.com/puppetlabs/vanagon/tree/master/examples) directory and the YARD documentation for Vanagon.
|
298
342
|
|
299
343
|
## Maintainers
|
300
344
|
See MAINTAINERS file.
|
data/bin/build
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
load File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "vanagon.rb"))
|
3
3
|
|
4
4
|
optparse = Vanagon::OptParse.new("#{File.basename(__FILE__)} <project-name> <platform-name> [<target>] [options]",
|
5
|
-
[:workdir, :configdir, :engine, :preserve, :verbose, :skipcheck, :only_build, :
|
5
|
+
[:workdir, :configdir, :engine, :preserve, :verbose, :skipcheck, :only_build, :"remote-workdir"])
|
6
6
|
options = optparse.parse! ARGV
|
7
7
|
|
8
8
|
project = ARGV[0]
|
data/lib/makefile.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'vanagon/environment'
|
2
|
-
|
3
1
|
class Makefile
|
4
2
|
# The Rule class defines a single Makefile rule.
|
5
3
|
#
|
@@ -13,11 +11,6 @@ class Makefile
|
|
13
11
|
# @return [Array<String>] A list of dependencies that this rule depends on.
|
14
12
|
attr_accessor :dependencies
|
15
13
|
|
16
|
-
# @!attribute [rw] environment
|
17
|
-
# @return [Array<String>] A list of environment variables that this rule
|
18
|
-
# will export
|
19
|
-
attr_accessor :environment
|
20
|
-
|
21
14
|
# @!attribute [rw] recipe
|
22
15
|
# @return [Array<String>] A list of commands to execute upon invocation of this rule.
|
23
16
|
attr_accessor :recipe
|
@@ -43,10 +36,9 @@ class Makefile
|
|
43
36
|
# "make cpplint",
|
44
37
|
# ]
|
45
38
|
# end
|
46
|
-
def initialize(target, dependencies: [],
|
39
|
+
def initialize(target, dependencies: [], recipe: [], &block)
|
47
40
|
@target = target
|
48
41
|
@dependencies = dependencies
|
49
|
-
@environment = environment
|
50
42
|
@recipe = recipe
|
51
43
|
|
52
44
|
yield(self) if block
|
@@ -65,25 +57,11 @@ class Makefile
|
|
65
57
|
["#{target}:", dependencies].flatten.compact.join("\s")
|
66
58
|
end
|
67
59
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
target_name, _, rule = target.rpartition('-')
|
74
|
-
[target_name.tr('.', ''), rule]
|
75
|
-
.select { |s| !(s.nil? || s.empty?) }
|
76
|
-
.join('.')
|
77
|
-
end
|
78
|
-
|
79
|
-
def tokenized_environment_variable
|
80
|
-
"#{target}: export VANAGON_TARGET := #{tokenize_target_name}"
|
81
|
-
end
|
82
|
-
|
83
|
-
def environment_variables
|
84
|
-
environment.map { |k, v| "#{k} := #{v}" }.map do |env|
|
85
|
-
"#{target}: export #{env}"
|
86
|
-
end
|
60
|
+
def compounded_recipe
|
61
|
+
Array(recipe)
|
62
|
+
.compact
|
63
|
+
.map { |line| "\t" + line.gsub("\n", "\n\t") + "\n" }
|
64
|
+
.join
|
87
65
|
end
|
88
66
|
|
89
67
|
# Format this rule as a Makefile rule.
|
@@ -92,37 +70,9 @@ class Makefile
|
|
92
70
|
# newline to ensure that the recipe is parsed as part of a single makefile rule.
|
93
71
|
#
|
94
72
|
# @return [String]
|
95
|
-
def format
|
96
|
-
|
97
|
-
# the rule around that.
|
98
|
-
t = [base_target]
|
99
|
-
|
100
|
-
# prepend an environment variable that can be used inside a
|
101
|
-
# given Make rule/target. We have to do it this way instead of
|
102
|
-
# appending it to #environment because for reasons that I cannot
|
103
|
-
# work out, the "sane" way results in previous/incorrect names
|
104
|
-
# being used and objects being recycled. My working theory is
|
105
|
-
# a corner case between metaprogrammed methods in Component::Rules,
|
106
|
-
# and Ruby's preference for pass-by-reference.
|
107
|
-
# Ryan McKern 2017-02-02
|
108
|
-
t.unshift tokenized_environment_variable
|
109
|
-
|
110
|
-
# prepend any environment variables to the existing target,
|
111
|
-
# using the target prefix to identify them as such. they should
|
112
|
-
# end up ahead of the dependencies and the build recipe.
|
113
|
-
environment_variables.each do |env|
|
114
|
-
t.unshift env
|
115
|
-
end
|
116
|
-
|
117
|
-
# finally, append the build recipe after the base target condition.
|
118
|
-
# also, here's a fun edge case: if one were to call #squeeze on
|
119
|
-
# the iterator 'line', basically all of the phony make tasks that
|
120
|
-
# `touch` a file just disapear. Fragility ++.
|
121
|
-
# - Ryan McKern 2017-02-02
|
122
|
-
t.push recipe.compact.map { |line| "\t" + line.gsub("\n", "\n\t") + "\n" }.join
|
123
|
-
t.join("\n")
|
73
|
+
def format
|
74
|
+
[base_target, compounded_recipe].flatten.join("\n")
|
124
75
|
end
|
125
|
-
|
126
76
|
alias to_s format
|
127
77
|
end
|
128
78
|
end
|
data/lib/vanagon/component.rb
CHANGED
@@ -29,7 +29,8 @@ class Vanagon
|
|
29
29
|
# that they were cloned to. For the outlying flat files, it'll
|
30
30
|
# end up being defined explicitly as the string './'
|
31
31
|
attr_accessor :dirname
|
32
|
-
#
|
32
|
+
# The specific tools or command line invocations that
|
33
|
+
# should be used to extract a given component's sources
|
33
34
|
attr_accessor :extract_with
|
34
35
|
# how should this component be configured?
|
35
36
|
attr_accessor :configure
|
@@ -190,7 +191,7 @@ class Vanagon
|
|
190
191
|
end
|
191
192
|
|
192
193
|
# Fetches the primary source for the component. As a side effect, also sets
|
193
|
-
#
|
194
|
+
# @extract_with, @dirname and @version for the component for use in the
|
194
195
|
# makefile template
|
195
196
|
#
|
196
197
|
# @param workdir [String] working directory to put the source into
|
@@ -200,7 +201,8 @@ class Vanagon
|
|
200
201
|
@source = Vanagon::Component::Source.source(url, opts)
|
201
202
|
source.fetch
|
202
203
|
source.verify
|
203
|
-
|
204
|
+
extract_with << source.extract(platform.tar) if source.respond_to? :extract
|
205
|
+
|
204
206
|
@cleanup_source = source.cleanup if source.respond_to?(:cleanup)
|
205
207
|
@dirname = source.dirname
|
206
208
|
|
@@ -215,7 +217,7 @@ class Vanagon
|
|
215
217
|
@dirname = './'
|
216
218
|
|
217
219
|
# If there is no source, there is nothing to do to extract
|
218
|
-
|
220
|
+
extract_with << ': no source, so nothing to extract'
|
219
221
|
end
|
220
222
|
end
|
221
223
|
|
@@ -231,16 +233,25 @@ class Vanagon
|
|
231
233
|
# Fetches secondary sources for the component. These are just dumped into the workdir currently.
|
232
234
|
#
|
233
235
|
# @param workdir [String] working directory to put the source into
|
234
|
-
def get_sources(workdir)
|
236
|
+
def get_sources(workdir) # rubocop:disable Metrics/AbcSize
|
235
237
|
sources.each do |source|
|
236
238
|
src = Vanagon::Component::Source.source(
|
237
239
|
source.url, workdir: workdir, ref: source.ref, sum: source.sum
|
238
240
|
)
|
239
241
|
src.fetch
|
240
242
|
src.verify
|
243
|
+
# set src.file to only be populated with the basename instead of entire file path
|
244
|
+
src.file = File.basename(src.url)
|
245
|
+
extract_with << src.extract(platform.tar) if src.respond_to? :extract
|
241
246
|
end
|
242
247
|
end
|
243
248
|
|
249
|
+
# @return [Array] the specific tool or command line invocations that
|
250
|
+
# should be used to extract a given component's primary source
|
251
|
+
def extract_with
|
252
|
+
@extract_with ||= []
|
253
|
+
end
|
254
|
+
|
244
255
|
# Fetches patches if any are provided for the project.
|
245
256
|
#
|
246
257
|
# @param workdir [String] working directory to put the patches into
|
@@ -265,14 +276,17 @@ class Vanagon
|
|
265
276
|
The #get_environment method will be removed by Vanagon 1.0.0.
|
266
277
|
eos
|
267
278
|
|
268
|
-
if
|
279
|
+
if environment.empty?
|
269
280
|
": no environment variables defined"
|
270
281
|
else
|
271
|
-
|
272
|
-
"export #{env.join(' ')}"
|
282
|
+
environment_variables
|
273
283
|
end
|
274
284
|
end
|
275
285
|
|
286
|
+
def environment_variables
|
287
|
+
environment.map { |key, value| %(export #{key}="#{value}") }
|
288
|
+
end
|
289
|
+
|
276
290
|
def rules(project, platform)
|
277
291
|
Vanagon::Component::Rules.new(self, project, platform)
|
278
292
|
end
|
@@ -230,14 +230,14 @@ class Vanagon
|
|
230
230
|
# upgrade if it has been modified
|
231
231
|
#
|
232
232
|
# @param file [String] name of the configfile
|
233
|
-
def configfile(file)
|
233
|
+
def configfile(file, mode: nil, owner: nil, group: nil)
|
234
234
|
# I AM SO SORRY
|
235
235
|
@component.delete_file file
|
236
236
|
if @component.platform.name =~ /solaris-10|osx/
|
237
237
|
@component.install << "mv '#{file}' '#{file}.pristine'"
|
238
|
-
@component.add_file Vanagon::Common::Pathname.configfile("#{file}.pristine")
|
238
|
+
@component.add_file Vanagon::Common::Pathname.configfile("#{file}.pristine", mode: mode, owner: owner, group: group)
|
239
239
|
else
|
240
|
-
@component.add_file Vanagon::Common::Pathname.configfile(file)
|
240
|
+
@component.add_file Vanagon::Common::Pathname.configfile(file, mode: mode, owner: owner, group: group)
|
241
241
|
end
|
242
242
|
end
|
243
243
|
|
@@ -245,9 +245,9 @@ class Vanagon
|
|
245
245
|
#
|
246
246
|
# @param source [String] path to the configfile to copy
|
247
247
|
# @param target [String] path to the desired target of the configfile
|
248
|
-
def install_configfile(source, target)
|
249
|
-
install_file(source, target)
|
250
|
-
configfile(target)
|
248
|
+
def install_configfile(source, target, mode: '0644', owner: nil, group: nil)
|
249
|
+
install_file(source, target, mode: mode, owner: owner, group: group)
|
250
|
+
configfile(target, mode: mode, owner: owner, group: group)
|
251
251
|
end
|
252
252
|
|
253
253
|
# link will add a command to the install to create a symlink from source to target
|
@@ -350,7 +350,7 @@ class Vanagon
|
|
350
350
|
eos
|
351
351
|
return @component.environment.merge!(env.first)
|
352
352
|
elsif env.size == 2
|
353
|
-
return @component.environment[env.
|
353
|
+
return @component.environment[env.first] = env.last
|
354
354
|
end
|
355
355
|
raise ArgumentError, <<-eos.undent
|
356
356
|
component DSL method #environment only accepts a single Hash (deprecated)
|