dockergsm 0.1.0 → 0.1.1

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 +13 -4
  3. data/lib/dockergsm.rb +19 -9
  4. data/lib/games.yml +44 -4
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a7241ac47849a514c30b27ad78325d3a93f09f2
4
- data.tar.gz: 8038981052503826047af3b2ef3b8431c13b8604
3
+ metadata.gz: eab6a686b4bec781787445ea1cc8c9fe70046f66
4
+ data.tar.gz: d9ce95ca2c93e04f2bd8a57c26f78fb1f277adb6
5
5
  SHA512:
6
- metadata.gz: 2a4ced2015e573caef13b6e515dd940058332baddfdd8a79fd0a408ca5a7326ce24282dd42238f2da2df594bdec0d18234046ec710f2ee3a0f17a4d8ea006d4d
7
- data.tar.gz: f60ab753b313c6c54c8571fa0d602b1f51424289b694b28ef2d5eb0ad5b5cd5ccd212c2ac59637fd6f5f8d4279ab3dd0d70710a080b66730e8f7a5ca56d3e401
6
+ metadata.gz: d4fb2a6b7835e1e33f79e555baf0a79e4f69069a8a2f4c7c737967844ee3849f004a0dff63979b306d00eb055c9db0f5141275b584df5741a7268003e35bd5bb
7
+ data.tar.gz: 4647b2e1dd96c6844f55b70e95ef249130988bd81b3d18d1d8c44e30179bc1c29b5dc4a7f6e5ea6093639a8b6d4d79361318806278737ec9332e016bc1cbf2df
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- # require 'dockergsm'
3
- require_relative '../lib/dockergsm.rb'
2
+ require 'dockergsm'
4
3
  require 'thor'
4
+ require 'yaml'
5
5
 
6
6
  # provide yes/no dialog
7
7
  def yn_dialog(message, default = false)
@@ -39,19 +39,23 @@ class Engine < Thor
39
39
 
40
40
  desc 'list', 'list supported servers'
41
41
  def list
42
+ puts "GAME\tFULL NAME"
42
43
  YAML.load_file("#{__dir__}/../lib/games.yml").each do |key, value|
43
- puts "#{key}: #{value['name']}"
44
+ puts "#{key}\t#{value['name']}"
44
45
  end
45
46
  end
46
47
 
47
48
  desc 'create ID', 'create and start new server'
48
49
  method_option :port, type: :numeric, aliases: '-p'
49
50
  method_option :game, required: true, type: :string, aliases: '-g'
51
+ method_option :config, type: :string, aliases: '-o'
50
52
  def create(id)
51
53
  err_handler("Creating server #{id} (game: #{options.game})...",
52
54
  "Successfully created server #{id}\n" \
53
55
  "Run `dockergsm status #{id}` to view server status",
54
- proc { GSM.create(options.game, id, options.port) })
56
+ proc {
57
+ GSM.create(options.game, id, options.port, options.config)
58
+ })
55
59
  end
56
60
 
57
61
  desc 'start ID', 'start server'
@@ -62,6 +66,11 @@ class Engine < Thor
62
66
  proc { GSM.start(id) })
63
67
  end
64
68
 
69
+ desc 'console ID', 'open server console'
70
+ def console(id)
71
+ err_handler(false, false, proc { GSM.console(id) })
72
+ end
73
+
65
74
  desc 'status ID', 'get status of server'
66
75
  def status(id)
67
76
  err_handler(false, false, proc { GSM.status(id) })
@@ -2,7 +2,7 @@ require 'json'
2
2
  require 'yaml'
3
3
 
4
4
  module GSM
5
- def self.create(game, id, port)
5
+ def self.create(game, id, port, opt)
6
6
  # check if game valid
7
7
  configs = YAML.load_file("#{__dir__}/games.yml")
8
8
  raise "game '#{game}' is not yet supported" unless configs.key? game
@@ -10,13 +10,12 @@ module GSM
10
10
  # get server configs
11
11
  config = configs[game]
12
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']}"
13
+ command = "docker run -e DOCKERGSM_IMAGE #{game} #{config['options']} " \
14
+ "#{config['port_opt'].gsub!('PORT', port.to_s)} " \
15
+ "--name #{id} #{config['image']} #{opt}"
16
16
 
