aws_minecraft 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 +7 -0
- data/.gitignore +7 -0
- data/.rspec +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +61 -0
- data/LICENSE +21 -0
- data/README.md +171 -0
- data/ROADMAP.md +46 -0
- data/Rakefile +10 -0
- data/aws_minecraft.gemspec +32 -0
- data/bin/aws_minecraft.rb +70 -0
- data/cfg/config.yml +2 -0
- data/cfg/ec2_conf.json +11 -0
- data/cfg/instances.sql +5 -0
- data/cfg/sg_config.json +20 -0
- data/cfg/user_data.sh +21 -0
- data/img/attach-detach.png +0 -0
- data/img/attach_no_session.png +0 -0
- data/img/attached_session.png +0 -0
- data/img/create.png +0 -0
- data/img/create_in_progress.png +0 -0
- data/img/stop_server.png +0 -0
- data/img/terminate.png +0 -0
- data/img/upload.png +0 -0
- data/lib/aws_minecraft.rb +117 -0
- data/lib/aws_minecraft/aws_helper.rb +150 -0
- data/lib/aws_minecraft/db_helper.rb +48 -0
- data/lib/aws_minecraft/mine_config.rb +15 -0
- data/lib/aws_minecraft/ssh_helper.rb +52 -0
- data/lib/aws_minecraft/upload_helper.rb +23 -0
- data/lib/aws_minecraft/version.rb +5 -0
- data/spec/aws_helper_spec.rb +98 -0
- data/spec/awsmine_spec.rb +134 -0
- data/spec/config_spec.rb +18 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/ssh_helper_spec.rb +0 -0
- data/spec/upload_helper_spec.rb +0 -0
- metadata +140 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'mine_config'
|
2
|
+
require 'net/scp'
|
3
|
+
|
4
|
+
module AWSMine
|
5
|
+
# Main wrapper for Uploading files and the world
|
6
|
+
class UploadHelper
|
7
|
+
def initialize
|
8
|
+
@config = MineConfig.new
|
9
|
+
@logger = Logger.new(STDOUT)
|
10
|
+
@logger.level = Logger.const_get(@config.loglevel)
|
11
|
+
end
|
12
|
+
|
13
|
+
def upload_files(ip)
|
14
|
+
Net::SCP.start(ip, 'ec2-user') do |scp|
|
15
|
+
scp.upload!(@config.upload_path,
|
16
|
+
'/home/ec2-user/data',
|
17
|
+
recursive: true) do |_, name, sent, total|
|
18
|
+
@logger.info("#{name}: #{sent}/#{total}")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'aws_minecraft/aws_helper'
|
2
|
+
require 'fakefs/spec_helpers'
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'aws-sdk'
|
5
|
+
|
6
|
+
describe AWSMine::AWSHelper do
|
7
|
+
include_context 'with aws minecraft'
|
8
|
+
let(:ec2_client) { instance_double(Aws::EC2::Client) }
|
9
|
+
let(:ec2_resource) { instance_double(Aws::EC2::Resource) }
|
10
|
+
let(:sg) { instance_double(Aws::EC2::SecurityGroup) }
|
11
|
+
let(:ec2) { instance_double(Aws::EC2::Instance) }
|
12
|
+
let(:ec2s) { instance_double(Aws::EC2::Instances) }
|
13
|
+
let(:client) { instance_double(Aws::Client) }
|
14
|
+
let(:state) { instance_double(Aws::EC2::Types::InstanceState) }
|
15
|
+
|
16
|
+
subject do |s|
|
17
|
+
s = described_class.new
|
18
|
+
s.ec2_client = ec2_client
|
19
|
+
s.ec2_resource = ec2_resource
|
20
|
+
s
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#initialize' do
|
24
|
+
it 'should be an instance of MineConfig' do
|
25
|
+
expect(subject).instance_of? AWSMine::AWSHelper
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#create_ec2' do
|
30
|
+
it 'should create an ec2 instance' do
|
31
|
+
expect(ec2_client).to receive(:describe_key_pairs).with(key_names: ['minecraft_keys'])
|
32
|
+
expect(ec2_resource).to receive(:create_security_group).with(dry_run: false,
|
33
|
+
group_name: 'mine_group',
|
34
|
+
description: 'minecraft_group')
|
35
|
+
.and_return(sg)
|
36
|
+
expect(sg).to receive(:authorize_ingress)
|
37
|
+
expect(sg).to receive(:id).and_return('sg-1')
|
38
|
+
expect(ec2_resource).to receive(:create_instances)
|
39
|
+
.with(dry_run: false,
|
40
|
+
image_id: 'ami-ea26ce85',
|
41
|
+
key_name: 'minecraft_keys',
|
42
|
+
min_count: 1,
|
43
|
+
max_count: 1,
|
44
|
+
instance_type: 't2.nano',
|
45
|
+
monitoring: { enabled: true },
|
46
|
+
security_group_ids: ['sg-1'],
|
47
|
+
user_data: "ICAgICAgICAgICEjL2Jpbi9iYXNo\n")
|
48
|
+
.and_return([ec2])
|
49
|
+
expect(ec2_resource).to receive(:client).and_return(client)
|
50
|
+
expect(ec2).to receive(:id).exactly(4).times.and_return('ec2-id')
|
51
|
+
expect(client).to receive(:wait_until).with(:instance_status_ok, instance_ids: ['ec2-id'])
|
52
|
+
expect(ec2_resource).to receive(:instances).with(instance_ids: ['ec2-id']).and_return([ec2])
|
53
|
+
expect(ec2).to receive(:public_ip_address).twice.and_return('1.2.3.4')
|
54
|
+
expect(subject.create_ec2).to eq(['1.2.3.4', 'ec2-id'])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#terminate_ec2' do
|
59
|
+
it 'should terminate an ec2 instance' do
|
60
|
+
expect(ec2_client).to receive(:terminate_instances).with(dry_run: false,
|
61
|
+
instance_ids: ['ec2-id'])
|
62
|
+
expect(ec2_resource).to receive(:client).and_return(client)
|
63
|
+
expect(client).to receive(:wait_until).with(:instance_terminated, instance_ids: ['ec2-id'])
|
64
|
+
subject.terminate_ec2('ec2-id')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '#stop_ec2' do
|
69
|
+
it 'should stop an ec2 instance' do
|
70
|
+
expect(ec2_client).to receive(:stop_instances).with(dry_run: false,
|
71
|
+
instance_ids: ['ec2-id'])
|
72
|
+
expect(ec2_resource).to receive(:client).and_return(client)
|
73
|
+
expect(client).to receive(:wait_until).with(:instance_stopped, instance_ids: ['ec2-id'])
|
74
|
+
subject.stop_ec2('ec2-id')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#start_ec2' do
|
79
|
+
it 'should start an ec2 instance' do
|
80
|
+
expect(ec2_client).to receive(:start_instances).with(dry_run: false,
|
81
|
+
instance_ids: ['ec2-id'])
|
82
|
+
expect(ec2_resource).to receive(:client).and_return(client)
|
83
|
+
expect(client).to receive(:wait_until).with(:instance_running, instance_ids: ['ec2-id'])
|
84
|
+
expect(ec2_resource).to receive(:instances).with(instance_ids: ['ec2-id']).and_return([ec2])
|
85
|
+
expect(ec2).to receive(:public_ip_address).twice.and_return('1.2.3.4')
|
86
|
+
expect(subject.start_ec2('ec2-id')).to eq('1.2.3.4')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe '#state' do
|
91
|
+
it 'should return the state of an existing instance' do
|
92
|
+
expect(ec2_resource).to receive(:instances).with(instance_ids: ['ec2-id']).and_return([ec2])
|
93
|
+
expect(ec2).to receive(:state).and_return(state)
|
94
|
+
expect(state).to receive(:name).and_return('running')
|
95
|
+
expect(subject.state('ec2-id')).to eq('running')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'aws_minecraft'
|
2
|
+
require 'fakefs/spec_helpers'
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe AWSMine::AWSMine, fakefs: true do
|
6
|
+
include_context 'with aws minecraft'
|
7
|
+
let(:db) { instance_double(AWSMine::DBHelper) }
|
8
|
+
let(:aws) { instance_double(AWSMine::AWSHelper) }
|
9
|
+
let(:ssh) { instance_double(AWSMine::SSHHelper) }
|
10
|
+
let(:upload) { instance_double(AWSMine::UploadHelper) }
|
11
|
+
subject do |s|
|
12
|
+
s = described_class.new
|
13
|
+
s.aws_helper = aws
|
14
|
+
s.db_helper = db
|
15
|
+
s.upload_helper = upload
|
16
|
+
s.ssh_helper = ssh
|
17
|
+
s
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#create_instance' do
|
21
|
+
it 'should create an instance if it does not exists' do
|
22
|
+
expect(db).to receive(:instance_exists?).and_return(false)
|
23
|
+
expect(aws).to receive(:create_ec2).and_return(['1.2.3.4', 'i-asdf'])
|
24
|
+
expect(db).to receive(:store_instance).with('1.2.3.4', 'i-asdf')
|
25
|
+
subject.create_instance
|
26
|
+
end
|
27
|
+
it 'should return status and ip of instance if it already exists' do
|
28
|
+
expect(db).to receive(:instance_exists?).and_return(true)
|
29
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
30
|
+
expect(aws).to receive(:state).and_return('running')
|
31
|
+
subject.create_instance
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#start_instance' do
|
36
|
+
it 'should start an instance if it exists' do
|
37
|
+
expect(db).to receive(:instance_exists?).and_return(true)
|
38
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
39
|
+
expect(aws).to receive(:start_ec2).with('i-asdf').and_return('2.3.4.5')
|
40
|
+
expect(db).to receive(:update_instance).with('2.3.4.5', 'i-asdf')
|
41
|
+
subject.start_instance
|
42
|
+
end
|
43
|
+
it 'should return if instance does not exist' do
|
44
|
+
expect(db).to receive(:instance_exists?).and_return(false)
|
45
|
+
subject.start_instance
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#stop_instance' do
|
50
|
+
it 'should stop an instance if it exists' do
|
51
|
+
expect(db).to receive(:instance_exists?).and_return(true)
|
52
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
53
|
+
expect(aws).to receive(:stop_ec2).with('i-asdf').and_return('2.3.4.5')
|
54
|
+
subject.stop_instance
|
55
|
+
end
|
56
|
+
it 'should return if instance does not exist' do
|
57
|
+
expect(db).to receive(:instance_exists?).and_return(false)
|
58
|
+
subject.stop_instance
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#terminate_instance' do
|
63
|
+
it 'should terminate an instance if it exists and delete it from the db' do
|
64
|
+
expect(db).to receive(:instance_exists?).and_return(true)
|
65
|
+
allow($stdin).to receive(:gets) { 'y' }
|
66
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
67
|
+
expect(aws).to receive(:terminate_ec2).with('i-asdf')
|
68
|
+
expect(db).to receive(:remove_instance)
|
69
|
+
subject.terminate_instance
|
70
|
+
end
|
71
|
+
it 'should return if user chooses to not to terminate the instance' do
|
72
|
+
expect(db).to receive(:instance_exists?).and_return(true)
|
73
|
+
allow($stdin).to receive(:gets) { 'n' }
|
74
|
+
subject.terminate_instance
|
75
|
+
end
|
76
|
+
it 'should return if there are no instances' do
|
77
|
+
expect(db).to receive(:instance_exists?).and_return(false)
|
78
|
+
subject.terminate_instance
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#start_server' do
|
83
|
+
it 'should start a server' do
|
84
|
+
name = 'dunny'
|
85
|
+
cmd = "cd /home/ec2-user/data && ../tmux-2.2/tmux new -d -s #{AWSMine::AWSMine::MINECRAFT_SESSION_NAME} " \
|
86
|
+
"'echo eula=true > eula.txt && java -jar #{name} nogui'"
|
87
|
+
expect(subject).to receive(:remote_exec).with(cmd)
|
88
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
89
|
+
subject.start_server(name)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe '#attach_to_server' do
|
94
|
+
it 'should attach to a running server' do
|
95
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
96
|
+
expect(ssh).to receive(:attach_to_server).with('1.2.3.4')
|
97
|
+
subject.attach_to_server
|
98
|
+
end
|
99
|
+
|
100
|
+
# TODO: There are a lot more things to cover here. Like, ssh expection.
|
101
|
+
# Or if the db doesn't exists. Or the server is not running.
|
102
|
+
end
|
103
|
+
|
104
|
+
describe '#init_db' do
|
105
|
+
it 'should initialize the db' do
|
106
|
+
expect(db).to receive(:init_db)
|
107
|
+
subject.init_db
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#upload_files' do
|
112
|
+
it 'should upload files from the specified location in the config.yml file' do
|
113
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
114
|
+
expect(upload).to receive(:upload_files).with('1.2.3.4')
|
115
|
+
subject.upload_files
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#remote_exec' do
|
120
|
+
it 'should be able to exectue cmd on an instance' do
|
121
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
122
|
+
expect(ssh).to receive(:remote_exec).with('1.2.3.4', 'test_cmd')
|
123
|
+
subject.remote_exec('test_cmd')
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe '#ssh' do
|
128
|
+
it 'should be able to ssh into a running instance' do
|
129
|
+
expect(db).to receive(:instance_details).and_return(['1.2.3.4', 'i-asdf'])
|
130
|
+
expect(ssh).to receive(:ssh).with('1.2.3.4')
|
131
|
+
subject.ssh
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'aws_minecraft/mine_config'
|
2
|
+
require 'fakefs/spec_helpers'
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe AWSMine::MineConfig do
|
6
|
+
include_context 'with aws minecraft'
|
7
|
+
describe '#initialize', fakefs: true do
|
8
|
+
let(:mineconfig) { AWSMine::MineConfig.new }
|
9
|
+
it 'should be an instance of MineConfig' do
|
10
|
+
expect(mineconfig).instance_of? AWSMine::MineConfig
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'correctly setup variables which are loaded from the config file' do
|
14
|
+
expect(mineconfig.loglevel).to eq('ERROR')
|
15
|
+
expect(mineconfig.upload_path).to eq('/drop')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
# Require pp must be before fakefs. Otherwise there is an error:'superclass mismatch for class File'
|
2
|
+
require 'pp'
|
3
|
+
require 'fakefs/spec_helpers'
|
4
|
+
require 'aws-sdk'
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.include FakeFS::SpecHelpers, fakefs: true
|
8
|
+
end
|
9
|
+
|
10
|
+
shared_examples 'with aws minecraft' do
|
11
|
+
before(:all) do
|
12
|
+
# Loading metadata for AWS before FakeFS kicks in.
|
13
|
+
RSpec::Mocks.with_temporary_scope do
|
14
|
+
Aws::SharedCredentials.new
|
15
|
+
Aws::EC2::Client.new
|
16
|
+
Aws::EC2::Resource.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
include FakeFS::SpecHelpers
|
20
|
+
|
21
|
+
before :each do
|
22
|
+
FakeFS.activate!
|
23
|
+
FakeFS::FileSystem.clone(__dir__)
|
24
|
+
FakeFS do
|
25
|
+
FileUtils.mkdir_p(File.join(__dir__, '../cfg'))
|
26
|
+
File.open(File.join(__dir__, '../cfg/config.yml'), 'w') do |f|
|
27
|
+
f.puts('loglevel: ERROR')
|
28
|
+
f.puts('upload_path: /drop')
|
29
|
+
end
|
30
|
+
|
31
|
+
FileUtils.mkdir_p(File.join(__dir__, '../cfg'))
|
32
|
+
File.open(File.join(__dir__, '../cfg/ec2_conf.json'), 'w') do |f|
|
33
|
+
f.puts <<-FILE
|
34
|
+
{
|
35
|
+
"dry_run": false,
|
36
|
+
"image_id": "ami-ea26ce85",
|
37
|
+
"key_name": "minecraft_keys",
|
38
|
+
"min_count": 1,
|
39
|
+
"max_count": 1,
|
40
|
+
"instance_type": "t2.nano",
|
41
|
+
"monitoring": {
|
42
|
+
"enabled": true
|
43
|
+
}
|
44
|
+
}
|
45
|
+
FILE
|
46
|
+
end
|
47
|
+
|
48
|
+
FileUtils.mkdir_p(File.join(__dir__, '../cfg'))
|
49
|
+
File.open(File.join(__dir__, '../cfg/instances.sql'), 'w') do |f|
|
50
|
+
f.puts <<-FILE
|
51
|
+
create table instances (
|
52
|
+
ip varchar(100),
|
53
|
+
id varchar(100),
|
54
|
+
PRIMARY KEY (id)
|
55
|
+
);
|
56
|
+
FILE
|
57
|
+
end
|
58
|
+
|
59
|
+
FileUtils.mkdir_p(File.join(__dir__, '../cfg'))
|
60
|
+
File.open(File.join(__dir__, '../cfg/sg_config.json'), 'w') do |f|
|
61
|
+
f.puts <<-FILE
|
62
|
+
{
|
63
|
+
"ip_permissions": [
|
64
|
+
{
|
65
|
+
"ip_protocol": "tcp",
|
66
|
+
"from_port": 22,
|
67
|
+
"to_port": 22,
|
68
|
+
"ip_ranges": [{
|
69
|
+
"cidr_ip": "0.0.0.0/0"
|
70
|
+
}]
|
71
|
+
},
|
72
|
+
{
|
73
|
+
"ip_protocol": "tcp",
|
74
|
+
"from_port": 25565,
|
75
|
+
"to_port": 25565,
|
76
|
+
"ip_ranges": [{
|
77
|
+
"cidr_ip": "0.0.0.0/0"
|
78
|
+
}]
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
FILE
|
83
|
+
end
|
84
|
+
|
85
|
+
FileUtils.mkdir_p(File.join(__dir__, '../cfg'))
|
86
|
+
File.open(File.join(__dir__, '../cfg/user_data.sh'), 'w') do |f|
|
87
|
+
f.puts <<-FILE
|
88
|
+
!#/bin/bash
|
89
|
+
FILE
|
90
|
+
end
|
91
|
+
|
92
|
+
FileUtils.mkdir_p(File.join(__dir__, '../cfg'))
|
93
|
+
File.open(File.join(__dir__, '../cfg/minecraft.key'), 'w') do |f|
|
94
|
+
f.puts <<-FILE
|
95
|
+
somekey
|
96
|
+
FILE
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
File without changes
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aws_minecraft
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gergely Brautigam
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: code_stats
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Provisions an EC2. Uploads a world, and deploys it.
|
70
|
+
email: skarlso777@gmail.com
|
71
|
+
executables:
|
72
|
+
- aws_minecraft.rb
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files:
|
75
|
+
- README.md
|
76
|
+
files:
|
77
|
+
- "./cfg/minecraft.key"
|
78
|
+
- ".gitignore"
|
79
|
+
- ".rspec"
|
80
|
+
- ".travis.yml"
|
81
|
+
- Gemfile
|
82
|
+
- Gemfile.lock
|
83
|
+
- LICENSE
|
84
|
+
- README.md
|
85
|
+
- ROADMAP.md
|
86
|
+
- Rakefile
|
87
|
+
- aws_minecraft.gemspec
|
88
|
+
- bin/aws_minecraft.rb
|
89
|
+
- cfg/config.yml
|
90
|
+
- cfg/ec2_conf.json
|
91
|
+
- cfg/instances.sql
|
92
|
+
- cfg/sg_config.json
|
93
|
+
- cfg/user_data.sh
|
94
|
+
- img/attach-detach.png
|
95
|
+
- img/attach_no_session.png
|
96
|
+
- img/attached_session.png
|
97
|
+
- img/create.png
|
98
|
+
- img/create_in_progress.png
|
99
|
+
- img/stop_server.png
|
100
|
+
- img/terminate.png
|
101
|
+
- img/upload.png
|
102
|
+
- lib/aws_minecraft.rb
|
103
|
+
- lib/aws_minecraft/aws_helper.rb
|
104
|
+
- lib/aws_minecraft/db_helper.rb
|
105
|
+
- lib/aws_minecraft/mine_config.rb
|
106
|
+
- lib/aws_minecraft/ssh_helper.rb
|
107
|
+
- lib/aws_minecraft/upload_helper.rb
|
108
|
+
- lib/aws_minecraft/version.rb
|
109
|
+
- spec/aws_helper_spec.rb
|
110
|
+
- spec/awsmine_spec.rb
|
111
|
+
- spec/config_spec.rb
|
112
|
+
- spec/spec_helper.rb
|
113
|
+
- spec/ssh_helper_spec.rb
|
114
|
+
- spec/upload_helper_spec.rb
|
115
|
+
homepage: https://github.com/Skarlso/aws_minecraft
|
116
|
+
licenses:
|
117
|
+
- MIT
|
118
|
+
metadata: {}
|
119
|
+
post_install_message:
|
120
|
+
rdoc_options:
|
121
|
+
- "--charset=UTF-8"
|
122
|
+
require_paths:
|
123
|
+
- lib
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
requirements: []
|
135
|
+
rubyforge_project: aws_minecraft
|
136
|
+
rubygems_version: 2.5.1
|
137
|
+
signing_key:
|
138
|
+
specification_version: 4
|
139
|
+
summary: A minecraft server provisioner on an AWS EC2 instance.
|
140
|
+
test_files: []
|