necktie 0.0.1
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/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
|
+
|