Skip to content

Commit

Permalink
add new fields
Browse files Browse the repository at this point in the history
  • Loading branch information
templarfelix committed Apr 10, 2024
1 parent ca898b1 commit 60e1dcc
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 27 deletions.
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
# gameserver-operator
Kubernetes operator for run linuxgsm game server
Kubernetes operator for running LinuxGSM game servers.

## Description
// TODO(user): An in-depth paragraph about your project and overview of use
The `GameServer-Operator` is a Kubernetes project designed to facilitate the deployment and management of LinuxGSM game servers in a Kubernetes environment. With this operator, users can easily scale their game servers, automate updates, and maintain desired configurations through Custom Resource Definitions (CRDs). This project aims to simplify the complexity of managing game servers by providing a robust and scalable solution for gaming communities and service providers.

## need help to deploy kubernetes clusters?

Navigate to the gameserver-operator GitHub project where the Pulumi script is located.

## Supported Games

The operator is capable of managing a variety of game servers supported by the LinuxGSM platform. Below is a list of popular games that are compatible, along with links to their specific configurations:

- **DayZ** - [Configurations](https://linuxgsm.com/lgsm/dayz/)

For a complete list of supported games, visit the [LinuxGSM servers page](https://linuxgsm.com/servers/).

## Getting Started

Expand Down
33 changes: 31 additions & 2 deletions config/samples/gameserver_v1alpha1_dayz.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,35 @@ metadata:
spec:
storage: 10G
#loadBalancerIP:
ports:
- name: port-27015-tcp
port: 27015
targetPort: 27015
protocol: TCP
- name: port-27016-tcp
port: 27016
targetPort: 27016
protocol: TCP
- name: port-2302-udp
port: 2302
targetPort: 2302
protocol: UDP
- name: port-2304-udp
port: 2304
targetPort: 2304
protocol: UDP
- name: port-2306-udp
port: 2306
targetPort: 2306
protocol: UDP
- name: port-27015-udp
port: 27015
targetPort: 27015
protocol: UDP
- name: port-27016-udp
port: 27016
targetPort: 27016
protocol: UDP
config:
# dayz server config
server: |
Expand All @@ -29,13 +58,13 @@ spec:
// GENERAL SETTINGS

// Server name
hostname = "LinuxGSM-TemplarFelix";
hostname = "gameserver-operator";

// Password to connect to the server
//password = "";

// Password to become a server admin
passwordAdmin = "adminUfYyXl3T";
passwordAdmin = "changeme";

// Enable/disable whitelist (value 0-1)
enableWhitelist = 0;
Expand Down
42 changes: 19 additions & 23 deletions internal/controller/dayz_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (r *DayzReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
func (r *DayzReconciler) reconcileDeployment(ctx context.Context, instance *gameserverv1alpha1.Dayz) error {
logger := log.FromContext(ctx)

resource := &appsv1.Deployment{
k8sResource := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: instance.Name + "-deployment",
Namespace: instance.Namespace,
Expand All @@ -113,14 +113,10 @@ func (r *DayzReconciler) reconcileDeployment(ctx context.Context, instance *game
"sh", "-c", `
mkdir -p /data/config-lgsm/dayzserver/ &&
mkdir -p /data/serverfiles/cfg/ &&
ls -la /tmp &&
ls -la /tmp/config-gsm &&
ls -la /tmp/config-server
#&&
#cp /tmp/config-gsm/dayzserver.cfg /data/config-lgsm/dayzserver/dayzserver.cfg &&
#cp /tmp/config-server/dayzserver.server.cfg /data/serverfiles/cfg/dayzserver.server.cfg &&
#chown 1000:1000 /data/config-lgsm/dayzserver/dayzserver.cfg &&
#chown 1000:1000 /data/serverfiles/cfg/dayzserver.server.cfg
cp /tmp/config-gsm/dayzserver.cfg /data/config-lgsm/dayzserver/dayzserver.cfg &&
cp /tmp/config-server/dayzserver.server.cfg /data/serverfiles/cfg/dayzserver.server.cfg &&
chown 1000:1000 /data/config-lgsm/dayzserver/dayzserver.cfg &&
chown 1000:1000 /data/serverfiles/cfg/dayzserver.server.cfg
`,
},
VolumeMounts: []corev1.VolumeMount{
Expand Down Expand Up @@ -220,15 +216,15 @@ func (r *DayzReconciler) reconcileDeployment(ctx context.Context, instance *game
},
}

if err := controllerutil.SetControllerReference(instance, resource, r.Scheme); err != nil {
if err := controllerutil.SetControllerReference(instance, k8sResource, r.Scheme); err != nil {
return err
}

found := &appsv1.Deployment{}
err := r.Client.Get(ctx, client.ObjectKey{Name: resource.Name, Namespace: resource.Namespace}, found)
err := r.Client.Get(ctx, client.ObjectKey{Name: k8sResource.Name, Namespace: k8sResource.Namespace}, found)
if err != nil && errors.IsNotFound(err) {
logger.Info("Creating a new Deployment %s/%s\n", resource.Namespace, resource.Name)
err = r.Client.Create(ctx, resource)
logger.Info("Creating a new Deployment %s/%s\n", k8sResource.Namespace, k8sResource.Name)
err = r.Client.Create(ctx, k8sResource)
if err != nil {
return err
}
Expand All @@ -244,7 +240,7 @@ func (r *DayzReconciler) reconcileDeployment(ctx context.Context, instance *game
func (r *DayzReconciler) reconcilePVC(ctx context.Context, instance *gameserverv1alpha1.Dayz) error {
logger := log.FromContext(ctx)

resource := &corev1.PersistentVolumeClaim{
k8sResource := &corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: instance.Name + "-pvc",
Namespace: instance.Namespace,
Expand All @@ -259,15 +255,15 @@ func (r *DayzReconciler) reconcilePVC(ctx context.Context, instance *gameserverv
},
}

if err := controllerutil.SetControllerReference(instance, resource, r.Scheme); err != nil {
if err := controllerutil.SetControllerReference(instance, k8sResource, r.Scheme); err != nil {
return err
}

found := &corev1.PersistentVolumeClaim{}
err := r.Client.Get(ctx, client.ObjectKey{Name: resource.Name, Namespace: resource.Namespace}, found)
err := r.Client.Get(ctx, client.ObjectKey{Name: k8sResource.Name, Namespace: k8sResource.Namespace}, found)
if err != nil && errors.IsNotFound(err) {
logger.Info("Creating a new PVC %s/%s\n", resource.Namespace, resource.Name)
err = r.Client.Create(ctx, resource)
logger.Info("Creating a new PVC %s/%s\n", k8sResource.Namespace, k8sResource.Name)
err = r.Client.Create(ctx, k8sResource)
if err != nil {
return err
}
Expand All @@ -283,7 +279,7 @@ func (r *DayzReconciler) reconcilePVC(ctx context.Context, instance *gameserverv
func (r *DayzReconciler) reconcileConfigMap(ctx context.Context, instance *gameserverv1alpha1.Dayz) error {
logger := log.FromContext(ctx)

resource := &corev1.ConfigMap{
k8sResource := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: instance.Name + "-configmap",
Namespace: instance.Namespace,
Expand All @@ -294,15 +290,15 @@ func (r *DayzReconciler) reconcileConfigMap(ctx context.Context, instance *games
},
}

if err := controllerutil.SetControllerReference(instance, resource, r.Scheme); err != nil {
if err := controllerutil.SetControllerReference(instance, k8sResource, r.Scheme); err != nil {
return err
}

found := &corev1.ConfigMap{}
err := r.Client.Get(ctx, client.ObjectKey{Name: resource.Name, Namespace: resource.Namespace}, found)
err := r.Client.Get(ctx, client.ObjectKey{Name: k8sResource.Name, Namespace: k8sResource.Namespace}, found)
if err != nil && errors.IsNotFound(err) {
logger.Info("Creating a new Configmap %s/%s\n", resource.Namespace, resource.Name)
err = r.Client.Create(ctx, resource)
logger.Info("Creating a new Configmap %s/%s\n", k8sResource.Namespace, k8sResource.Name)
err = r.Client.Create(ctx, k8sResource)
if err != nil {
return err
}
Expand Down

0 comments on commit 60e1dcc

Please sign in to comment.