Skip to content

Commit

Permalink
implemented logs, working on sending command
Browse files Browse the repository at this point in the history
  • Loading branch information
hsmade committed Aug 29, 2021
1 parent 06fbbb5 commit 884ac44
Show file tree
Hide file tree
Showing 13 changed files with 334 additions and 52 deletions.
40 changes: 40 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,43 @@ This project uses the following levels:
- `9/Trace`: program flow with full details, for debugging nasty errors

The first two levels are compatible with / implemented by logr.

## Adding new server JARs
Forge 1.17:
```bash
$ cd /srv/minecraft/jars/server
$ mkdir forge-1.17.1
$ cd forge-1.17.1
$ java -jar forge-1.17.1-37.0.45-installer.jar --installServer
$ cat << EOF > start.sh
#!/bin/bash
java -Xmx ${XMX:-1024M} -Xms ${XMS:-1024M} @libraries/net/minecraftforge/forge/1.17.1-37.0.45/unix_args.txt nogui
EOF
$ chmod +x start.sh
```

Forge < 1.17:
```bash
$ cd /srv/minecraft/jars/server
$ mkdir forge-1.16.5
$ cd forge-1.16.5
$ java -jar forge-1.16.5-36.2.2-installer.jar --installServer
$ cat << EOF > start.sh
#!/bin/bash
exec java -Xmx ${XMX:-1024M} -Xms ${XMS:-1024M} -jar forge-1.16.5-36.2.2.jar nogui
EOF
$ chmod +x start.sh
```

