terraform 0.0.6 → 0.0.7.rc1
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/README.markdown +45 -0
- data/lib/terraform.rb +13 -0
- data/lib/terraform/dsl.rb +16 -3
- data/lib/terraform/version.rb +1 -1
- metadata +12 -10
data/README.markdown
CHANGED
@@ -42,6 +42,11 @@ The Terraform DSL provides these functions which are commonly used when provisio
|
|
42
42
|
<td>ensure_packages(*package_names)</td>
|
43
43
|
<td>Ensures the given packages are installed via apt-get.</td>
|
44
44
|
</tr>
|
45
|
+
<tr>
|
46
|
+
<td>ensure_apt_get_update(oldest_acceptable_time)</td>
|
47
|
+
<td>Runs apt-get update if it hasn't been run since the oldest_acceptable_time (a Time object).
|
48
|
+
Defaults to 30 days ago.</td>
|
49
|
+
</tr>
|
45
50
|
<tr>
|
46
51
|
<td>ensure_ppa(ppa_url)</td>
|
47
52
|
<td>Ensures the given PPA (used on Ubuntu) is installed. "ppa_url" is of the form "ppa:user/name".</td>
|
@@ -110,6 +115,46 @@ machines it gets deployed to. You can see its system provisioning script written
|
|
110
115
|
[here](https://github.com/ooyala/barkeep/blob/master/script/system_setup.rb), and its Fezzik deploy script
|
111
116
|
[here](https://github.com/ooyala/barkeep/blob/master/config/tasks/deploy.rake).
|
112
117
|
|
118
|
+
Plugins
|
119
|
+
----------
|
120
|
+
Terraform can be easily extended with custom deps distributed as gems or scripts. A library that defines new
|
121
|
+
Terraform deps should call `Terraform.add_plugin(__FILE__)` in any file that adds to the Terraform DSL. For
|
122
|
+
example, if you wanted to package a dep as a gem, the contents of your project might look like this:
|
123
|
+
|
124
|
+
```
|
125
|
+
terraform-yourgem/
|
126
|
+
`-lib/
|
127
|
+
`-terraform/
|
128
|
+
`-yourgem.rb
|
129
|
+
|
130
|
+
yourgem.rb
|
131
|
+
----------
|
132
|
+
require "terraform"
|
133
|
+
|
134
|
+
module Terraform
|
135
|
+
module DSL
|
136
|
+
# Define your deps
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
Terraform.add_plugin(__FILE__)
|
141
|
+
```
|
142
|
+
|
143
|
+
Then in your application setup script you would write:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
require "terraform"
|
147
|
+
require "terraform/yourgem"
|
148
|
+
|
149
|
+
Terraform.write_terraform_files("./terraform")
|
150
|
+
```
|
151
|
+
|
152
|
+
This will write out the core Terraform DSL plus all required plugins, ready to be required by your bootstrap
|
153
|
+
code on the server.
|
154
|
+
|
155
|
+
For more complete example see [terraform-rbenv](https://github.com/dmacdougall/terraform-rbenv), which
|
156
|
+
reimplements Terraform's existing rbenv deps as a plugin.
|
157
|
+
|
113
158
|
Contribute
|
114
159
|
----------
|
115
160
|
When developing this gem you can quickly preview and test your changes by loading your local copy of the gem
|
data/lib/terraform.rb
CHANGED
@@ -2,9 +2,22 @@ require "terraform/version"
|
|
2
2
|
require "fileutils"
|
3
3
|
|
4
4
|
module Terraform
|
5
|
+
# DEPRECATED
|
6
|
+
# Replaced by `write_terraform_files`. Remove in next major version release.
|
5
7
|
# Writes the terraform_dsl.rb to the given file or directory.
|
6
8
|
def self.write_dsl_file(path)
|
9
|
+
puts "WARNING: `Terraform.write_dsl_file` is deprecated. Instead use `Terraform.write_terraform_files`."
|
7
10
|
path = File.join(path, "terraform_dsl.rb") if File.directory?(path)
|
8
11
|
FileUtils.cp(File.expand_path(File.join(File.dirname(__FILE__), "terraform/dsl.rb")), path)
|
9
12
|
end
|
13
|
+
|
14
|
+
@@plugin_files = Set.new [File.expand_path(File.join(File.dirname(__FILE__), "terraform/dsl.rb"))]
|
15
|
+
def self.register_plugin(path) @@plugin_files.add(path) end
|
16
|
+
|
17
|
+
def self.write_terraform_files(path)
|
18
|
+
FileUtils.mkdir_p(path)
|
19
|
+
@@plugin_files.each do |plugin|
|
20
|
+
FileUtils.cp(File.expand_path(plugin), File.join(path, File.basename(plugin)))
|
21
|
+
end
|
22
|
+
end
|
10
23
|
end
|
data/lib/terraform/dsl.rb
CHANGED
@@ -31,6 +31,7 @@ module Terraform
|
|
31
31
|
|
32
32
|
def satisfy_dependencies
|
33
33
|
STDOUT.sync = true # Ensure that we flush logging output as we go along.
|
34
|
+
@dependencies ||= []
|
34
35
|
@dependencies.each do |dep|
|
35
36
|
unless dep[:met?].call
|
36
37
|
puts "* Dependency #{dep[:name]} is not met. Meeting it."
|
@@ -59,6 +60,16 @@ module Terraform
|
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
63
|
+
def ensure_apt_get_update(oldest_acceptable_time = Time.now - 30*24*60*60)
|
64
|
+
dep "apt-get update" do
|
65
|
+
met? do
|
66
|
+
File.exists?("#{ENV['HOME']}/.apt_get_updated") &&
|
67
|
+
File.mtime("#{ENV['HOME']}/.apt_get_updated") >= oldest_acceptable_time
|
68
|
+
end
|
69
|
+
meet { `sudo apt-get update && touch $HOME/.apt_get_updated` }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
62
73
|
# Ensure an Ubuntu PPA is installed. The argument is the ppa location, in the form ppa:[USER]/[NAME]
|
63
74
|
def ensure_ppa(ppa)
|
64
75
|
ppa_part, location = ppa.split(":", 2)
|
@@ -112,12 +123,14 @@ module Terraform
|
|
112
123
|
end
|
113
124
|
|
114
125
|
def ensure_rbenv
|
115
|
-
|
126
|
+
# TODO(caleb): The package is 'git-core' in older Ubuntu releases. We should have a mechanism for
|
127
|
+
# handling different releases; see https://github.com/philc/terraform/issues/15.
|
128
|
+
ensure_package "git"
|
116
129
|
dep "rbenv" do
|
117
130
|
met? { in_path?("rbenv") }
|
118
131
|
meet do
|
119
|
-
# These instructions are from https://github.com/
|
120
|
-
shell "
|
132
|
+
# These instructions are from https://github.com/fesplugas/rbenv-installer
|
133
|
+
shell "curl https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash"
|
121
134
|
# We need to run rbenv init after install, which adjusts the path. If exec is causing us problems
|
122
135
|
# down the road, we can perhaps simulate running rbenv init without execing.
|
123
136
|
unless ARGV.include?("--forked-after-rbenv") # To guard against an infinite forking loop.
|
data/lib/terraform/version.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.7.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Phil Crosby
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-27 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: scope
|
16
|
-
requirement: &
|
16
|
+
requirement: &70308188001180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.2.3
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70308188001180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rr
|
27
|
-
requirement: &
|
27
|
+
requirement: &70308188000560 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 1.0.4
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70308188000560
|
36
36
|
description:
|
37
37
|
email:
|
38
38
|
- phil.crosby@gmail.com
|
@@ -65,14 +65,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
66
|
none: false
|
67
67
|
requirements:
|
68
|
-
- - ! '
|
68
|
+
- - ! '>'
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
70
|
+
version: 1.3.1
|
71
71
|
requirements: []
|
72
72
|
rubyforge_project: terraform
|
73
73
|
rubygems_version: 1.8.10
|
74
74
|
signing_key:
|
75
75
|
specification_version: 3
|
76
76
|
summary: Set up a cold, inhospitable system using Terraform.
|
77
|
-
test_files:
|
77
|
+
test_files:
|
78
|
+
- test/test_helper.rb
|
79
|
+
- test/unit/terraform/dsl_test.rb
|
78
80
|
has_rdoc:
|