17
17
  # create server
18
- # `#{command}`
19
- p command
18
+ `#{command}`
20
19
  raise 'failed to create server' unless $?.success?
21
20
  end
22
21
 
@@ -26,14 +25,25 @@ module GSM
26
25
  raise 'failed to start server' unless $?.success?
27
26
  end
28
27
 
28
+ def self.console(id)
29
+ # get game type
30
+ data = `docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' #{id}`
31
+ raise "server #{id} does not exist" unless $?.success?
32
+
33
+ # run specific console
34
+ image = data.split(/\n/).find { |e| /DOCKERGSM_IMAGE/ =~ e }[16..-1]
35
+ config = YAML.load_file("#{__dir__}/games.yml")[image]
36
+ puts "INFO: exit the console with #{config['console_esc']}"
37
+ exec config['console'].sub!('ID', id)
38
+ end
39
+
29
40
  def self.status(id)
30
41
  # get inspect data
31
- raw_data = `docker inspect #{id}`
42
+ data = `docker inspect -f '{{.State.Status}}' #{id}`
32
43
  raise "server #{id} does not exist" unless $?.success?
33
44
 
34
45
  # output status
35
- data = JSON.parse(raw_data)
36
- puts "Status of #{id}: #{data[0]['State']['Status']}"
46
+ puts "Status of #{id}: #{data}"
37
47
  end
38
48
 
39
49
  def self.stop(id)
@@ -1,14 +1,54 @@
1
1
  mc:
2
- name: Minecraft Java Edition
2
+ name: 'Minecraft: Java Edition'
3
3
  image: itzg/minecraft-server
4
- options: -e EULA=TRUE -d
4
+ options: -e EULA=TRUE -d -it
5
5
  port_opt: -p PORT:25565
6
6
  port_default: 25565
7
+ console: docker attach ID
8
+ console_esc: Ctrl-P, Ctrl-Q
7
9
  repo: https://github.com/itzg/docker-minecraft-server
8
- mc-bedrock:
9
- name: Minecraft Bedrock Edition
10
+ mcb:
11
+ name: 'Minecraft: Bedrock Edition'
10
12
  image: itzg/minecraft-bedrock-server
11
13
  options: -e EULA=TRUE -d
12
14
  port_opt: -p PORT:19132/udp
13
15
  port_default: 19132
16
+ console: docker attach ID
17
+ console_esc: Ctrl-P + Ctrl-Q
14
18
  repo: https://github.com/itzg/docker-minecraft-bedrock-server
19
+ csgo:
20
+ name: 'Counter-Strike: Global Offensive'
21
+ image: gonzih/csgo-server
22
+ options: -d
23
+ port_opt: -p PORT:27015 -p PORT:27015/udp
24
+ port_default: 27015
25
+ console: docker exec -i ID rcon-cli
26
+ console_esc: Ctrl-C
27
+ repo: https://github.com/Gonzih/docker-csgo-server
28
+ tf2:
29
+ name: Team Fortress 2
30
+ image: gonzih/tf2-server
31
+ options: -d
32
+ port_opt: -p PORT:27015/udp
33
+ port_default: 27015
34
+ console: docker exec -i ID rcon-cli
35
+ console_esc: Ctrl-C
36
+ repo: https://github.com/Gonzih/docker-tf2-server
37
+ fact:
38
+ name: Factorio
39
+ image: factoriotools/factorio
40
+ options: -d -it
41
+ port_opt: -p PORT:34197/udp -p 27015:27015/tcp
42
+ port_default: 34197
43
+ console: docker attach ID
44
+ console_esc: Ctrl-P + Ctrl-Q
45
+ repo: https://github.com/factoriotools/factorio-docker
46
+ gmod:
47
+ name: Garry's Mod
48
+ image: suchipi/gmod-server
49
+ options: -d -it
50
+ port_opt: -p PORT:27015/udp
51
+ port_default: 27015
52
+ console: docker attach ID
53
+ console_esc: Ctrl-P + Ctrl-Q
54
+ repo: https://github.com/Gonzih/docker-tf2-server
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockergsm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Quail