Skip to content

Commit

Permalink
checkpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
babbageclunk committed Jan 14, 2021
1 parent 6339871 commit f168b60
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 32 deletions.
6 changes: 3 additions & 3 deletions controllers/mysqluser_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ package controllers
import (
ctrl "sigs.k8s.io/controller-runtime"

azurev1alpha1 "github.com/Azure/azure-service-operator/api/v1alpha1"
azurev1alpha2 "github.com/Azure/azure-service-operator/api/v1alpha2"
)

// MySQLUserReconciler reconciles a MySQLUser object
Expand All @@ -18,12 +18,12 @@ type MySQLUserReconciler struct {
// +kubebuilder:rbac:groups=azure.microsoft.com,resources={mysqlusers/status,mysqlusers/finalizers},verbs=get;update;patch

func (r *MySQLUserReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
return r.Reconciler.Reconcile(req, &azurev1alpha1.MySQLUser{})
return r.Reconciler.Reconcile(req, &azurev1alpha2.MySQLUser{})
}

// SetupWithManager runs reconcile loop with manager
func (r *MySQLUserReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&azurev1alpha1.MySQLUser{}).
For(&azurev1alpha2.MySQLUser{}).
Complete(r)
}
21 changes: 13 additions & 8 deletions pkg/resourcemanager/mysql/mysqluser/mysqluser.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ import (
"fmt"

mysqlmgmt "github.com/Azure/azure-sdk-for-go/services/mysql/mgmt/2017-12-01/mysql"
_ "github.com/go-sql-driver/mysql" //mysql drive link
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"

"github.com/Azure/azure-service-operator/api/v1alpha1"
"github.com/Azure/azure-service-operator/api/v1alpha2"
"github.com/Azure/azure-service-operator/pkg/helpers"
"github.com/Azure/azure-service-operator/pkg/resourcemanager/config"
"github.com/Azure/azure-service-operator/pkg/resourcemanager/mysql"
mysqldatabase "github.com/Azure/azure-service-operator/pkg/resourcemanager/mysql/database"
mysqlserver "github.com/Azure/azure-service-operator/pkg/resourcemanager/mysql/server"
"github.com/Azure/azure-service-operator/pkg/secrets"

_ "github.com/go-sql-driver/mysql" //mysql drive link
"k8s.io/apimachinery/pkg/types"
)

// MSecretUsernameKey is the username key in secret
Expand Down Expand Up @@ -55,6 +55,12 @@ func (m *MySqlUserManager) GetDB(ctx context.Context, resourceGroupName string,
)
}

// GetServer retrieves a server
func (m *MySqlUserManager) GetServer(ctx context.Context, resourceGroupName, serverName string) (mysqlmgmt.Server, error) {
client := mysqlserver.NewMySQLServerClient(m.Creds, m.SecretClient, m.Scheme)
return client.GetServer(ctx, resourceGroupName, serverName)
}

