dockergsm 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/dockergsm +46 -22
- data/lib/dockergsm.rb +45 -4
- data/lib/games.yml +14 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a7241ac47849a514c30b27ad78325d3a93f09f2
|
4
|
+
data.tar.gz: 8038981052503826047af3b2ef3b8431c13b8604
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a4ced2015e573caef13b6e515dd940058332baddfdd8a79fd0a408ca5a7326ce24282dd42238f2da2df594bdec0d18234046ec710f2ee3a0f17a4d8ea006d4d
|
7
|
+
data.tar.gz: f60ab753b313c6c54c8571fa0d602b1f51424289b694b28ef2d5eb0ad5b5cd5ccd212c2ac59637fd6f5f8d4279ab3dd0d70710a080b66730e8f7a5ca56d3e401
|
data/bin/dockergsm
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require 'dockergsm'
|
2
|
+
# require 'dockergsm'
|
3
|
+
require_relative '../lib/dockergsm.rb'
|
3
4
|
require 'thor'
|
4
5
|
|
5
6
|
# provide yes/no dialog
|
6
|
-
def yn_dialog(message, default)
|
7
|
+
def yn_dialog(message, default = false)
|
7
8
|
result = :initial
|
8
9
|
until ['y', 'n', 'Y', 'N', 'yes', 'no', 'Yes', 'No', ''].include? result
|
9
10
|
puts "Unable to parse response: #{result}." unless result == :initial
|
@@ -17,50 +18,73 @@ def yn_dialog(message, default)
|
|
17
18
|
end
|
18
19
|
|
19
20
|
# run error handling
|
20
|
-
def
|
21
|
-
puts before
|
21
|
+
def err_handler(before, after, command)
|
22
|
+
puts before if before
|
22
23
|
begin
|
24
|
+
# check for daemon
|
25
|
+
`docker ps`
|
26
|
+
raise 'cannot connect to the Docker daemon' unless $?.success?
|
27
|
+
|
23
28
|
command.call
|
24
29
|
rescue RuntimeError => e
|
25
|
-
puts "ERROR: #{e.message}
|
30
|
+
puts "ERROR: #{e.message}"
|
31
|
+
else
|
32
|
+
puts after if after
|
26
33
|
end
|
27
|
-
puts after
|
28
34
|
end
|
29
35
|
|
30
36
|
# cli class
|
31
37
|
class Engine < Thor
|
32
38
|
package_name 'DockerGSM'
|
33
39
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
40
|
+
desc 'list', 'list supported servers'
|
41
|
+
def list
|
42
|
+
YAML.load_file("#{__dir__}/../lib/games.yml").each do |key, value|
|
43
|
+
puts "#{key}: #{value['name']}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'create ID', 'create and start new server'
|
48
|
+
method_option :port, type: :numeric, aliases: '-p'
|
49
|
+
method_option :game, required: true, type: :string, aliases: '-g'
|
50
|
+
def create(id)
|
51
|
+
err_handler("Creating server #{id} (game: #{options.game})...",
|
52
|
+
"Successfully created server #{id}\n" \
|
53
|
+
"Run `dockergsm status #{id}` to view server status",
|
54
|
+
proc { GSM.create(options.game, id, options.port) })
|
38
55
|
end
|
39
56
|
|
40
|
-
|
41
|
-
desc 'start ID', 'start an existing server'
|
57
|
+
desc 'start ID', 'start server'
|
42
58
|
def start(id)
|
43
|
-
|
59
|
+
err_handler("Starting server #{id}...",
|
60
|
+
"Successfully started server #{id}\n" \
|
61
|
+
"Run `dockergsm status #{id}` to view server status",
|
62
|
+
proc { GSM.start(id) })
|
63
|
+
end
|
64
|
+
|
65
|
+
desc 'status ID', 'get status of server'
|
66
|
+
def status(id)
|
67
|
+
err_handler(false, false, proc { GSM.status(id) })
|
44
68
|
end
|
45
69
|
|
46
|
-
|
47
|
-
desc 'stop ID', 'stop an existing server'
|
70
|
+
desc 'stop ID', 'stop server'
|
48
71
|
def stop(id)
|
49
|
-
|
72
|
+
err_handler("Stopping server #{id}...",
|
73
|
+
"Successfully stopped server #{id}",
|
74
|
+
proc { GSM.stop(id) })
|
50
75
|
end
|
51
76
|
|
52
|
-
|
53
|
-
desc 'delete ID', 'delete an existing game server'
|
77
|
+
desc 'delete ID', 'delete server'
|
54
78
|
method_option :force, type: :boolean, default: false, aliases: '-f'
|
55
79
|
def delete(id)
|
56
80
|
unless options.force?
|
57
|
-
result = yn_dialog("Are you sure you want to delete server #{id}? (y/N) "
|
58
|
-
false)
|
81
|
+
result = yn_dialog("Are you sure you want to delete server #{id}? (y/N) ")
|
59
82
|
end
|
60
83
|
|
61
84
|
if result || options.force?
|
62
|
-
|
63
|
-
|
85
|
+
err_handler("Deleting server #{id}...",
|
86
|
+
"Successfully deleted server #{id}",
|
87
|
+
proc { GSM.delete(id) })
|
64
88
|
else
|
65
89
|
puts 'Aborted process.'
|
66
90
|
end
|
data/lib/dockergsm.rb
CHANGED
@@ -1,9 +1,50 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'yaml'
|
3
|
+
|
1
4
|
module GSM
|
2
|
-
def self.create(
|
5
|
+
def self.create(game, id, port)
|
6
|
+
# check if game valid
|
7
|
+
configs = YAML.load_file("#{__dir__}/games.yml")
|
8
|
+
raise "game '#{game}' is not yet supported" unless configs.key? game
|
9
|
+
|
10
|
+
# get server configs
|
11
|
+
config = configs[game]
|
12
|
+
port ||= config['port_default']
|
13
|
+
command = "docker run #{config['options']} " \
|
14
|
+
"#{config['port_opt'].sub!('PORT', port.to_s)} " \
|
15
|
+
"--name #{id} #{config['image']}"
|
16
|
+
|
17
|
+
# create server
|
18
|
+
# `#{command}`
|
19
|
+
p command
|
20
|
+
raise 'failed to create server' unless $?.success?
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.start(id)
|
24
|
+
# start server
|
25
|
+
`docker start #{id}`
|
26
|
+
raise 'failed to start server' unless $?.success?
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.status(id)
|
30
|
+
# get inspect data
|
31
|
+
raw_data = `docker inspect #{id}`
|
32
|
+
raise "server #{id} does not exist" unless $?.success?
|
3
33
|
|
4
|
-
|
34
|
+
# output status
|
35
|
+
data = JSON.parse(raw_data)
|
36
|
+
puts "Status of #{id}: #{data[0]['State']['Status']}"
|
37
|
+
end
|
5
38
|
|
6
|
-
def self.stop(id)
|
39
|
+
def self.stop(id)
|
40
|
+
# stop server
|
41
|
+
`docker stop #{id}`
|
42
|
+
raise 'failed to stop server' unless $?.success?
|
43
|
+
end
|
7
44
|
|
8
|
-
def self.delete(id)
|
45
|
+
def self.delete(id)
|
46
|
+
# delete server
|
47
|
+
`docker rm #{id}`
|
48
|
+
raise 'failed to delete server' unless $?.success?
|
49
|
+
end
|
9
50
|
end
|
data/lib/games.yml
CHANGED
@@ -1,5 +1,14 @@
|
|
1
|
-
|
2
|
-
name:
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
mc:
|
2
|
+
name: Minecraft Java Edition
|
3
|
+
image: itzg/minecraft-server
|
4
|
+
options: -e EULA=TRUE -d
|
5
|
+
port_opt: -p PORT:25565
|
6
|
+
port_default: 25565
|
7
|
+
repo: https://github.com/itzg/docker-minecraft-server
|
8
|
+
mc-bedrock:
|
9
|
+
name: Minecraft Bedrock Edition
|
10
|
+
image: itzg/minecraft-bedrock-server
|
11
|
+
options: -e EULA=TRUE -d
|
12
|
+
port_opt: -p PORT:19132/udp
|
13
|
+
port_default: 19132
|
14
|
+
repo: https://github.com/itzg/docker-minecraft-bedrock-server
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockergsm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Quail
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -26,8 +26,8 @@ dependencies:
|
|
26
26
|
version: 0.20.0
|
27
27
|
description: |-
|
28
28
|
DockerGSM is a game server tool written in Ruby for managing
|
29
|
-
|
30
|
-
|
29
|
+
large numbers of servers for a variety of games from one location. To get a
|
30
|
+
list of commands, run `dockergsm help`.
|
31
31
|
email: josh@madbean.com
|
32
32
|
executables:
|
33
33
|
- dockergsm
|