dockergsm 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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