desi 0.6.9 → 0.7.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 +3 -0
- data/lib/desi/http_client.rb +11 -0
- data/lib/desi/index_manager.rb +25 -0
- data/lib/desi/installer.rb +5 -3
- data/lib/desi/local_install/release.rb +78 -0
- data/lib/desi/local_install.rb +15 -63
- data/lib/desi/runner.rb +29 -0
- data/lib/desi/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a904d5f9b8c7b6a47443b5604430e886677404c
|
4
|
+
data.tar.gz: 925618b93f68d4f8a1a04d71804a2ceea4872a99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd305555d76f562c53990742890c322dd43a8269f2dbba816a1c796dd11160156a4b45dcbe9c13a033c454c4857871ccaf9b45d019a696886daec613e5d8dad5
|
7
|
+
data.tar.gz: 41bafd0856752105569549bb1e838342629f56afa7cb5470041c06af5de4585228fcd04b78662e343d3384ac157c9e85c3292d2d962beffaf3c30c26e606da57
|
data/README.md
CHANGED
@@ -26,9 +26,12 @@ It can be used both as a command-line tool and as a library.
|
|
26
26
|
$ desi stop # Stop cluster
|
27
27
|
$ desi status [--host HOST] # Show running cluster info
|
28
28
|
$ desi tail # Show tail output from Elastic Search's log file
|
29
|
+
$ desi current # Show current version
|
30
|
+
$ desi current [VERSION] # Change the symlink pointing to current version
|
29
31
|
|
30
32
|
$ desi indices "^foo" # List all indices whose name match /^foo/
|
31
33
|
$ desi indices "^foo" --delete # Delete all matching indices
|
34
|
+
$ desi indices "^foo" --close # Delete all matching indices
|
32
35
|
$ desi indices "bar$" --empty # Remove all records from the matching indices
|
33
36
|
|
34
37
|
## Examples (command-line and Ruby)
|
data/lib/desi/http_client.rb
CHANGED
@@ -38,6 +38,17 @@ module Desi
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
def post(uri)
|
42
|
+
response = @http.request(Net::HTTP::Post.new(uri))
|
43
|
+
|
44
|
+
case response
|
45
|
+
when Net::HTTPSuccess
|
46
|
+
response
|
47
|
+
else
|
48
|
+
raise response.error!
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
41
52
|
def delete(uri)
|
42
53
|
response = @http.request(Net::HTTP::Delete.new(uri))
|
43
54
|
|
data/lib/desi/index_manager.rb
CHANGED
@@ -132,6 +132,31 @@ module Desi
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
+
# Close all indices matching the specified pattern
|
136
|
+
#
|
137
|
+
# @param [#to_s] pattern Regexp pattern used to restrict the selection
|
138
|
+
# @return [void]
|
139
|
+
#
|
140
|
+
# @note No confirmation is needed, so beware!
|
141
|
+
#
|
142
|
+
# @note This method will also output its result on STDOUT if +@verbose+ is
|
143
|
+
# true
|
144
|
+
#
|
145
|
+
# @example Close all indices whose name begins with "test"
|
146
|
+
# Desi::IndexManager.new.close!('^test') #=> nil
|
147
|
+
#
|
148
|
+
# @api public
|
149
|
+
def close!(pattern)
|
150
|
+
warn "You must provide a pattern" and exit if pattern.nil?
|
151
|
+
|
152
|
+
@outputter.puts "The following indices from host #{@host} are now closed" if @verbose
|
153
|
+
|
154
|
+
indices(Regexp.new(pattern)).each do |index|
|
155
|
+
@client.post("/#{index}/_close")
|
156
|
+
@outputter.puts " * #{index.inspect}" if @verbose
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
135
160
|
# Empty (remove all records) from indices matching the specified pattern
|
136
161
|
#
|
137
162
|
# @param [#to_s] pattern Regexp pattern used to restrict the selection
|
data/lib/desi/installer.rb
CHANGED
@@ -15,7 +15,7 @@ module Desi
|
|
15
15
|
def install!
|
16
16
|
extract! unless extracted?
|
17
17
|
install_config_file
|
18
|
-
|
18
|
+
update_symlinks!
|
19
19
|
remove_archive!
|
20
20
|
end
|
21
21
|
|
@@ -32,8 +32,10 @@ module Desi
|
|
32
32
|
end
|
33
33
|
|
34
34
|
|
35
|
-
def
|
36
|
-
@local_install.
|
35
|
+
def update_symlinks!
|
36
|
+
@local_install.
|
37
|
+
update_current_to(release_dir).
|
38
|
+
add_data_symlink(release_dir)
|
37
39
|
end
|
38
40
|
|
39
41
|
def config_file
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "semantic"
|
5
|
+
|
6
|
+
module Desi
|
7
|
+
class LocalInstall
|
8
|
+
|
9
|
+
class Release
|
10
|
+
def self.all_in(workdir)
|
11
|
+
Dir[workdir.join('*')].
|
12
|
+
select {|subdir| File.directory?(subdir) && File.basename(subdir) =~ /^elasticsearch\-\d+\.\d+\.\d+/ }.
|
13
|
+
map {|dirname| new(dirname, workdir) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(dirname, workdir)
|
17
|
+
@dirname = Pathname.new(dirname)
|
18
|
+
@workdir = workdir
|
19
|
+
end
|
20
|
+
|
21
|
+
def name
|
22
|
+
@name ||= File.basename(@dirname)
|
23
|
+
end
|
24
|
+
|
25
|
+
def current?
|
26
|
+
current_symlink? && current_symlink.realpath == @dirname
|
27
|
+
end
|
28
|
+
|
29
|
+
def version
|
30
|
+
@version ||= Semantic::Version.new(version_number)
|
31
|
+
end
|
32
|
+
|
33
|
+
def with_version?(other_version)
|
34
|
+
version == Semantic::Version.new(other_version)
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_s
|
38
|
+
current_mark = current? ? '*' : '-'
|
39
|
+
|
40
|
+
" #{current_mark} #{name} (#{@dirname})"
|
41
|
+
end
|
42
|
+
|
43
|
+
def ==(other)
|
44
|
+
other.version.to_s == version.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def <=>(other)
|
48
|
+
name <=> other.name
|
49
|
+
end
|
50
|
+
|
51
|
+
def pre_one_zero?
|
52
|
+
@pre_one_zero ||= (version < Semantic::Version.new("1.0.0-alpha"))
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_path
|
56
|
+
@dirname.to_path
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def current_symlink
|
62
|
+
@current_symlink ||= Pathname(@workdir).join('current')
|
63
|
+
end
|
64
|
+
|
65
|
+
def current_symlink?
|
66
|
+
current_symlink.exist?
|
67
|
+
end
|
68
|
+
|
69
|
+
# Ugly hack to get around elasticsearch's flakey semver naming
|
70
|
+
# (e.g. `1.4.0.Beta1` instead of `1.4.0-beta1`)
|
71
|
+
def version_number
|
72
|
+
/^elasticsearch\-(?<version>.*)$/.match(name.to_s)[:version].
|
73
|
+
sub(/\.(alpha|beta)/i, '-\1')
|
74
|
+
end
|
75
|
+
end # Release
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
data/lib/desi/local_install.rb
CHANGED
@@ -1,71 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
|
4
|
-
require "semantic"
|
3
|
+
require_relative "local_install/release"
|
5
4
|
|
6
5
|
module Desi
|
7
6
|
class LocalInstall
|
8
7
|
|
9
|
-
class Release
|
10
|
-
def self.all_in(workdir)
|
11
|
-
Dir[workdir.join('*')].
|
12
|
-
select {|subdir| File.directory?(subdir) && File.basename(subdir) =~ /^elasticsearch\-\d+\.\d+\.\d+/ }.
|
13
|
-
map {|dirname| new(dirname, workdir) }
|
14
|
-
end
|
15
|
-
|
16
|
-
def initialize(dirname, workdir)
|
17
|
-
@dirname = Pathname.new(dirname)
|
18
|
-
@workdir = workdir
|
19
|
-
end
|
20
|
-
|
21
|
-
def name
|
22
|
-
@name ||= File.basename(@dirname)
|
23
|
-
end
|
24
|
-
|
25
|
-
def current?
|
26
|
-
current_symlink? && current_symlink.realpath == @dirname
|
27
|
-
end
|
28
|
-
|
29
|
-
def version
|
30
|
-
@version ||= Semantic::Version.new(version_number)
|
31
|
-
end
|
32
|
-
|
33
|
-
def to_s
|
34
|
-
current_mark = current? ? '*' : '-'
|
35
|
-
|
36
|
-
" #{current_mark} #{name} (#{@dirname})"
|
37
|
-
end
|
38
|
-
|
39
|
-
def ==(other)
|
40
|
-
other.version.to_s == version.to_s
|
41
|
-
end
|
42
|
-
|
43
|
-
def <=>(other)
|
44
|
-
name <=> other.name
|
45
|
-
end
|
46
|
-
|
47
|
-
def pre_one_zero?
|
48
|
-
@pre_one_zero ||= (version < Semantic::Version.new("1.0.0-alpha"))
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def current_symlink
|
54
|
-
@current_symlink ||= Pathname(@workdir).join('current')
|
55
|
-
end
|
56
|
-
|
57
|
-
def current_symlink?
|
58
|
-
current_symlink.exist?
|
59
|
-
end
|
60
|
-
|
61
|
-
# Ugly hack to get around elasticsearch's flakey semver naming
|
62
|
-
# (e.g. `1.4.0.Beta1` instead of `1.4.0-beta1`)
|
63
|
-
def version_number
|
64
|
-
/^elasticsearch\-(?<version>.*)$/.match(name.to_s)[:version].
|
65
|
-
sub(/\.(alpha|beta)/i, '-\1')
|
66
|
-
end
|
67
|
-
end # Release
|
68
|
-
|
69
8
|
def self.current_release_is_pre_one_zero?
|
70
9
|
current = new.current_release
|
71
10
|
current && current.pre_one_zero?
|
@@ -82,7 +21,7 @@ module Desi
|
|
82
21
|
end
|
83
22
|
|
84
23
|
def current_dir
|
85
|
-
@workdir.join('current')
|
24
|
+
@current_dir ||= @workdir.join('current')
|
86
25
|
end
|
87
26
|
|
88
27
|
def update_current_to(release_dir)
|
@@ -91,6 +30,15 @@ module Desi
|
|
91
30
|
puts " * Updating #{current_dir} symlink" if @verbose
|
92
31
|
FileUtils.remove(current_dir) if current_dir.exist?
|
93
32
|
FileUtils.ln_sf(release_dir, current_dir)
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_data_symlink(release_dir)
|
37
|
+
current_dir_must_be_nil_or_symlink!
|
38
|
+
symlink = current_dir.join('data')
|
39
|
+
puts " * Updating data dir symlink (#{symlink} -> #{data_dir})" if @verbose
|
40
|
+
FileUtils.ln_sf(data_dir, symlink)
|
41
|
+
self
|
94
42
|
end
|
95
43
|
|
96
44
|
def create!
|
@@ -109,6 +57,10 @@ module Desi
|
|
109
57
|
@workdir.to_s
|
110
58
|
end
|
111
59
|
|
60
|
+
def data_dir
|
61
|
+
@data_dir ||= @workdir.join('data')
|
62
|
+
end
|
63
|
+
|
112
64
|
def to_s
|
113
65
|
to_path
|
114
66
|
end
|
data/lib/desi/runner.rb
CHANGED
@@ -54,6 +54,11 @@ module Desi
|
|
54
54
|
Desi::Upstream.new.latest_release
|
55
55
|
end
|
56
56
|
|
57
|
+
unless release
|
58
|
+
warn "Could not find release '#{version_or_full_name}'"
|
59
|
+
exit 1
|
60
|
+
end
|
61
|
+
|
57
62
|
if Desi::LocalInstall.new.releases.any? {|r| r == release }
|
58
63
|
puts " * release #{release.version} seems to be already installed" if options[:verbose]
|
59
64
|
return
|
@@ -65,6 +70,27 @@ module Desi
|
|
65
70
|
puts " * #{release} installed" if Desi::Installer.new(package).install! && options[:verbose]
|
66
71
|
end
|
67
72
|
|
73
|
+
|
74
|
+
desc "Show or set the current version"
|
75
|
+
verbosity_option
|
76
|
+
def current(version = nil, options = {})
|
77
|
+
set_verbosity!(options)
|
78
|
+
local_install = Desi::LocalInstall.new
|
79
|
+
|
80
|
+
if version
|
81
|
+
dir = local_install.releases.find {|d| d.with_version?(version) }
|
82
|
+
|
83
|
+
unless dir
|
84
|
+
warn "Cannot find locale install of version #{version}"
|
85
|
+
exit 1
|
86
|
+
end
|
87
|
+
local_install.update_current_to(dir)
|
88
|
+
puts "Set current version to #{dir.version} (#{dir.to_path})" if options[:verbose]
|
89
|
+
else
|
90
|
+
puts local_install.current_release
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
68
94
|
desc "Start Elastic Search (do nothing if already active)"
|
69
95
|
verbosity_option
|
70
96
|
start_options
|
@@ -100,6 +126,7 @@ module Desi
|
|
100
126
|
verbosity_option
|
101
127
|
option "--host", type: :string, desc: "Elastic Search cluster URL", default: Desi.configuration.server
|
102
128
|
option "--delete", type: :boolean, desc: "Delete the specified indices (You've been warned!)", default: false
|
129
|
+
option "--close", type: :boolean, desc: "Close specified indices", default: false
|
103
130
|
option "--empty", type: :boolean, desc: "Delete all documents from the specified indices", default: false
|
104
131
|
def indices(pattern = nil, options = {})
|
105
132
|
set_verbosity!(options)
|
@@ -107,6 +134,8 @@ module Desi
|
|
107
134
|
|
108
135
|
if options[:delete]
|
109
136
|
index_manager.delete!(pattern)
|
137
|
+
elsif options[:close]
|
138
|
+
index_manager.close!(pattern)
|
110
139
|
elsif options[:empty]
|
111
140
|
index_manager.empty!(pattern)
|
112
141
|
else
|
data/lib/desi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: desi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominique Rose-Rosette
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: boson
|
@@ -194,6 +194,7 @@ files:
|
|
194
194
|
- lib/desi/index_manager.rb
|
195
195
|
- lib/desi/installer.rb
|
196
196
|
- lib/desi/local_install.rb
|
197
|
+
- lib/desi/local_install/release.rb
|
197
198
|
- lib/desi/process_manager.rb
|
198
199
|
- lib/desi/runner.rb
|
199
200
|
- lib/desi/upstream.rb
|