Skip to content

Commit bf6b080

Browse files
Merge branch 'master'
2 parents fa898ba + 3c6001c commit bf6b080

File tree

8 files changed

+182
-28
lines changed

8 files changed

+182
-28
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
mima.exe
22
.mima.yml
3-
saves/
3+
saves/
4+
example.service
5+
.ssh/

go.mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ go 1.13
44

55
require (
66
github.com/bramvdbogaerde/go-scp v0.0.0-20191005185035-c96fe084709e
7-
github.com/jlaffaye/ftp v0.0.0-20191025175106-a59fe673c9b2
7+
github.com/jlaffaye/ftp v0.0.0-20191025175106-a59fe673c9b2 // indirect
88
github.com/pkg/sftp v1.10.1
99
github.com/urfave/cli/v2 v2.0.0
1010
github.com/vultr/govultr v0.1.7
1111
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
1212
gopkg.in/yaml.v2 v2.2.7
13-
honnef.co/go/tools v0.0.1-2019.2.3
13+
honnef.co/go/tools v0.0.1-2019.2.3 // indirect
1414
)

go.sum

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ github.com/bramvdbogaerde/go-scp v0.0.0-20191005185035-c96fe084709e/go.mod h1:ai
55
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
66
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
77
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
89
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
910
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
1011
github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=
@@ -18,13 +19,16 @@ github.com/jlaffaye/ftp v0.0.0-20191025175106-a59fe673c9b2/go.mod h1:PwUeyujmhaG
1819
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
1920
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
2021
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
22+
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
2123
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
2224
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
25+
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
2326
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
2427
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
2528
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
2629
github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc=
2730
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
31+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2832
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2933
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
3034
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
@@ -33,6 +37,7 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5I
3337
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
3438
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3539
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
40+
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
3641
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
3742
github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=
3843
github.com/urfave/cli/v2 v2.0.0 h1:+HU9SCbu8GnEUFtIBfuUNXN39ofWViIEJIp6SURMpCg=
@@ -50,11 +55,13 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
5055
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
5156
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5257
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
58+
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
5359
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5460
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
5561
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac h1:MQEvx39qSf8vyrx3XRaOe+j1UDIzKwkYOVObRgGPVqI=
5662
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
5763
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
64+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
5865
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
5966
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
6067
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

mima.go

+11-14
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ import (
66
"os"
77
"time"
88

9-
"github.com/ickerio/mima/services"
10-
9+
"github.com/ickerio/mima/parsers"
1110
"github.com/ickerio/mima/printer"
1211
"github.com/ickerio/mima/providers"
13-
"github.com/ickerio/mima/util"
1412
"github.com/urfave/cli/v2"
1513
)
1614

