necktie 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/necktie +4 -0
- data/lib/necktie/files.rb +6 -0
- data/lib/necktie/gems.rb +10 -0
- data/lib/necktie/services.rb +13 -0
- data/lib/necktie.rb +57 -0
- data/necktie.gemspec +14 -0
- metadata +59 -0
data/bin/necktie
ADDED
data/lib/necktie/gems.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require "rubygems/dependency_installer"
|
2
|
+
|
3
|
+
def self.install_gem(name, version = nil)
|
4
|
+
installer = Gem::DependencyInstaller.new
|
5
|
+
spec = installer.find_spec_by_name_and_version(name, version).first.first
|
6
|
+
if Gem::SourceIndex.from_installed_gems.find_name(spec.name, spec.version).empty?
|
7
|
+
puts " ** Installing the gem #{spec.name} #{spec.version}"
|
8
|
+
installer.install name, version
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
def start_service(name)
|
2
|
+
puts " ** Starting service #{name}"
|
3
|
+
system "update-rc.d #{name} defaults" and
|
4
|
+
system "service #{name} start" or
|
5
|
+
fail "failed to start #{name}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def stop_service(name)
|
9
|
+
puts " ** Stopping service #{name}"
|
10
|
+
system "service #{name} stop" and
|
11
|
+
system "update-rc.d -f #{name} remove" or
|
12
|
+
fail "failed to shutdown #{name}"
|
13
|
+
end
|
data/lib/necktie.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
extend FileUtils
|
3
|
+
require "necktie/gems"
|
4
|
+
require "necktie/services"
|
5
|
+
require "necktie/files"
|
6
|
+
|
7
|
+
def necktie(args)
|
8
|
+
etc = "/etc/necktie"
|
9
|
+
File.writable?(etc) or File.writable?(File.dirname(etc)) or fail "Can't write to #{etc}. You should be running necktie as sudo."
|
10
|
+
|
11
|
+
envs, args = args.partition { |a| a[/=/] }
|
12
|
+
git_url = args.shift or fail "Usage: necktie git-url role* name=value*"
|
13
|
+
roles = args
|
14
|
+
# Setup environment variable from name=value arguments.
|
15
|
+
envs.each do |env|
|
16
|
+
name, value = env.split("=")
|
17
|
+
ENV[name] = value
|
18
|
+
end
|
19
|
+
|
20
|
+
# Default role is app. For all rules, execute setup scripts.
|
21
|
+
if roles.empty?
|
22
|
+
puts " Default role: app"
|
23
|
+
roles = ["app"]
|
24
|
+
end
|
25
|
+
|
26
|
+
repo = File.expand_path(".necktie")
|
27
|
+
if File.exist?(repo)
|
28
|
+
puts " * Pulling latest updates to #{repo}"
|
29
|
+
system "cd #{repo.inspect} && git pull #{repo.inspect} #{ENV["branch"] || "master"}" or fail
|
30
|
+
else
|
31
|
+
puts " * Cloning #{git_url} to #{repo}"
|
32
|
+
system "git clone #{git_url} #{repo.inspect}" or fail
|
33
|
+
end
|
34
|
+
|
35
|
+
Dir.chdir repo do
|
36
|
+
executed = File.exist?(etc) ? File.read(etc).split("\n") : []
|
37
|
+
roles.each do |role|
|
38
|
+
tasks = Dir["tasks/#{role}/*.rb"].map { |name| File.basename(name).gsub(/(.*)\.rb$/, "#{role}/\\1") }
|
39
|
+
todo = tasks - executed
|
40
|
+
if tasks.empty?
|
41
|
+
puts " * No tasks for role #{role}"
|
42
|
+
elsif todo.empty?
|
43
|
+
puts " * All tasks completed for role #{role}"
|
44
|
+
else
|
45
|
+
puts " * Now in role: #{role}"
|
46
|
+
File.open etc, "a" do |f|
|
47
|
+
todo.each do |task|
|
48
|
+
puts " ** Executing #{task.split("/").last}"
|
49
|
+
load "tasks/#{task}.rb"
|
50
|
+
f.puts task
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
data/necktie.gemspec
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "necktie"
|
3
|
+
spec.version = "0.0.1"
|
4
|
+
spec.author = "Assaf Arkin"
|
5
|
+
spec.email = "assaf@labnotes.org"
|
6
|
+
spec.homepage = ""
|
7
|
+
spec.summary = "Dress to impress"
|
8
|
+
spec.description = ""
|
9
|
+
|
10
|
+
spec.files = Dir['{bin,lib}/**/*', '*.{gemspec,rdoc}']
|
11
|
+
spec.require_paths = 'lib'
|
12
|
+
spec.bindir = 'bin' # Use these for applications.
|
13
|
+
spec.executable = 'necktie'
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: necktie
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Assaf Arkin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-08 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: ""
|
17
|
+
email: assaf@labnotes.org
|
18
|
+
executables:
|
19
|
+
- necktie
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- bin/necktie
|
26
|
+
- lib/necktie/files.rb
|
27
|
+
- lib/necktie/gems.rb
|
28
|
+
- lib/necktie/services.rb
|
29
|
+
- lib/necktie.rb
|
30
|
+
- necktie.gemspec
|
31
|
+
has_rdoc: true
|
32
|
+
homepage: ""
|
33
|
+
licenses: []
|
34
|
+
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
|
38
|
+
require_paths: lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.3.5
|
55
|
+
signing_key:
|
56
|
+
specification_version: 3
|
57
|
+
summary: Dress to impress
|
58
|
+
test_files: []
|
59
|
+
|