@@ -94,6 +94,7 @@ func (r *BarbicanReconciler) GetLogger(ctx context.Context) logr.Logger {
9494//+kubebuilder:rbac:groups=keystone.openstack.org,resources=keystoneapis,verbs=get;list;watch;
9595//+kubebuilder:rbac:groups=keystone.openstack.org,resources=keystoneservices,verbs=get;list;watch;create;update;patch;delete;
9696//+kubebuilder:rbac:groups=keystone.openstack.org,resources=keystoneendpoints,verbs=get;list;watch;create;update;patch;delete;
97+ //+kubebuilder:rbac:groups=keystone.openstack.org,resources=applicationcredentials,verbs=get;list;watch
9798//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete;
9899//+kubebuilder:rbac:groups=core,resources=secrets,verbs=get;list;watch;create;update;patch;delete;
99100//+kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch;create;update;patch;delete;
@@ -108,6 +109,7 @@ func (r *BarbicanReconciler) GetLogger(ctx context.Context) logr.Logger {
108109
109110// service account, role, rolebinding
110111//+kubebuilder:rbac:groups="",resources=serviceaccounts,verbs=get;list;watch;create;update;patch
112+ //+kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch
111113//+kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=roles,verbs=get;list;watch;create;update;patch
112114//+kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=rolebindings,verbs=get;list;watch;create;update;patch
113115//+kubebuilder:rbac:groups="security.openshift.io",resourceNames=anyuid,resources=securitycontextconstraints,verbs=use
@@ -661,6 +663,25 @@ func (r *BarbicanReconciler) generateServiceConfig(
661663 "EnableSecureRBAC" : instance .Spec .BarbicanAPI .EnableSecureRBAC ,
662664 }
663665
666+ templateParameters ["UseApplicationCredentials" ] = false
667+ // fetch AC CR
668+ ac := & keystonev1.ApplicationCredential {}
669+ acName := types.NamespacedName {Namespace : instance .Namespace , Name : fmt .Sprintf ("ac-%s" , barbican .ServiceName )}
670+ if err := r .Client .Get (ctx , acName , ac ); err == nil {
671+ // fetch AC Secret
672+ secret := & corev1.Secret {}
673+ secName := types.NamespacedName {Namespace : ac .Namespace , Name : ac .Status .SecretName }
674+ if err := r .Client .Get (ctx , secName , secret ); err == nil {
675+ // switch to application credentials auth
676+ templateParameters ["UseApplicationCredentials" ] = true
677+ templateParameters ["ACID" ] = string (secret .Data ["AC_ID" ])
678+ templateParameters ["ACSecret" ] = string (secret .Data ["AC_SECRET" ])
679+ Log .Info ("Using ApplicationCredentials auth" )
680+ }
681+ } else if ! k8s_errors .IsNotFound (err ) {
682+ return err
683+ }
684+
664685 // To avoid a json parsing error in kolla files, we always need to set PKCS11ClientDataPath
665686 // This gets overridden in the PKCS11 section below if needed.
666687 templateParameters ["PKCS11ClientDataPath" ] = barbicanv1beta1 .DefaultPKCS11ClientDataPath
0 commit comments