@@ -36,7 +34,7 @@ func main() {
3634
Aliases: []string{"i"},
3735
Usage: "Displays info on the server",
3836
Action: func(c *cli.Context) error {
39-
conf, err := util.GetConfig(c.String("config"))
37+
conf, err := parsers.GetConfig(c.String("config"))
4038
if err != nil {
4139
return err
4240
}
@@ -61,7 +59,7 @@ func main() {
6159
Name: "start",
6260
Usage: "Starts the given server if not already online",
6361
Action: func(c *cli.Context) error {
64-
conf, err := util.GetConfig(c.String("config"))
62+
conf, err := parsers.GetConfig(c.String("config"))
6563
if err != nil {
6664
return err
6765
}
@@ -123,7 +121,7 @@ func main() {
123121
Name: "stop",
124122
Usage: "Stop the given server if currently online",
125123
Action: func(c *cli.Context) error {
126-
conf, err := util.GetConfig(c.String("config"))
124+
conf, err := parsers.GetConfig(c.String("config"))
127125
if err != nil {
128126
return err
129127
}
@@ -270,7 +268,7 @@ func main() {
270268
Name: "test",
271269
Usage: "Test things!",
272270
Action: func(c *cli.Context) error {
273-
conf, err := util.GetConfig(c.String("config"))
271+
conf, err := parsers.GetConfig(c.String("config"))
274272
if err != nil {
275273
return err
276274
}
@@ -285,14 +283,13 @@ func main() {
285283
return err
286284
}
287285

288-
minecraft := services.Minecraft{
289-
SavesDir: c.String("saves"),
290-
Name: server.Name,
291-
Host: server.IP,
292-
Username: "root",
293-
Password: server.Password}
286+
service, err := parsers.GetService("example.service", c.String("saves"), server.IP, server.Password)
294287

295-
if err := minecraft.Start(); err != nil {
288+
if err != nil {
289+
return err
290+
}
291+
292+
if err := service.Start(); err != nil {
296293
return err
297294
}
298295

util/config.go parsers/config.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package util
1+
package parsers
22

33
import (
44
"errors"
@@ -28,7 +28,7 @@ func GetConfig(fileName string) (Config, error) {
2828

2929
f, err := os.Open(fileName)
3030
if err != nil {
31-
return cfg, errors.New("Could not find config file")
31+
return Config{}, errors.New("Could not find config file")
3232
}
3333

3434
decoder := yaml.NewDecoder(f)

parsers/service.go

+155
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package parsers
2+
3+
import (
4+
"bufio"
5+
"errors"
6+
"github.com/ickerio/mima/services"
7+
"os"
8+
"strings"
9+
)
10+
11+
type Service struct {
12+
SavesDir string
13+
Name string
14+
Host string
15+
Username string
16+
Password string
17+
Commands struct {
18+
Create []Command
19+
Start []Command
20+
Stop []Command
21+
Backup []Command
22+
}
23+
}
24+
25+
func (s Service) Create() error {
26+
conn, _ := services.Connect(s.Host, s.Username, s.Password)
27+
28+
for _, element := range s.Commands.Create {
29+
err := element.Run(conn)
30+
if err != nil {
31+
return err
32+
}
33+
}
34+
return nil
35+
}
36+
37+
func (s Service) Start() error {
38+
conn, _ := services.Connect(s.Host, s.Username, s.Password)
39+
40+
for _, element := range s.Commands.Start {
41+
err := element.Run(conn)
42+
if err != nil {
43+
return err
44+
}
45+
}
46+
return nil
47+
}
48+
49+
func (s Service) Stop() error {
50+
conn, _ := services.Connect(s.Host, s.Username, s.Password)
51+
52+
for _, element := range s.Commands.Stop {
53+
err := element.Run(conn)
54+
if err != nil {
55+
return err
56+
}
57+
}
58+
return nil
59+
}
60+
61+
func (s Service) Backup() error {
62+
conn, _ := services.Connect(s.Host, s.Username, s.Password)
63+
64+
for _, element := range s.Commands.Backup {
65+
err := element.Run(conn)
66+
if err != nil {
67+
return err
68+
}
69+
}
70+
return nil
71+
}
72+
73+
func GetService(fileName string, savesDir string, ip string, password string) (Service, error) {
74+
service := Service{
75+
SavesDir: savesDir,
76+
Host: ip,
77+
Username: "root",
78+
Password: password,
79+
}
80+
var current string
81+
82+
f, err := os.Open(fileName)
83+
if err != nil {
84+
return service, errors.New("Could not find service file")
85+
}
86+
87+
scanner := bufio.NewScanner(f)
88+
for scanner.Scan() {
89+
components := strings.Split(strings.TrimLeft(scanner.Text(), "\t \n"), ":")
90+
91+
switch components[0] {
92+
case "create", "start", "stop", "backup":
93+
current = components[0]
94+
case "exe":
95+
command := Execute{data: strings.TrimLeft(components[1], "\t \n")}
96+
addToService(current, command, &service)
97+
case "get":
98+
body := strings.Split(strings.TrimLeft(components[1], "\t \n"), ",")
99+
command := GetFile{source: body[0], destination: body[1]}
100+
addToService(current, command, &service)
101+
case "put":
102+
body := strings.Split(strings.TrimLeft(components[1], "\t \n"), ",")
103+
command := PutFile{source: body[0], destination: body[1]}
104+
addToService(current, command, &service)
105+
}
106+
}
107+
108+
return service, nil
109+
}
110+
111+
type Command interface {
112+
Run(services.Connection) error
113+
}
114+
115+
type Execute struct {
116+
data string
117+
}
118+
119+
func (e Execute) Run(conn services.Connection) error {
120+
conn.Execute(e.data)
121+
return nil
122+
}
123+
124+
type GetFile struct {
125+
source string
126+
destination string
127+
}
128+
129+
func (g GetFile) Run(conn services.Connection) error {
130+
conn.GetFile(g.source, g.destination)
131+
return nil
132+
}
133+
134+
type PutFile struct {
135+
source string
136+
destination string
137+
}
138+
139+
func (p PutFile) Run(conn services.Connection) error {
140+
conn.PutFile(p.source, p.destination)
141+
return nil
142+
}
143+
144+
func addToService(current string, command Command, service *Service) {
145+
switch current {
146+
case "create":
147+
service.Commands.Create = append(service.Commands.Create, command)
148+
case "start":
149+
service.Commands.Start = append(service.Commands.Start, command)
150+
case "stop":
151+
service.Commands.Stop = append(service.Commands.Stop, command)
152+
case "backup":
153+
service.Commands.Backup = append(service.Commands.Backup, command)
154+
}
155+
}

providers/provider.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package providers
33
import (
44
"errors"
55

6-
"github.com/ickerio/mima/util"
6+
"github.com/ickerio/mima/parsers"
77
"github.com/vultr/govultr"
88
)
99

@@ -68,7 +68,7 @@ func GetNoAuth(service string) (Provider, error) {
6868
}
6969

7070
// GetFromConfig returns a provider from the config and user input
71-
func GetFromConfig(conf util.Config, name string) (Provider, error) {
71+
func GetFromConfig(conf parsers.Config, name string) (Provider, error) {
7272
for i := range conf.Servers {
7373
if conf.Servers[i].Name == name {
7474
switch conf.Servers[i].Provider {

services/service.go

-7
This file was deleted.

0 commit comments

Comments
 (0)