phper 0.4.1 → 0.5.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/VERSION +1 -1
- data/lib/phper/agent.rb +15 -0
- data/lib/phper/cli.rb +2 -1
- data/lib/phper/commands.rb +143 -0
- data/lib/phper.rb +11 -0
- data/phper.gemspec +2 -2
- metadata +5 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/lib/phper/agent.rb
CHANGED
@@ -107,6 +107,21 @@ class Phper::Agent
|
|
107
107
|
count
|
108
108
|
end
|
109
109
|
|
110
|
+
def hosts project
|
111
|
+
get("/projects/%s/hosts" % project)
|
112
|
+
end
|
113
|
+
|
114
|
+
def files project,host,name = nil
|
115
|
+
if name
|
116
|
+
get("/projects/%s/hosts/%s/files/%s" % [project,host,encode(name)])
|
117
|
+
else
|
118
|
+
get("/projects/%s/hosts/%s/files" % [project,host])
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
|
110
125
|
|
111
126
|
def post(url,data = {},format=:json)
|
112
127
|
call(:post,url,data,format)
|
data/lib/phper/cli.rb
CHANGED
@@ -9,7 +9,8 @@ class Phper::CLI < CommandLineUtils::CLI
|
|
9
9
|
yield self if block_given?
|
10
10
|
end
|
11
11
|
def dispatch(cmd,cmd_argv)
|
12
|
-
@commands.
|
12
|
+
raise "Unknown command. #{cmd}" unless @commands.commands.include?(cmd)
|
13
|
+
@commands.send(cmd.gsub(/:/,"_"))
|
13
14
|
end
|
14
15
|
def version
|
15
16
|
File.open(File.join(File.dirname(__FILE__) ,
|
data/lib/phper/commands.rb
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
require 'phper'
|
4
|
+
require "parsedate"
|
5
|
+
require "time"
|
4
6
|
|
5
7
|
class Phper::Commands < CommandLineUtils::Commands
|
6
8
|
include Phper
|
9
|
+
attr_reader :commands
|
7
10
|
def initialize
|
8
11
|
super
|
9
12
|
@commands += ["login","logout","list","create","destroy","info"]
|
10
13
|
@commands += ["keys","keys:add","keys:remove","keys:clear"]
|
11
14
|
@commands += ["servers","servers:add","servers:remove"]
|
12
15
|
@commands += ["open","db:init","deploy"]
|
16
|
+
@commands += ["hosts"]
|
17
|
+
@commands += ["files","files:dump","files:get"]
|
18
|
+
@commands += ["files:modified","files:modified:get"]
|
13
19
|
|
14
20
|
@agent = Agent.new
|
15
21
|
# @cache_file = homedir + "/.phper.cache"
|
@@ -341,10 +347,147 @@ class Phper::Commands < CommandLineUtils::Commands
|
|
341
347
|
project["project"]["dbname"]]
|
342
348
|
end
|
343
349
|
|
350
|
+
def hosts
|
351
|
+
project = nil
|
352
|
+
OptionParser.new { |opt|
|
353
|
+
project = extract_project(opt)
|
354
|
+
@summery = "list project hosts"
|
355
|
+
return opt if @help
|
356
|
+
}
|
357
|
+
raise "project is not specified." unless project
|
358
|
+
start
|
359
|
+
@agent.hosts(project).each { |host|
|
360
|
+
puts "%s" % [host["host"]["id"]]
|
361
|
+
}
|
344
362
|
|
363
|
+
end
|
364
|
+
|
365
|
+
def files
|
366
|
+
project = nil
|
367
|
+
params = {}
|
368
|
+
OptionParser.new { |opt|
|
369
|
+
opt.on('-h HOST','--host=HOST', 'host') { |v|
|
370
|
+
params[:host] = v
|
371
|
+
}
|
372
|
+
project = extract_project(opt)
|
373
|
+
@summery = "list project files"
|
374
|
+
return opt if @help
|
375
|
+
}
|
376
|
+
raise "project is not specified." unless project
|
377
|
+
start
|
378
|
+
unless params[:host]
|
379
|
+
host = @agent.hosts(project).first
|
380
|
+
params[:host] = host["host"]["id"]
|
381
|
+
end
|
382
|
+
raise "project has no hosts" unless params[:host]
|
383
|
+
|
384
|
+
@agent.files(project,params[:host]).each { |file|
|
385
|
+
puts "%s" % [file["file"]["name"]]
|
386
|
+
}
|
387
|
+
end
|
388
|
+
|
389
|
+
def files_get
|
390
|
+
@summery = "get and put file."
|
391
|
+
return files_get_one if @help
|
392
|
+
file = files_get_one
|
393
|
+
file_put(file)
|
394
|
+
end
|
395
|
+
|
396
|
+
def files_dump
|
397
|
+
@summery = "dump file."
|
398
|
+
return files_get_one if @help
|
399
|
+
file = files_get_one
|
400
|
+
puts file["file"]["contents"]
|
401
|
+
end
|
402
|
+
|
403
|
+
def files_modified
|
404
|
+
@summery = "list modified files since last deploy."
|
405
|
+
return file_get_modified if @help
|
406
|
+
file_get_modified.each { |file|
|
407
|
+
puts "%s" % [file["file"]["name"]]
|
408
|
+
}
|
409
|
+
end
|
410
|
+
|
411
|
+
def files_modified_get
|
412
|
+
@summery = "get modified files since last deploy."
|
413
|
+
return file_get_modified if @help
|
414
|
+
file_get_modified.each { |file|
|
415
|
+
file = @agent.files(@project,@params[:host],file["file"]["name"])
|
416
|
+
file_put(file)
|
417
|
+
}
|
418
|
+
end
|
419
|
+
|
345
420
|
|
346
421
|
private
|
347
422
|
|
423
|
+
def file_get_modified
|
424
|
+
@params ||= {}
|
425
|
+
OptionParser.new { |opt|
|
426
|
+
opt.on('-h HOST','--host=HOST', 'host') { |v|
|
427
|
+
@params[:host] = v
|
428
|
+
}
|
429
|
+
@project = extract_project(opt)
|
430
|
+
return opt if @help
|
431
|
+
}
|
432
|
+
raise "project is not specified." unless @project
|
433
|
+
start
|
434
|
+
unless @params[:host]
|
435
|
+
host = @agent.hosts(@project).first
|
436
|
+
@params[:host] = host["host"]["id"]
|
437
|
+
end
|
438
|
+
raise "project has no hosts" unless @params[:host]
|
439
|
+
files = @agent.files(@project,@params[:host])
|
440
|
+
modified(files)
|
441
|
+
end
|
442
|
+
|
443
|
+
def file_put file
|
444
|
+
name = file["file"]["name"]
|
445
|
+
raise "Not in under git." unless in_git?
|
446
|
+
|
447
|
+
name = File.join(git_root,name)
|
448
|
+
FileUtils.mkdir_p(File.dirname(name))
|
449
|
+
File.open(name,"w"){ |f|
|
450
|
+
f.write file["file"]["contents"]
|
451
|
+
}
|
452
|
+
puts "--> " + file["file"]["name"]
|
453
|
+
end
|
454
|
+
|
455
|
+
|
456
|
+
def files_get_one
|
457
|
+
project = nil
|
458
|
+
params = {}
|
459
|
+
OptionParser.new { |opt|
|
460
|
+
opt.on('-h HOST','--host=HOST', 'host') { |v|
|
461
|
+
params[:host] = v
|
462
|
+
}
|
463
|
+
@banner = "<filename>"
|
464
|
+
project = extract_project(opt)
|
465
|
+
return opt if @help
|
466
|
+
}
|
467
|
+
raise "project is not specified." unless project
|
468
|
+
file = @command_options.shift
|
469
|
+
raise "file is not specified." unless project
|
470
|
+
|
471
|
+
start
|
472
|
+
unless params[:host]
|
473
|
+
host = @agent.hosts(project).first
|
474
|
+
params[:host] = host["host"]["id"]
|
475
|
+
end
|
476
|
+
raise "project has no hosts" unless params[:host]
|
477
|
+
@agent.files(project,params[:host],file)
|
478
|
+
end
|
479
|
+
|
480
|
+
def modified files
|
481
|
+
marker = files.find { |file|
|
482
|
+
file["file"]["name"] == ".phper.deployed"
|
483
|
+
}
|
484
|
+
"missing marker .phper.deployed file in this host" unless marker
|
485
|
+
marker_mtime = Time.parse(marker["file"]["mtime"])
|
486
|
+
files.collect { |file|
|
487
|
+
file if Time.parse(file["file"]["mtime"]) > marker_mtime
|
488
|
+
}.compact
|
489
|
+
end
|
490
|
+
|
348
491
|
def extract_project opt
|
349
492
|
@banner = [@banner,"[--project=<project>]"].join(" ")
|
350
493
|
project = nil
|
data/lib/phper.rb
CHANGED
@@ -50,6 +50,17 @@ module Phper
|
|
50
50
|
return root
|
51
51
|
end
|
52
52
|
|
53
|
+
def encode(str,salt=".")
|
54
|
+
enc = OpenSSL::Cipher::Cipher.new('aes256')
|
55
|
+
enc.encrypt.pkcs5_keyivgen(salt)
|
56
|
+
((enc.update(str) + enc.final).unpack("H*")).to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
def decode(str,salt=".")
|
60
|
+
dec = OpenSSL::Cipher::Cipher.new('aes256')
|
61
|
+
dec.decrypt.pkcs5_keyivgen(salt)
|
62
|
+
(dec.update(Array.new([str]).pack("H*")) + dec.final)
|
63
|
+
end
|
53
64
|
|
54
65
|
end
|
55
66
|
require "rubygems"
|
data/phper.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{phper}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Yoshihiro TAKAHARA"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-28}
|
13
13
|
s.default_executable = %q{phper}
|
14
14
|
s.description = %q{phper}
|
15
15
|
s.email = %q{y.takahara@gmail.com}
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Yoshihiro TAKAHARA
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-28 00:00:00 +09:00
|
19
19
|
default_executable: phper
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|