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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dockergsm +46 -22
  3. data/lib/dockergsm.rb +45 -4
  4. data/lib/games.yml +14 -5
  5. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f5d241ae004b6265fb276f4e010734e55bf1d07
4
- data.tar.gz: 6c5c8504fe520eb857ed1fa31c5a9253c2ff7dfc
3
+ metadata.gz: 0a7241ac47849a514c30b27ad78325d3a93f09f2
4
+ data.tar.gz: 8038981052503826047af3b2ef3b8431c13b8604
5
5
  SHA512:
6
- metadata.gz: b3c868831a1ca1f97364c585de89cf451367edb8e4ff532ca2585e49a1c46e6932e409689c547ea29ef02f6d3bf201d7f1095244aeeed8716f331deefd61a502
7
- data.tar.gz: e7e430b0152cd4e1893a46522600cfa5d559911d2d6d5d8967715f484c31a118c278375b4a72b2043a17d30728e0abab9ead6dd115f2601be8c1b6ab7df81872
6
+ metadata.gz: 2a4ced2015e573caef13b6e515dd940058332baddfdd8a79fd0a408ca5a7326ce24282dd42238f2da2df594bdec0d18234046ec710f2ee3a0f17a4d8ea006d4d
7
+ data.tar.gz: f60ab753b313c6c54c8571fa0d602b1f51424289b694b28ef2d5eb0ad5b5cd5ccd212c2ac59637fd6f5f8d4279ab3dd0d70710a080b66730e8f7a5ca56d3e401
@@ -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 basic_err(before, after, command)
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
- # create a server (game: GAME, id: SERVER_ID)
35
- desc 'create GAME SERVER_ID', 'create and start a new game server'
36
- def create(game, id)
37
- GSM.create(game, id)
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
- # start a server (id: ID)
41
- desc 'start ID', 'start an existing server'
57
+ desc 'start ID', 'start server'
42
58
  def start(id)
43
- GSM.start(id)
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
- # stop a server (id: ID)
47
- desc 'stop ID', 'stop an existing server'
70
+ desc 'stop ID', 'stop server'
48
71
  def stop(id)
49
- GSM.stop(id)
72
+ err_handler("Stopping server #{id}...",
73
+ "Successfully stopped server #{id}",
74
+ proc { GSM.stop(id) })
50
75
  end
51
76
 
52
- # delete a server (id: ID), requires confirmation
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
- basic_err("Deleting server #{id}...", 'Successfully deleted server ' \
63
- "#{id}.", proc { GSM.delete(id) })
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
@@ -1,9 +1,50 @@
1
+ require 'json'
2
+ require 'yaml'
3
+
1
4
  module GSM
2
- def self.create(name, id); end
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
- def self.start(id); end
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); end
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); end
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
@@ -1,5 +1,14 @@
1
- example:
2
- name: 'Example'
3
- version: '1.0'
4
- image: 'foo/bar'
5
- options: '-a -b -c -d'
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.1
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-17 00:00:00.000000000 Z
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
- a large number of servers for a large number of games from one location. Run
30
- `dockergsm help` to get a list of commands.
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