Vanilla:
```bash
$ cd /srv/minecraft/jars/server
$ mkdir vanilla-1.16.5
$ cd vanilla-1.16.5
$ wget https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar
$ cat << EOF > start.sh
#!/bin/bash
exec java -Xmx ${XMX:-1024M} -Xms ${XMS:-1024M} -jar server.jar nogui
EOF
$ chmod +x start.sh
```
4 changes: 2 additions & 2 deletions api/v1/server_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ type ServerSpec struct {
// Initial memory (Xms), in MB
InitMemory int32 `json:"initMemoryMB"`

// The JAR file to run
ServerJar string `json:"server-jar"`
// The server version to run (e.g.: vanilla-1.16.5, forge-1.12.2)
ServerVersion string `json:"server-version"`

// HostPort defines the host port to bind to. Defaults to empty/disabled
// +optional
Expand Down
6 changes: 3 additions & 3 deletions config/crd/bases/minecraft.hsmade.com_servers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,15 @@ spec:
type: string
description: Properties file settings
type: object
server-jar:
description: The JAR file to run
server-version:
description: 'The server version to run (e.g.: vanilla-1.16.5, forge-1.12.2)'
type: string
required:
- enabled
- image
- initMemoryMB
- maxMemoryMB
- server-jar
- server-version
type: object
status:
description: ServerStatus defines the observed state of Server
Expand Down
44 changes: 44 additions & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,42 @@ rules:
- configmaps/status
verbs:
- get
- apiGroups:
- ""
resources:
- persistentvolumeclaims
verbs:
- create
- delete
- get
- list
- update
- watch
- apiGroups:
- ""
resources:
- persistentvolumes
verbs:
- create
- delete
- get
- list
- update
- watch
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- pods/log
verbs:
- get
- apiGroups:
- ""
resources:
Expand Down Expand Up @@ -86,6 +122,14 @@ rules:
- get
- patch
- update
- apiGroups:
- minecraft.hsmade.com
resources:
- operatorconfigs
verbs:
- get
- list
- watch
- apiGroups:
- minecraft.hsmade.com
resources:
Expand Down
17 changes: 3 additions & 14 deletions controllers/assets/init.sh.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,17 @@ set -xe
cd /data
mkdir -p mods

echo "Linking config files"
ln -vsf /config/* .

echo "Copying server.jar"
cp /jars/server/{{ .ServerJar }} server.jar
cp -a /jars/server/{{ .ServerVersion }}/* ./

if echo {{ .ServerJar }} | grep -q forge
then
echo "Installing forge"
# FIXME: deze container heeft geen java, mss dan toch maar een start script maken?
# elke installer geeft weer andere artifacts en andere manier van starten, dus voor forge moet `libraries/` mee met de jar?
fi
echo "Copying config file"
cat /config/server.properties > server.properties

echo "Copying mods"
{{ range $mod := .ModJars }}
cp /jars/mods/{{ $mod }} mods/
{{ end }}

echo "Copying in server.properties file"
rm server.properties
cp /config/server.properties .

echo "Writing eula.txt file"
cat << EOF > eula.txt
eula=true
Expand Down
23 changes: 18 additions & 5 deletions controllers/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func (r *ServerReconciler) ReconcileDeployment(ctx context.Context, log logr.Log
!reflect.DeepEqual(deployment.Spec.Template.Spec.Containers[0].Image, DeploymentList.Items[0].Spec.Template.Spec.Containers[0].Image) ||
!reflect.DeepEqual(deployment.Spec.Replicas, DeploymentList.Items[0].Spec.Replicas) ||
!reflect.DeepEqual(deployment.ObjectMeta.Annotations["configHash"], DeploymentList.Items[0].ObjectMeta.Annotations["configHash"]) ||
!reflect.DeepEqual(deployment.Spec.Template.Spec.Containers[0].Command, DeploymentList.Items[0].Spec.Template.Spec.Containers[0].Command) {
!reflect.DeepEqual(deployment.Spec.Template.Spec.Containers, DeploymentList.Items[0].Spec.Template.Spec.Containers) {
log.V(loglevels.Info).Info("replacing Deployment")
log.V(loglevels.Trace).Info("replacing Deployment", "rendered", deployment.Spec, "found", DeploymentList.Items[0].Spec)
DeploymentList.Items[0].Spec = deployment.Spec
Expand Down Expand Up @@ -120,6 +120,9 @@ func (r *ServerReconciler) RenderDeployment(log logr.Logger, server *minecraftv1
},
Spec: appsv1.DeploymentSpec{
Replicas: &replicas,
Strategy: appsv1.DeploymentStrategy{
Type: appsv1.RecreateDeploymentStrategyType,
},
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"app": fmt.Sprintf("minecraft-operator-server-%s", server.Name),
Expand Down Expand Up @@ -231,14 +234,24 @@ func (r *ServerReconciler) RenderDeployment(log logr.Logger, server *minecraftv1
MountPath: "/data/world",
SubPath: server.Name,
},
{
Name: "config",
MountPath: "/config",
},
},
Command: []string{
"java",
fmt.Sprintf("-Xmx%dM", server.Spec.MaxMemory),
fmt.Sprintf("-Xms%dM", server.Spec.InitMemory),
"-jar", "server.jar",
"bash", "-x", "./start.sh",
},
TTY: true,
WorkingDir: "/data",
Env: []corev1.EnvVar{
{
Name: "XMX", Value: fmt.Sprintf("%dM", server.Spec.MaxMemory),
},
{
Name: "XMS", Value: fmt.Sprintf("%dM", server.Spec.InitMemory),
},
},
},
},
},
Expand Down
2 changes: 2 additions & 0 deletions controllers/persistent_volume.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

// FIXME: we can't update an existing PV, and we can only delete it when the PVCs are gone

// ReconcilePersistentVolume make sure the PV exists as it should.
func (r *ServerReconciler) ReconcilePersistentVolume(ctx context.Context, log logr.Logger, server *v1.Server) error {
log.V(loglevels.Verbose).Info("start reconciling of PersistentVolume")
Expand Down
2 changes: 2 additions & 0 deletions controllers/persistent_volume_claim.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

// FIXME: we can't update an existing PVC

// ReconcilePersistentVolumeClaim make sure the PVC exists as it should.
func (r *ServerReconciler) ReconcilePersistentVolumeClaim(ctx context.Context, log logr.Logger, server *v1.Server) error {
log.V(loglevels.Verbose).Info("start reconciling of PersistentVolumeClaim")
Expand Down
5 changes: 5 additions & 0 deletions controllers/server_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ var (
apiGVStr = minecraftv1.GroupVersion.String()
)

//+kubebuilder:rbac:groups=minecraft.hsmade.com,resources=operatorconfigs,verbs=get;list;watch
//+kubebuilder:rbac:groups=minecraft.hsmade.com,resources=servers,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=minecraft.hsmade.com,resources=servers/status,verbs=get;update;patch
//+kubebuilder:rbac:groups=minecraft.hsmade.com,resources=servers/finalizers,verbs=update
Expand All @@ -53,6 +54,10 @@ var (
//+kubebuilder:rbac:groups="",resources=configmaps/status,verbs=get
//+kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups="",resources=services/status,verbs=get
//+kubebuilder:rbac:groups="",resources=persistentvolumes,verbs=get;list;watch;create;delete;update
//+kubebuilder:rbac:groups="",resources=persistentvolumeclaims,verbs=get;list;watch;create;delete;update
//+kubebuilder:rbac:groups="",resources=pods,verbs=get;list;watch
//+kubebuilder:rbac:groups="",resources=pods/log,verbs=get

// Reconcile is part of the main kubernetes reconciliation loop which aims to
// move the current state of the cluster closer to the desired state.
Expand Down
6 changes: 3 additions & 3 deletions example-minecraft-server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ spec:
enabled: true
maxMemoryMB: 1024
initMemoryMB: 1024
server-jar: "forge-1.12.2.jar"
server-version: "forge-1.12.2"
mod-jars:
- cfm-6.3.0-mc1.12.2.jar
idleTimeoutSeconds: 10
Expand All @@ -51,7 +51,7 @@ spec:
enabled: true
maxMemoryMB: 1024
initMemoryMB: 1024
server-jar: "server-1.16.5.jar"
server-version: "vanilla-1.16.5"
idleTimeoutSeconds: 10
properties:
motd: mijn server
Expand All @@ -71,7 +71,7 @@ spec:
enabled: false
maxMemoryMB: 1024
initMemoryMB: 1024
server-jar: "server-1.16.5.jar"
server-version: "vanilla-1.16.5"
hostPort: 25699
idleTimeoutSeconds: 10
properties:
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/z
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
Expand Down Expand Up @@ -410,6 +411,7 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs=
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c=
github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
Expand Down
Loading

0 comments on commit 884ac44

Please sign in to comment.