// CreateUser creates user with secret credentials
func (m *MySqlUserManager) CreateUser(ctx context.Context, secret map[string][]byte, db *sql.DB) (string, error) {
newUser := string(secret[MSecretUsernameKey])
Expand All @@ -77,7 +83,7 @@ func (m *MySqlUserManager) CreateUser(ctx context.Context, secret map[string][]b
}

// DeleteSecrets deletes the secrets associated with a SQLUser
func (m *MySqlUserManager) DeleteSecrets(ctx context.Context, instance *v1alpha1.MySQLUser, secretClient secrets.SecretClient) (bool, error) {
func (m *MySqlUserManager) DeleteSecrets(ctx context.Context, instance *v1alpha2.MySQLUser, secretClient secrets.SecretClient) (bool, error) {
// determine our key namespace - if we're persisting to kube, we should use the actual instance namespace.
// In keyvault we have some creative freedom to allow more flexibility
secretKey := GetNamespacedName(instance, secretClient)
Expand All @@ -96,7 +102,7 @@ func (m *MySqlUserManager) DeleteSecrets(ctx context.Context, instance *v1alpha1
}

// GetOrPrepareSecret gets or creates a secret
func (m *MySqlUserManager) GetOrPrepareSecret(ctx context.Context, instance *v1alpha1.MySQLUser, secretClient secrets.SecretClient) map[string][]byte {
func (m *MySqlUserManager) GetOrPrepareSecret(ctx context.Context, instance *v1alpha2.MySQLUser, secretClient secrets.SecretClient) map[string][]byte {
key := GetNamespacedName(instance, secretClient)

secret, err := secretClient.Get(ctx, key)
Expand All @@ -108,14 +114,13 @@ func (m *MySqlUserManager) GetOrPrepareSecret(ctx context.Context, instance *v1a
"MySqlServerNamespace": []byte(instance.Namespace),
"MySqlServerName": []byte(instance.Spec.Server),
"fullyQualifiedServerName": []byte(mysql.GetFullSQLServerName(instance.Spec.Server)),
"MySqlDatabaseName": []byte(instance.Spec.DbName),
}
}
return secret
}

// GetNamespacedName gets the namespaced-name
func GetNamespacedName(instance *v1alpha1.MySQLUser, secretClient secrets.SecretClient) types.NamespacedName {
func GetNamespacedName(instance *v1alpha2.MySQLUser, secretClient secrets.SecretClient) types.NamespacedName {

return types.NamespacedName{Name: instance.Name, Namespace: instance.Namespace}
}
36 changes: 15 additions & 21 deletions pkg/resourcemanager/mysql/mysqluser/mysqluser_reconcile.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import (
keyvaultSecrets "github.com/Azure/azure-service-operator/pkg/secrets/keyvault"
)

const mysqlDatabase = "mysql"

// Ensure that user exists
func (s *MySqlUserManager) Ensure(ctx context.Context, obj runtime.Object, opts ...resourcemanager.ConfigOption) (bool, error) {
instance, err := s.convert(obj)
Expand Down Expand Up @@ -72,12 +74,12 @@ func (s *MySqlUserManager) Ensure(ctx context.Context, obj runtime.Object, opts
return false, nil
}

_, err = s.GetDB(ctx, instance.Spec.ResourceGroup, instance.Spec.Server, instance.Spec.DbName)
_, err = s.GetServer(ctx, instance.Spec.ResourceGroup, instance.Spec.Server)
if err != nil {
instance.Status.Message = errhelp.StripErrorIDs(err)
instance.Status.Provisioning = false

if mysql.IsErrorResourceNotFound(err) || mysql.IsErrorDatabaseBusy(err) {
if mysql.IsErrorResourceNotFound(err) {
return false, nil
}

Expand All @@ -92,7 +94,7 @@ func (s *MySqlUserManager) Ensure(ctx context.Context, obj runtime.Object, opts
ctx,
mysql.MySQLDriverName,
fullServerName,
instance.Spec.DbName,
mysqlDatabase,
mysql.MySQLServerPort,
adminUser,
adminPassword)
Expand Down Expand Up @@ -147,19 +149,18 @@ func (s *MySqlUserManager) Ensure(ctx context.Context, obj runtime.Object, opts
return false, err
}

// apply roles to user
if len(instance.Spec.Roles) == 0 {
instance.Status.Message = "No roles specified for user"
return false, fmt.Errorf("no roles specified for database user")
}

err = mysql.GrantUserRoles(ctx, user, instance.Spec.DbName, instance.Spec.Roles, db)
err = mysql.EnsureUserServerRoles(ctx, user, instance.Spec.Roles, db)
if err != nil {
err = errors.Wrap(err, "GrantUserRoles failed")
err = errors.Wrap(err, "ensuring server roles")
instance.Status.Message = err.Error()
return false, err
}

err = mysql.EnsureUserDatabaseRoles(ctx, user, instance.Spec.DatabaseRoles, db)
if err != nil {
err = errors.Wrap(err, "ensuring database roles")
instance.Status.Message

instance.Status.Provisioned = true
instance.Status.State = "Succeeded"
instance.Status.Message = resourcemanager.SuccessMsg
Expand Down Expand Up @@ -273,13 +274,6 @@ func (s *MySqlUserManager) GetParents(obj runtime.Object) ([]resourcemanager.Kub
}

return []resourcemanager.KubeParent{
{
Key: types.NamespacedName{
Namespace: instance.Namespace,
Name: instance.Spec.DbName,
},
Target: &v1alpha1.MySQLDatabase{},
},
{
Key: types.NamespacedName{
Namespace: instance.Namespace,
Expand All @@ -298,16 +292,16 @@ func (s *MySqlUserManager) GetParents(obj runtime.Object) ([]resourcemanager.Kub
}

// GetStatus gets the status
func (s *MySqlUserManager) GetStatus(obj runtime.Object) (*v1alpha1.ASOStatus, error) {
func (s *MySqlUserManager) GetStatus(obj runtime.Object) (*v1alpha2.ASOStatus, error) {
instance, err := s.convert(obj)
if err != nil {
return nil, err
}
return &instance.Status, nil
}

func (s *MySqlUserManager) convert(obj runtime.Object) (*v1alpha1.MySQLUser, error) {
local, ok := obj.(*v1alpha1.MySQLUser)
func (s *MySqlUserManager) convert(obj runtime.Object) (*v1alpha2.MySQLUser, error) {
local, ok := obj.(*v1alpha2.MySQLUser)
if !ok {
return nil, fmt.Errorf("failed type assertion on kind: %s", obj.GetObjectKind().GroupVersionKind().String())
}
Expand Down

0 comments on commit f168b60

Please sign in to comment.