@@ -27,11 +27,13 @@ import (
2727 . "github.com/openstack-k8s-operators/lib-common/modules/common/test/helpers"
2828 mariadb_test "github.com/openstack-k8s-operators/mariadb-operator/api/test/helpers"
2929 corev1 "k8s.io/api/core/v1"
30+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3031 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
3132 "k8s.io/apimachinery/pkg/types"
3233
3334 memcachedv1 "github.com/openstack-k8s-operators/infra-operator/apis/memcached/v1beta1"
3435 topologyv1 "github.com/openstack-k8s-operators/infra-operator/apis/topology/v1beta1"
36+ keystonev1 "github.com/openstack-k8s-operators/keystone-operator/api/v1beta1"
3537 condition "github.com/openstack-k8s-operators/lib-common/modules/common/condition"
3638 util "github.com/openstack-k8s-operators/lib-common/modules/common/util"
3739 manilav1 "github.com/openstack-k8s-operators/manila-operator/api/v1beta1"
@@ -1459,6 +1461,106 @@ var _ = Describe("Manila controller", func() {
14591461
14601462 })
14611463
1464+ When ("An ApplicationCredential is created for Manila" , func () {
1465+ var (
1466+ acName string
1467+ acSecretName string
1468+ servicePasswordSecret string
1469+ passwordSelector string
1470+ )
1471+ BeforeEach (func () {
1472+ servicePasswordSecret = "ac-test-osp-secret" //nolint:gosec // G101
1473+ passwordSelector = "ManilaPassword"
1474+
1475+ DeferCleanup (th .DeleteInstance , CreateManilaSecret (manilaTest .Instance .Namespace , servicePasswordSecret ))
1476+ DeferCleanup (th .DeleteInstance , CreateManilaMessageBusSecret (manilaTest .Instance .Namespace , manilaTest .RabbitmqSecretName ))
1477+ DeferCleanup (
1478+ infra .DeleteMemcached ,
1479+ infra .CreateMemcached (manilaTest .ManilaMemcached .Namespace , manilaTest .MemcachedInstance , memcachedSpec ))
1480+ infra .SimulateMemcachedReady (manilaTest .ManilaMemcached )
1481+
1482+ spec := GetDefaultManilaSpec ()
1483+ spec ["secret" ] = servicePasswordSecret
1484+ DeferCleanup (th .DeleteInstance , CreateManila (manilaTest .Instance , spec ))
1485+ DeferCleanup (
1486+ mariadb .DeleteDBService ,
1487+ mariadb .CreateDBService (
1488+ manilaTest .ManilaDatabaseName .Namespace ,
1489+ GetManila (manilaTest .Instance ).Spec .DatabaseInstance ,
1490+ corev1.ServiceSpec {
1491+ Ports : []corev1.ServicePort {{Port : 3306 }},
1492+ },
1493+ ),
1494+ )
1495+ DeferCleanup (keystone .DeleteKeystoneAPI , keystone .CreateKeystoneAPI (manilaTest .Instance .Namespace ))
1496+
1497+ acName = fmt .Sprintf ("ac-%s" , manila .ServiceName )
1498+ acSecretName = acName + "-secret"
1499+ secret := & corev1.Secret {}
1500+ secret .Name = acSecretName
1501+ secret .Namespace = manilaTest .Instance .Namespace
1502+ secret .Data = map [string ][]byte {
1503+ "AC_ID" : []byte ("test-ac-id" ),
1504+ "AC_SECRET" : []byte ("test-ac-secret" ),
1505+ }
1506+ DeferCleanup (k8sClient .Delete , ctx , secret )
1507+ Expect (k8sClient .Create (ctx , secret )).To (Succeed ())
1508+
1509+ ac := & keystonev1.KeystoneApplicationCredential {
1510+ ObjectMeta : metav1.ObjectMeta {
1511+ Namespace : manilaTest .Instance .Namespace ,
1512+ Name : acName ,
1513+ },
1514+ Spec : keystonev1.KeystoneApplicationCredentialSpec {
1515+ UserName : manila .ServiceName ,
1516+ Secret : servicePasswordSecret ,
1517+ PasswordSelector : passwordSelector ,
1518+ Roles : []string {"admin" , "member" },
1519+ AccessRules : []keystonev1.ACRule {{Service : "identity" , Method : "POST" , Path : "/auth/tokens" }},
1520+ ExpirationDays : 30 ,
1521+ GracePeriodDays : 5 ,
1522+ },
1523+ }
1524+ DeferCleanup (k8sClient .Delete , ctx , ac )
1525+ Expect (k8sClient .Create (ctx , ac )).To (Succeed ())
1526+
1527+ fetched := & keystonev1.KeystoneApplicationCredential {}
1528+ key := types.NamespacedName {Namespace : ac .Namespace , Name : ac .Name }
1529+ Expect (k8sClient .Get (ctx , key , fetched )).To (Succeed ())
1530+
1531+ fetched .Status .SecretName = acSecretName
1532+ now := metav1 .Now ()
1533+ readyCond := condition.Condition {
1534+ Type : condition .ReadyCondition ,
1535+ Status : corev1 .ConditionTrue ,
1536+ Reason : condition .ReadyReason ,
1537+ Message : condition .ReadyMessage ,
1538+ LastTransitionTime : now ,
1539+ }
1540+ fetched .Status .Conditions = condition.Conditions {readyCond }
1541+ Expect (k8sClient .Status ().Update (ctx , fetched )).To (Succeed ())
1542+
1543+ infra .SimulateTransportURLReady (manilaTest .ManilaTransportURL )
1544+ mariadb .SimulateMariaDBAccountCompleted (manilaTest .ManilaDatabaseAccount )
1545+ mariadb .SimulateMariaDBDatabaseCompleted (manilaTest .ManilaDatabaseName )
1546+ })
1547+
1548+ It ("should render ApplicationCredential auth in 00-config.conf" , func () {
1549+ // Retrieve the generated config secret
1550+ configDataMap := th .GetSecret (manilaTest .ManilaConfigSecret )
1551+
1552+ conf := configDataMap .Data ["00-config.conf" ]
1553+ Expect (string (conf )).Should (
1554+ ContainSubstring ("auth_type = v3applicationcredential" ))
1555+ Expect (string (conf )).Should (
1556+ ContainSubstring ("application_credential_id = test-ac-id" ))
1557+ Expect (string (conf )).Should (
1558+ ContainSubstring ("application_credential_secret = test-ac-secret" ))
1559+ Expect (string (conf )).Should (
1560+ Not (ContainSubstring ("auth_type = password" )))
1561+ })
1562+ })
1563+
14621564})
14631565
14641566var _ = Describe ("Manila Webhook" , func () {
@@ -1567,4 +1669,5 @@ var _ = Describe("Manila Webhook", func() {
15671669 return instance , fmt .Sprintf ("manilaShares[%s].topologyRef" , instance )
15681670 }),
15691671 )
1672+
15701673})
0 commit comments