promotion 1.1.0 → 1.2.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.
- data/CHANGELOG +12 -8
- data/README +19 -3
- data/lib/promotion/erb/profile.erb +1 -1
- data/lib/promotion/install.rb +65 -0
- metadata +10 -8
- data/deploy.xml +0 -35
- data/ext/promotion/extconf.rb +0 -25
data/CHANGELOG
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
-
Version 1.
|
2
|
-
|
3
|
-
|
1
|
+
== Version 1.2.0
|
2
|
+
- Make Promotion a better gem citizen by making the installation of executables
|
3
|
+
an explicit command, as shown in the post-installation message.
|
4
4
|
|
5
|
-
Version 1.0
|
6
|
-
|
5
|
+
=== Version 1.1.0
|
6
|
+
- Added dependency on log4r.
|
7
|
+
- Fixed several broken dependencies caused by converting to a gem.
|
7
8
|
|
8
|
-
Version 1.0.
|
9
|
-
|
10
|
-
|
9
|
+
=== Version 1.0.9
|
10
|
+
- Minor documentation fixes.
|
11
|
+
|
12
|
+
=== Version 1.0.8
|
13
|
+
- Added extension to install executables: promote, evolve, devolve.
|
14
|
+
- Added mkdeploy executable to create a template deployment descriptor.
|
data/README
CHANGED
@@ -49,7 +49,10 @@ files that need to be adjusted to enable an application to startup or run proper
|
|
49
49
|
- /var/cron/tabs/*
|
50
50
|
|
51
51
|
Promotion generates these files based on the set of all of the deployment descriptors it finds
|
52
|
-
in the staging area.
|
52
|
+
in the staging area. It will preserve the original contents of the file, and append generated
|
53
|
+
contents after the following special demarcation line:
|
54
|
+
#---promotion---
|
55
|
+
This respects the need for an administrator to add custom contents (above the line).
|
53
56
|
|
54
57
|
An important aspect is that a deployment is *idempotent* - you can do it as many
|
55
58
|
times as you like and the result will be the same. This means its safe to make a
|
@@ -68,8 +71,17 @@ to suit your system's paths.
|
|
68
71
|
|
69
72
|
DO NOT USE ON A PRODUCTION SYSTEM without rigorous testing in a virtual machine first.
|
70
73
|
|
71
|
-
|
74
|
+
Install the promotion gem, which displays a post-installation message:
|
75
|
+
|
72
76
|
$ sudo gem install promotion
|
77
|
+
|
78
|
+
To install the executables issue the following command:
|
79
|
+
|
80
|
+
$ sudo ruby -rubygems -e "require 'promotion/install'"
|
81
|
+
|
82
|
+
This will install the executables (+promote+, +evolve+, +devolve+, +mkdeploy+) and
|
83
|
+
create the staging area +/var/staging+.
|
84
|
+
|
73
85
|
Now you are ready to use Promotion to deploy other applications.
|
74
86
|
|
75
87
|
== Usage
|
@@ -173,7 +185,7 @@ override the default Mode, Owner, and Group.
|
|
173
185
|
=== +Files+
|
174
186
|
Finally we can specify how to move the files into place:
|
175
187
|
<Files Owner="root" Group="wheel" Mode="0644" Source="conf">
|
176
|
-
<File>/etc/my.cnf</File>
|
188
|
+
<File Backup="true">/etc/my.cnf</File>
|
177
189
|
<File>/etc/myapp.conf</File>
|
178
190
|
</Files>
|
179
191
|
<Files Owner="root" Group="wheel" Mode="0750" Source="sbin">
|
@@ -192,6 +204,10 @@ This results in Promotion executing a command such as:
|
|
192
204
|
This allows a flatter, more convenient project folder structure, since the deployment descriptor maps
|
193
205
|
the files into their proper operating system locations.
|
194
206
|
|
207
|
+
Note that the file +my.cnf+ has an extra *Backup* attribute. This makes a backup of the original file
|
208
|
+
to +my.cnf-original+ once only. This is a good idea for important original configuration files
|
209
|
+
such as snort.conf or httpd.conf. They often have hundreds of comments that are useful for reference.
|
210
|
+
|
195
211
|
As for Folders, the Files element can define the default Owner, Group and Mode for all File children.
|
196
212
|
|
197
213
|
=== +Allfiles+
|
@@ -6,7 +6,7 @@
|
|
6
6
|
spec.elements.each("/Specification/Environment") do |env|
|
7
7
|
env.elements.each("Variable") do |var|
|
8
8
|
t = var.cdatas.length > 0 ? var.cdatas[0].to_s() : var.text() %>
|
9
|
-
export <%= var.attributes["Name"] %>="<%= t
|
9
|
+
export <%= var.attributes["Name"] %>="<%= t %>"<% end %>
|
10
10
|
<% env.elements.each("Alias") do |ali|
|
11
11
|
t = ali.cdatas.length > 0 ? ali.cdatas[0].to_s() : ali.text()
|
12
12
|
%><% if ali.attributes["Comment"] %><%= "\n# "+ali.attributes["Comment"]
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
#______________________
|
4
|
+
if Process.euid != 0
|
5
|
+
puts("This script must be run as root")
|
6
|
+
exit 1
|
7
|
+
end
|
8
|
+
|
9
|
+
#______________________
|
10
|
+
# Enable graceful exit especially while seeking input
|
11
|
+
["INT", "TERM", "QUIT"].each { |sig|
|
12
|
+
Signal.trap(sig) {
|
13
|
+
puts("")
|
14
|
+
exit(0)
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
#______________________
|
19
|
+
# display intent
|
20
|
+
bindir = File.expand_path("../../bin", File.dirname(__FILE__))
|
21
|
+
executables = %w{promote evolve devolve mkdeploy}
|
22
|
+
|
23
|
+
puts("Installing Promotion")
|
24
|
+
puts("--------------------")
|
25
|
+
puts("This procedure will install the following executables:")
|
26
|
+
executables.each { |exe|
|
27
|
+
puts(" * #{exe}")
|
28
|
+
}
|
29
|
+
|
30
|
+
#______________________
|
31
|
+
# confirm path to install to
|
32
|
+
sbindir = "/usr/local/sbin"
|
33
|
+
confirmed = false
|
34
|
+
begin
|
35
|
+
print("Install to path [#{sbindir}]: ")
|
36
|
+
answer = gets().chomp()
|
37
|
+
if answer == ""
|
38
|
+
confirmed = true
|
39
|
+
else
|
40
|
+
if File.directory?(answer)
|
41
|
+
confirmed = true
|
42
|
+
sbindir = answer
|
43
|
+
else
|
44
|
+
puts(" Sorry, the directory #{answer} was not found.\n\n")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end until confirmed
|
48
|
+
|
49
|
+
#______________________
|
50
|
+
# install the executables
|
51
|
+
executables.each { |exe|
|
52
|
+
targ = "#{sbindir}/#{exe}"
|
53
|
+
FileUtils.cp("#{bindir}/#{exe}", targ)
|
54
|
+
FileUtils.chown("root", "wheel", targ)
|
55
|
+
FileUtils.chmod(0755, targ)
|
56
|
+
puts(" " + `ls -l #{targ}`)
|
57
|
+
}
|
58
|
+
|
59
|
+
#______________________
|
60
|
+
# create staging area
|
61
|
+
staging = "/var/staging"
|
62
|
+
puts("Creating staging area /var/staging")
|
63
|
+
FileUtils.mkdir_p(staging)
|
64
|
+
puts(" " + `ls -ld #{staging}`)
|
65
|
+
puts("Done.")
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: promotion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Richard Kernahan
|
@@ -49,8 +49,8 @@ description: "\t\tThe Promotion tool is designed to make it easy and quick to de
|
|
49
49
|
email: dev.promotion@finalstep.com.au
|
50
50
|
executables: []
|
51
51
|
|
52
|
-
extensions:
|
53
|
-
|
52
|
+
extensions: []
|
53
|
+
|
54
54
|
extra_rdoc_files:
|
55
55
|
- README
|
56
56
|
files:
|
@@ -58,8 +58,8 @@ files:
|
|
58
58
|
- bin/evolve
|
59
59
|
- bin/devolve
|
60
60
|
- bin/mkdeploy
|
61
|
-
- ext/promotion/extconf.rb
|
62
61
|
- lib/promotion.rb
|
62
|
+
- lib/promotion/install.rb
|
63
63
|
- lib/promotion/application.rb
|
64
64
|
- lib/promotion/config.rb
|
65
65
|
- lib/promotion/enforcer.rb
|
@@ -70,14 +70,16 @@ files:
|
|
70
70
|
- lib/promotion/erb/rc.conf.local.erb
|
71
71
|
- lib/promotion/erb/sudoers.erb
|
72
72
|
- .yardopts
|
73
|
-
- deploy.xml
|
74
73
|
- promotion.xsd
|
75
74
|
- CHANGELOG
|
76
75
|
- README
|
77
76
|
homepage: http://rubygems.org/gems/promotion
|
78
77
|
licenses: []
|
79
78
|
|
80
|
-
post_install_message: "\n
|
79
|
+
post_install_message: "\n\
|
80
|
+
\t\n To install the executables (promote, evolve, devolve, mkdeploy)\n issue the following command:\n\
|
81
|
+
\t$ sudo ruby -rubygems -e \"require 'promotion/install'\"\n\
|
82
|
+
\t\n "
|
81
83
|
rdoc_options:
|
82
84
|
- --title
|
83
85
|
- Promotion
|
data/deploy.xml
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
-
<Specification Name="promotion" Title="Promotion Manager"
|
3
|
-
xmlns="http://finalstep.com.au/promotion/v100"
|
4
|
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
5
|
-
xsi:schemaLocation="http://finalstep.com.au/schema/promotion.v100.xsd ../promotion/promotion.xsd">
|
6
|
-
<Description>
|
7
|
-
The promotion manager ensures that the environment for an application
|
8
|
-
is set up correctly, including folder and file permissions and ownership,
|
9
|
-
startup scripts, sudoers privileges and environment variables.
|
10
|
-
</Description>
|
11
|
-
<Folders>
|
12
|
-
<Folder Mode="0770">/var/staging</Folder>
|
13
|
-
<Folder Mode="0770">/var/staging/promotion</Folder>
|
14
|
-
<Folder Clear="true">/usr/local/promotion</Folder>
|
15
|
-
<Folder>/usr/local/promotion/erb</Folder>
|
16
|
-
</Folders>
|
17
|
-
<Files Source="bin" Mode="0755">
|
18
|
-
<File>/usr/local/sbin/promote</File>
|
19
|
-
<File>/usr/local/sbin/evolve</File>
|
20
|
-
<File>/usr/local/sbin/devolve</File>
|
21
|
-
</Files>
|
22
|
-
<Files Source="lib/promotion">
|
23
|
-
<File>/usr/local/promotion/application.rb</File>
|
24
|
-
<File>/usr/local/promotion/config.rb</File>
|
25
|
-
<File>/usr/local/promotion/enforcer.rb</File>
|
26
|
-
<File>/usr/local/promotion/generator.rb</File>
|
27
|
-
<File>/usr/local/promotion/evolver.rb</File>
|
28
|
-
</Files>
|
29
|
-
<Files Source="lib/promotion/erb">
|
30
|
-
<File>/usr/local/promotion/erb/profile.erb</File>
|
31
|
-
<File>/usr/local/promotion/erb/rc.conf.local.erb</File>
|
32
|
-
<File>/usr/local/promotion/erb/sudoers.erb</File>
|
33
|
-
<File>/usr/local/promotion/erb/crontab.erb</File>
|
34
|
-
</Files>
|
35
|
-
</Specification>
|
data/ext/promotion/extconf.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
# Working directory is the ext/promotion/ folder
|
3
|
-
|
4
|
-
# generate Makefile to install binaries
|
5
|
-
# Its a sysadmin tool after all, so we'll pretend not to see Eric Hodel
|
6
|
-
# frowning on the (ab)use of extconf.rb
|
7
|
-
source = "../../bin"
|
8
|
-
target = "/usr/local"
|
9
|
-
makeContents=<<-EOT
|
10
|
-
# Makefile for Promotion
|
11
|
-
.PHONY : all
|
12
|
-
all :
|
13
|
-
.PHONY : install
|
14
|
-
install :
|
15
|
-
install -m 0750 -o root -g wheel #{source}/promote #{target}/sbin
|
16
|
-
install -m 0750 -o root -g wheel #{source}/evolve #{target}/sbin
|
17
|
-
install -m 0750 -o root -g wheel #{source}/devolve #{target}/sbin
|
18
|
-
install -m 0750 -o root -g wheel #{source}/mkdeploy #{target}/sbin
|
19
|
-
install -m 0750 -o root -g wheel -d /var/staging
|
20
|
-
EOT
|
21
|
-
makefile = File.new("Makefile", "w")
|
22
|
-
makefile.puts(makeContents)
|
23
|
-
makefile.close()
|
24
|
-
# Note that there is no provision for uninstalling these binaries
|
25
|
-
# If the gem is uninstalled, the binaries need to be deleted manually
|