vpsmatrix 0.1.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 +7 -0
- data/Gemfile +4 -0
- data/README.md +36 -0
- data/Rakefile +5 -0
- data/bin/vpsx +4 -0
- data/lib/vpsmatrix/config.rb +25 -0
- data/lib/vpsmatrix/starter.rb +134 -0
- data/lib/vpsmatrix/version.rb +3 -0
- data/lib/vpsmatrix.rb +6 -0
- data/vpsmatrix.gemspec +32 -0
- metadata +95 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 375d8957b222ef315120d03691c37d7dd4612582
|
4
|
+
data.tar.gz: 955af47bd16f83401f0d9bc806b87d614b5520f7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9e8ae55fa79dd785f2dee3a90ff1f2344cb1ede145b620df2c01867896b8148fbe3cc485e3a9e0ee9a84da64eb3e05d8ac68f84e4355a416c31422ba85ea4b25
|
7
|
+
data.tar.gz: fc7da70148211841a592092b99f775710b880c861f7ecf02310dfdf1bf25ffe8871c06b877db6e3ca9e958e8bddff716cf3d1970e75e4f2508be2526687d270d
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# Vpsmatrix
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/vpsmatrix`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'vpsmatrix'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install vpsmatrix
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/vpsmatrix.
|
36
|
+
|
data/Rakefile
ADDED
data/bin/vpsx
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
class Config
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@file_path = ".vps_matrix/config.yml"
|
7
|
+
unless File.exists? @file_path
|
8
|
+
Dir.mkdir ".vpsmatrix"
|
9
|
+
File.open(@file_path, 'w') do |file|
|
10
|
+
file.write "comment: 'Config file for VPS Matrix services'"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
@content = YAML::load_file(@file_path)
|
14
|
+
end
|
15
|
+
|
16
|
+
def content
|
17
|
+
@content
|
18
|
+
end
|
19
|
+
|
20
|
+
# how to write with nested keys
|
21
|
+
def write key, value
|
22
|
+
@content[key] = value
|
23
|
+
File.open(@file_path, 'w') { |f| YAML.dump(@content, f) }
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'digest'
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
class Starter < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
desc 'deploy', 'run deploy to deploy app to VPS Matrix demo server'
|
10
|
+
def deploy
|
11
|
+
|
12
|
+
##
|
13
|
+
# check SSH key in .vpsmatrix dir, else generate new
|
14
|
+
# generate ~/.vpsmatrix/config.yml
|
15
|
+
# generate ~/.vpsmatrix/id_rsa.pub
|
16
|
+
|
17
|
+
## check for .vpsmatrix_config
|
18
|
+
## no?
|
19
|
+
# generate .vpsmatrix_config.yml
|
20
|
+
# ask for API KEY
|
21
|
+
# write it to .vpsmatrix_config.yml
|
22
|
+
## yes?
|
23
|
+
# read API KEY
|
24
|
+
|
25
|
+
|
26
|
+
# there should be only one SSH key for all apps right? So dir in home with general config and SSH key
|
27
|
+
# then one config file in app folder?
|
28
|
+
unless File.exists? ".vpsmatrix/id_rsa.pub"
|
29
|
+
# Generate SSH key
|
30
|
+
end
|
31
|
+
|
32
|
+
@app_name = Dir.pwd.split(File::SEPARATOR).last
|
33
|
+
unless Config.new.content['api_key']
|
34
|
+
# ask for it to server
|
35
|
+
api_key = send_get_request "https://api.vpsmatrix.net/uploads/get_api_key", {ssh_key: ssh_key}
|
36
|
+
Config.new.write 'api_key', api_key
|
37
|
+
end
|
38
|
+
|
39
|
+
read_files
|
40
|
+
stream_file
|
41
|
+
|
42
|
+
# https://api.vpsmatrix.net/uploads/get_new_files
|
43
|
+
|
44
|
+
# detect rails? DB in (pg, mysql, sqlite, nodb)?
|
45
|
+
# no? - do you wish us to check it?
|
46
|
+
|
47
|
+
# send SSH key and API KEY to API app
|
48
|
+
|
49
|
+
# -> OK
|
50
|
+
# upload app to API, use rsync or something easy
|
51
|
+
|
52
|
+
|
53
|
+
# -> return error message (no account, etc.)
|
54
|
+
|
55
|
+
# run deploy on API app
|
56
|
+
# receive DONE deploy -> show URL
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
no_commands do
|
61
|
+
def read_files
|
62
|
+
|
63
|
+
# TODO check size of directory
|
64
|
+
working_dir = Dir.pwd
|
65
|
+
list_of_files = Dir.glob "#{working_dir}/**/*"
|
66
|
+
list_of_files.reject! {|path| path =~ /\/log|\/tmp/}
|
67
|
+
File.open("files_to_send", 'w') do |temp_file|
|
68
|
+
list_of_files.each do |file|
|
69
|
+
if File.file? file
|
70
|
+
file_content = File.read(file)
|
71
|
+
temp_file.write "#{file}\n"
|
72
|
+
temp_file.write "#{file_content}\n"
|
73
|
+
temp_file.write "#{Digest::SHA256.hexdigest(file_content)}\n"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def stream_file
|
80
|
+
uri = URI.parse("https://api.vpsmatrix.net/uploads/send_new_files")
|
81
|
+
|
82
|
+
# stream version
|
83
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
84
|
+
req = Net::HTTP::Put.new(uri)
|
85
|
+
req.add_field('Transfer-Encoding', 'chunked')
|
86
|
+
request.basic_auth("test_app", "test_app")
|
87
|
+
req.body_stream = File.open("files_to_send")
|
88
|
+
|
89
|
+
http.request request do |response|
|
90
|
+
# puts response
|
91
|
+
response.read_body do |chunk|
|
92
|
+
puts chunk
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def send_put_request
|
99
|
+
uri = URI.parse("https://api.vpsmatrix.net/uploads/send_new_files")
|
100
|
+
|
101
|
+
# no stream version
|
102
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
103
|
+
request = Net::HTTP::Put.new(uri.request_uri)
|
104
|
+
request.basic_auth("test_app", "test_app")
|
105
|
+
request.set_form_data({"file" => File.read("files_to_send")})
|
106
|
+
http.request request
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def send_get_request endpoint, params={} #https://api.vpsmatrix.net/uploads/get_file_list
|
111
|
+
uri = URI.parse(endpoint)
|
112
|
+
uri.query = URI.encode_www_form(params)
|
113
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
114
|
+
http.use_ssl = true
|
115
|
+
req = Net::HTTP::Get.new(uri.path)
|
116
|
+
req.basic_auth("test_app", "test_app")
|
117
|
+
http.request(req)
|
118
|
+
#res = Net::HTTP.get_response(uri)
|
119
|
+
end
|
120
|
+
|
121
|
+
def read_dirs
|
122
|
+
working_dir = Dir.pwd
|
123
|
+
list_of_files = Dir.glob "#{working_dir}/**/*"
|
124
|
+
dirs_string = ""
|
125
|
+
|
126
|
+
list_of_files.map do |file|
|
127
|
+
if File.directory file
|
128
|
+
dirs_string += "#{file}\n"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
dirs_string
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
data/lib/vpsmatrix.rb
ADDED
data/vpsmatrix.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'vpsmatrix/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "vpsmatrix"
|
8
|
+
spec.version = Vpsmatrix::VERSION
|
9
|
+
spec.authors = ["mousse"]
|
10
|
+
spec.email = ["mousse@timepress.cz"]
|
11
|
+
|
12
|
+
spec.summary = %q{Gem for easy deployment to VPS Matrix servers.}
|
13
|
+
spec.description = %q{Work in progress}
|
14
|
+
spec.homepage = "http://www.vpsmatrix.co.uk"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
17
|
+
# delete this section to allow pushing this gem to any host.
|
18
|
+
if spec.respond_to?(:metadata)
|
19
|
+
#spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
+
else
|
21
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
+
end
|
23
|
+
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
#spec.bindir = "exe"
|
26
|
+
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
30
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
31
|
+
spec.add_runtime_dependency "thor"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vpsmatrix
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- mousse
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Work in progress
|
56
|
+
email:
|
57
|
+
- mousse@timepress.cz
|
58
|
+
executables:
|
59
|
+
- vpsx
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- Gemfile
|
64
|
+
- README.md
|
65
|
+
- Rakefile
|
66
|
+
- bin/vpsx
|
67
|
+
- lib/vpsmatrix.rb
|
68
|
+
- lib/vpsmatrix/config.rb
|
69
|
+
- lib/vpsmatrix/starter.rb
|
70
|
+
- lib/vpsmatrix/version.rb
|
71
|
+
- vpsmatrix.gemspec
|
72
|
+
homepage: http://www.vpsmatrix.co.uk
|
73
|
+
licenses: []
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 2.6.4
|
92
|
+
signing_key:
|
93
|
+
specification_version: 4
|
94
|
+
summary: Gem for easy deployment to VPS Matrix servers.
|
95
|
+
test_files: []
|