in oracle/controllers/testhelpers/envtest.go [559:674]
func deployOperator(ctx context.Context, k8sClient client.Client, CPNamespace, DPNamespace string) (func() error, error) {
var agentImageTag, agentImageRepo, agentImageProject string
if agentImageTag = os.Getenv("PROW_IMAGE_TAG"); agentImageTag == "" {
return nil, errors.New("PROW_IMAGE_TAG envvar was not set. Did you try to test without make?")
}
if agentImageRepo = os.Getenv("PROW_IMAGE_REPO"); agentImageRepo == "" {
return nil, errors.New("PROW_IMAGE_REPO envar was not set. Did you try to test without make?")
}
if agentImageProject = os.Getenv("PROW_PROJECT"); agentImageProject == "" {
return nil, errors.New("PROW_PROJECT envar was not set. Did you try to test without make?")
}
dbInitImage := fmt.Sprintf("%s/%s/%s:%s", agentImageRepo, agentImageProject, dbInitImage, agentImageTag)
loggingSidecarImage := fmt.Sprintf("%s/%s/%s:%s", agentImageRepo, agentImageProject, loggingSidecarImage, agentImageTag)
monitoringAgentImage := fmt.Sprintf("%s/%s/%s:%s", agentImageRepo, agentImageProject, monitoringAgentImage, agentImageTag)
operatorImage := fmt.Sprintf("%s/%s/%s:%s", agentImageRepo, agentImageProject, operatorImage, agentImageTag)
// Global modified for usage in pitr test.
PitrAgentImage = fmt.Sprintf("%s/%s/%s:%s", agentImageRepo, agentImageProject, PitrAgentImage, agentImageTag)
objs, err := readYamls([]string{
"config/manager/manager.yaml",
"config/rbac/role.yaml",
"config/rbac/role_binding.yaml",
})
if err != nil {
return nil, err
}
// minimal set of operator.yaml we need to deploy.
var d *appsv1.Deployment
var cr *rbacv1.ClusterRole
var crb *rbacv1.ClusterRoleBinding
for _, obj := range objs {
if _, ok := obj.(*appsv1.Deployment); ok {
d = obj.(*appsv1.Deployment)
}
if _, ok := obj.(*rbacv1.ClusterRole); ok {
if cr != nil {
return nil, fmt.Errorf("test needs to be updated to handle multiple ClusterRoles")
}
cr = obj.(*rbacv1.ClusterRole)
}
if _, ok := obj.(*rbacv1.ClusterRoleBinding); ok {
if crb != nil {
return nil, fmt.Errorf("test needs to be updated to handle multiple ClusterRoleBindings")
}
crb = obj.(*rbacv1.ClusterRoleBinding)
}
}
//Check DPNamespace against CPNamespace. If they're different, create the DPNamespace.
if CPNamespace != DPNamespace {
By("Deploying data plane in " + DPNamespace)
nsObj := &corev1.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: DPNamespace,
},
}
ctx := context.Background()
Expect(k8sClient.Create(ctx, nsObj)).Should(Succeed())
}
// Add in our overrides.
cr.ObjectMeta.Name = "manager-role-" + CPNamespace
crb.ObjectMeta.Name = "manager-rolebinding-" + CPNamespace
crb.RoleRef.Name = cr.ObjectMeta.Name
crb.Subjects[0].Namespace = CPNamespace
d.Namespace = CPNamespace
d.Spec.Template.Spec.Containers[0].Image = operatorImage
d.Spec.Template.Spec.Containers[0].ImagePullPolicy = corev1.PullAlways
d.Spec.Template.Spec.Containers[0].Args = []string{
"--logtostderr=true",
"--enable-leader-election=false",
"--namespace=" + DPNamespace,
"--db_init_image_uri=" + dbInitImage,
"--logging_sidecar_image_uri=" + loggingSidecarImage,
"--monitoring_agent_image_uri=" + monitoringAgentImage,
}
// Ensure account has cluster admin to create ClusterRole/Binding. You
// can figure out the k8s account name from a GCE service account name
// using the `uniqueId` property from `gcloud iam service-accounts
// describe some@service.account`.
if err := k8sClient.Create(ctx, cr); err != nil {
return nil, err
}
if err := k8sClient.Create(ctx, crb); err != nil {
k8sClient.Delete(ctx, cr)
return nil, err
}
if err := k8sClient.Create(ctx, d); err != nil {
k8sClient.Delete(ctx, cr)
k8sClient.Delete(ctx, crb)
return nil, err
}
// Ensure deployment succeeds.
instKey := client.ObjectKey{Namespace: CPNamespace, Name: d.Name}
Eventually(func() int {
err := k8sClient.Get(ctx, instKey, d)
if err != nil {
return 0
}
return int(d.Status.ReadyReplicas)
}, 10*time.Minute, 5*time.Second).Should(Equal(1))
return func() error {
if err := k8sClient.Delete(ctx, cr); err != nil {
return err
}
if err := k8sClient.Delete(ctx, crb); err != nil {
return err
}
return nil
}, nil
}