Skip to content
Commits on Source (2)
......@@ -37,6 +37,10 @@ func (app *CLI) SetDefaults() {
app.RestartPolicy = corev1.RestartPolicyOnFailure
}
if len(app.Settings) == 0 {
app.Settings = []string{"app"}
}
app.ObjectMeta.SetComponent("cli")
// TODO TOFIX
......
......@@ -25,7 +25,7 @@ import (
)
var (
wwwDataUserID int64 = 33
wwwDataUserID int64 = 82
)
func (o *Nextcloud) GetOwner() interfaces.Object { return o }
......@@ -150,4 +150,8 @@ func (app *Nextcloud) SetDefaults() {
app.Spec.Settings.SetDefaults()
app.Spec.Settings.SetDefaults()
// TODO TOFIX
if len(app.Spec.Settings.AppSettings.General.Version.Value) == 0 || len(app.Spec.Settings.AppSettings.General.Version.Ref) == 0 {
app.Spec.Settings.AppSettings.General.Version.Value = app.Spec.Version
}
}
......@@ -14,7 +14,7 @@ type AppSettings struct {
SMTP SMTP `json:"smtp,omitempty"`
General General `json:"general,omitempty"`
ObjectStore ObjectStore `json:"objectStore,omitempty"`
Redis Redis `json:"cache,omitempty"`
Redis Redis `json:"redis,omitempty"`
}
func (s *AppSettings) GetMeta() meta.Instance { return s.CreateOptions.CommonMeta }
......
......@@ -30,5 +30,7 @@ func (d *Redis) SetDefaults() {
}
func (s *Redis) GetParameters() *parameters.Parameters {
return &parameters.Parameters{}
params, _ := parameters.Marshal(*s)
return &params
}
......@@ -22,20 +22,20 @@ type Database struct {
Host parameters.Parameter `json:"host,omitempty" env:"DB_HOST"`
Port parameters.Parameter `json:"port,omitempty" env:"DB_PORT"`
Type parameters.Parameter `json:"type,omitempty" env:"DB_TYPE"`
Username parameters.Parameter `json:"username,omitempty" env:"DB_USERNAME"`
Username parameters.Parameter `json:"username,omitempty" env:"DB_USER"`
Password parameters.Parameter `json:"password,omitempty" env:"DB_PASSWORD"`
}
func (s *Database) SetDefaults() {
if len(s.Database.Value) == 0 || len(s.Database.ValueFrom.Ref) == 0 {
if len(s.Database.Value) == 0 && len(s.Database.ValueFrom.Ref) == 0 {
s.Database.Value = "nextcloud"
}
if len(s.Port.Value) == 0 || len(s.Port.ValueFrom.Ref) == 0 {
if len(s.Port.Value) == 0 && len(s.Port.ValueFrom.Ref) == 0 {
s.Port.Value = "5425"
}
if len(s.Type.Value) == 0 || len(s.Type.ValueFrom.Ref) == 0 {
if len(s.Type.Value) == 0 && len(s.Type.ValueFrom.Ref) == 0 {
s.Type.Value = "pgsql"
}
}
......
......@@ -16,6 +16,8 @@ limitations under the License.
package v1alpha1
import (
"fmt"
"k8s.libre.sh/application/settings/parameters"
)
......@@ -49,34 +51,40 @@ type GlobalSettings struct {
Debug parameters.Parameter `json:"debug,omitempty" env:"DEBUG"`
ReadOnly parameters.Parameter `json:"readOnly,omitempty" env:"CONFIG_READONLY"`
UpdateChecker parameters.Parameter `json:"updateChecker,omitempty" env:"UPDATE_CHECKER"`
UpdateURL parameters.Parameter `json:"udpateURL,omitempty" env:"OVERWRITECLI"`
UpdateChannel parameters.Parameter `json:"updateChannel,omitempty" env:"UPDATE_URL"`
UpdateDisable parameters.Parameter `json:"updateDisable,omitempty" env:"UPDATE_CHANNEL"`
BruteForce parameters.Parameter `json:"bruteforce,omitempty" env:"UPDATE_DISABLE_WEB"`
UpdateURL parameters.Parameter `json:"udpateURL,omitempty" env:"UPDATE_URL"`
UpdateChannel parameters.Parameter `json:"updateChannel,omitempty" env:"UPDATE_CHANNEL"`
UpdateDisable parameters.Parameter `json:"updateDisable,omitempty" env:"UPDATE_DISABLE_WEB"`
BruteForce parameters.Parameter `json:"bruteforce,omitempty" env:"BRUTEFORCE"`
Version parameters.Parameter `json:"version,omitempty" env:"VERSION"`
}
func (s *GlobalSettings) GetParameters() *parameters.Parameters {
params, _ := parameters.Marshal(*s)
// for _, p := range params {
// fmt.Println(p)
// }
return &params
}
func (s *GlobalSettings) SetDefaults() {
if len(s.ReadOnly.Value) == 0 || len(s.ReadOnly.ValueFrom.Ref) == 0 {
if len(s.ReadOnly.Value) == 0 && len(s.ReadOnly.ValueFrom.Ref) == 0 {
s.ReadOnly.Value = "true"
}
if len(s.DataDirectory.Value) == 0 || len(s.DataDirectory.ValueFrom.Ref) == 0 {
if len(s.DataDirectory.Value) == 0 && len(s.DataDirectory.ValueFrom.Ref) == 0 {
s.DataDirectory.Value = "/var/www/html/data"
}
if len(s.UpdateChecker.Value) == 0 || len(s.UpdateChecker.ValueFrom.Ref) == 0 {
if len(s.UpdateChecker.Value) == 0 && len(s.UpdateChecker.ValueFrom.Ref) == 0 {
s.UpdateChecker.Value = "false"
}
if len(s.UpdateDisable.Value) == 0 || len(s.UpdateDisable.ValueFrom.Ref) == 0 {
if len(s.UpdateDisable.Value) == 0 && len(s.UpdateDisable.ValueFrom.Ref) == 0 {
s.UpdateDisable.Value = "true"
}
if len(s.Domains.Value) == 0 || len(s.Domains.ValueFrom.Ref) == 0 {
s.Domains.Value = "{{ .settings.app.INSTANCE_ID }}"
s.Domains.Generate = parameters.GenerateTemplate
s.Domains.Type = parameters.SecretParameter
if len(s.Domains.Value) == 0 && len(s.Domains.ValueFrom.Ref) == 0 {
fmt.Println("YYYYYYYYYYYYYYYYYYYYYYYYYY")
fmt.Println(s.Domains)
/* s.Domains.Value = "{{ .components.web.network.hostname }}"
s.Domains.Generate = parameters.GenerateTemplate
s.Domains.Type = parameters.SecretParameter */
}
}
......@@ -84,25 +92,25 @@ type GlobalSecrets struct {
InstanceID parameters.Parameter `json:"instanceID,omitempty" env:"INSTANCE_ID"`
PasswordSalt parameters.Parameter `json:"passwordSalt,omitempty" env:"PASSWORD_SALT"`
Secret parameters.Parameter `json:"secret,omitempty" env:"SECRET"`
AdminPassword parameters.Parameter `json:"adminPassword,omitempty" env:"ADMIN_PASSWORD"`
AdminUsername parameters.Parameter `json:"adminUsername,omitempty" env:"ADMIN_USERNAME"`
AdminPassword parameters.Parameter `json:"adminPassword,omitempty" env:"NEXTCLOUD_ADMIN_PASSWORD"`
AdminUsername parameters.Parameter `json:"adminUsername,omitempty" env:"NEXTCLOUD_ADMIN_USER"`
}
func (s *GlobalSecrets) SetDefaults() {
// TODO return warning if value is defined and ignore it. Or use secretParameter type to enforce no values
if len(s.InstanceID.Value) > 0 || len(s.InstanceID.ValueFrom.Ref) == 0 {
if len(s.InstanceID.Value) > 0 && len(s.InstanceID.ValueFrom.Ref) == 0 {
s.InstanceID.Generate = parameters.GenerateRand12
}
if len(s.PasswordSalt.Value) == 0 || len(s.PasswordSalt.ValueFrom.Ref) == 0 {
if len(s.PasswordSalt.Value) == 0 && len(s.PasswordSalt.ValueFrom.Ref) == 0 {
s.PasswordSalt.Generate = parameters.GenerateRand12
}
if len(s.Secret.Value) == 0 || len(s.Secret.ValueFrom.Ref) == 0 {
if len(s.Secret.Value) == 0 && len(s.Secret.ValueFrom.Ref) == 0 {
s.Secret.Generate = parameters.GenerateRand12
}
if len(s.AdminPassword.Value) == 0 || len(s.AdminPassword.ValueFrom.Ref) == 0 {
if len(s.AdminPassword.Value) == 0 && len(s.AdminPassword.ValueFrom.Ref) == 0 {
s.AdminPassword.Generate = parameters.GenerateRand12
}
if len(s.AdminUsername.Value) == 0 || len(s.AdminUsername.ValueFrom.Ref) == 0 {
if len(s.AdminUsername.Value) == 0 && len(s.AdminUsername.ValueFrom.Ref) == 0 {
s.AdminUsername.Value = "admin"
}
}
......
......@@ -16,6 +16,8 @@ limitations under the License.
package v1alpha1
import (
"fmt"
"k8s.libre.sh/application/settings"
"k8s.libre.sh/application/settings/parameters"
"k8s.libre.sh/meta"
......@@ -25,6 +27,7 @@ import (
const nginxConf = `
user www-data;
events {
worker_connections 768;
}
......@@ -33,12 +36,12 @@ const nginxConf = `
upstream backend {
server {{ .components.app.service.meta.name }}:{{ .components.app.service.port.port }};
}
include /etc/nginx/mime.types
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
# Add headers to serve security related headers
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
......@@ -66,15 +69,15 @@ const nginxConf = `
fastcgi_buffers 64 4K;
gzip off; # handled at haproxy level
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
......@@ -142,7 +145,7 @@ func (s *WebSettings) SetDefaults() {
// s.CreateOptions.Init()
// s.CreateOptions.CommonMeta.Labels["app.kubernetes.io/component"] = "web"
if len(s.ConfTemplate.Value) > 0 || len(s.ConfTemplate.ValueFrom.Ref) == 0 {
if len(s.ConfTemplate.Value) == 0 && len(s.ConfTemplate.ValueFrom.Ref) == 0 {
s.ConfTemplate.Value = nginxConf
s.ConfTemplate.Generate = parameters.GenerateTemplate
s.ConfTemplate.MountType = parameters.MountEnvFile
......@@ -150,18 +153,21 @@ func (s *WebSettings) SetDefaults() {
s.ConfTemplate.MountType = parameters.MountFile
s.ConfTemplate.MountPath.Path = "/etc/nginx/nginx.conf"
s.ConfTemplate.MountPath.SubPath = "nginx.conf"
s.ConfTemplate.Key = "nginx-conf"
}
fmt.Println(s.ConfTemplate)
}
func (s *WebSettings) GetConfig() settings.Config {
params, _ := parameters.Marshal(*s)
// params, _ := parameters.Marshal(*s)
params := parameters.Parameters{}
params = append(params, &s.ConfTemplate)
settings := &settings.ConfigSpec{
Parameters: &params,
Sources: s.Sources,
}
return settings
}
......
......@@ -183,6 +183,7 @@ func (in *GlobalSettings) DeepCopyInto(out *GlobalSettings) {
out.UpdateChannel = in.UpdateChannel
out.UpdateDisable = in.UpdateDisable
out.BruteForce = in.BruteForce
out.Version = in.Version
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GlobalSettings.
......
......@@ -17,18 +17,18 @@ package controllers
import (
"context"
"fmt"
"github.com/go-logr/logr"
"github.com/presslabs/controller-util/syncer"
appsv1 "k8s.io/api/apps/v1"
apierrs "k8s.io/apimachinery/pkg/api/errors"
"k8s.libre.sh/application"
"k8s.libre.sh/application/settings/parameters"
"k8s.libre.sh/objects"
ctrl "sigs.k8s.io/controller-runtime"
appsv1alpha1 "git.indie.host/operators/nextcloud-operator/api/v1alpha1"
"git.indie.host/operators/nextcloud-operator/util"
appsv1alpha1 "k8s.libre.sh/apps/nextcloud/api/v1alpha1"
"k8s.libre.sh/apps/nextcloud/util"
oplib "github.com/redhat-cop/operator-utils/pkg/util"
)
......@@ -52,6 +52,9 @@ func (r *NextcloudReconciler) GetLogger() logr.Logger { return r.Log }
// +kubebuilder:rbac:groups=apps.libre.sh,resources=nextclouds/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=batch,resources=jobs,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=batch,resources=jobs/status,verbs=get
// +kubebuilder:rbac:groups=,resources=secrets;configmaps;services;events,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch;create;update;patch;delete
func (r *NextcloudReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
ctx := context.Background()
log := r.Log.WithValues("nextcloud", req.NamespacedName)
......@@ -104,18 +107,22 @@ func (r *NextcloudReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
switch phase {
case appsv1alpha1.PhaseInstalling:
cpts["cli"].(*appsv1alpha1.CLI).Job.Args = []string{"install"}
fmt.Println(cpts["cli"].(*appsv1alpha1.CLI).Job.Args)
cpts["cli"].(*appsv1alpha1.CLI).Job.Args = []string{"/install.sh"}
case appsv1alpha1.PhaseUpgrading:
cpts["cli"].(*appsv1alpha1.CLI).Job.Args = []string{"upgrade"}
cpts["cli"].(*appsv1alpha1.CLI).Job.Args = []string{"/upgrade.sh"}
default:
installParam := &parameters.Parameter{
Value: "true",
Key: "INSTALLED",
MountType: parameters.MountLiteral,
}
*cpts["app"].(*appsv1alpha1.App).Deployment.Parameters = append(*cpts["app"].(*appsv1alpha1.App).Deployment.Parameters, installParam)
delete(cpts, "cli")
}
// Components Object Syncers
for _, c := range cpts {
syncers[c.GetComponent()] = application.NewObjectSyncersFromComponent(c, r, app)
}
cptsOrder := app.GetComponentsSyncOrder()
......
......@@ -22,9 +22,9 @@ import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
appsv1alpha1 "git.indie.host/operators/nextcloud-operator/api/v1alpha1"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
appsv1alpha1 "k8s.libre.sh/apps/nextcloud/api/v1alpha1"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/envtest"
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
......
module git.indie.host/operators/nextcloud-operator
module k8s.libre.sh/apps/nextcloud
go 1.13
......@@ -9,7 +9,6 @@ require (
github.com/onsi/gomega v1.9.0
github.com/presslabs/controller-util v0.2.2
github.com/redhat-cop/operator-utils v0.2.4
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 // indirect
k8s.io/api v0.18.2
k8s.io/apimachinery v0.18.2
k8s.io/client-go v12.0.0+incompatible
......@@ -17,7 +16,7 @@ require (
sigs.k8s.io/controller-runtime v0.6.0
)
replace git.indie.host/operators/nextcloud-operator => ./
replace k8s.libre.sh/apps/nextcloud => ./
replace k8s.libre.sh => ./../application/
......
......@@ -980,6 +980,7 @@ golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 h1:Jcxah/M+oLZ/R4/z5RzfPzGbPXnVDPkEDtf2JnuxN+U=
golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
......@@ -1044,6 +1045,7 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
......
......@@ -19,14 +19,14 @@ import (
"flag"
"os"
appsv1alpha1 "git.indie.host/operators/nextcloud-operator/api/v1alpha1"
"git.indie.host/operators/nextcloud-operator/controllers"
batchv1 "k8s.io/api/batch/v1"
networking "k8s.io/api/networking/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"k8s.libre.sh/application"
appsv1alpha1 "k8s.libre.sh/apps/nextcloud/api/v1alpha1"
"k8s.libre.sh/apps/nextcloud/controllers"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
// +kubebuilder:scaffold:imports
......
package util
import (
appsv1alpha1 "git.indie.host/operators/nextcloud-operator/api/v1alpha1"
version "github.com/hashicorp/go-version"
appsv1alpha1 "k8s.libre.sh/apps/nextcloud/api/v1alpha1"
)
//. TOFIX get install status and desired status, if status =! nil ??
......