dockergsm 0.0.1 → 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 +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
|