Use TPR object namespace while creating its objects
This commit is contained in:
parent
9169808133
commit
dfde075c66
10
cmd/main.go
10
cmd/main.go
|
|
@ -16,7 +16,7 @@ import (
|
|||
|
||||
var (
|
||||
KubeConfigFile string
|
||||
Namespace string
|
||||
podNamespace string
|
||||
OutOfCluster bool
|
||||
version string
|
||||
)
|
||||
|
|
@ -26,9 +26,9 @@ func init() {
|
|||
flag.BoolVar(&OutOfCluster, "outofcluster", false, "Whether the operator runs in- our outside of the Kubernetes cluster.")
|
||||
flag.Parse()
|
||||
|
||||
Namespace = os.Getenv("MY_POD_NAMESPACE")
|
||||
if len(Namespace) == 0 {
|
||||
Namespace = "default"
|
||||
podNamespace = os.Getenv("MY_POD_NAMESPACE")
|
||||
if len(podNamespace) == 0 {
|
||||
podNamespace = "default"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ func ControllerConfig() *controller.Config {
|
|||
|
||||
teamsApi := teams.NewTeamsAPI(constants.TeamsAPIUrl)
|
||||
return &controller.Config{
|
||||
Namespace: Namespace,
|
||||
PodNamespace: podNamespace,
|
||||
KubeClient: client,
|
||||
RestClient: restClient,
|
||||
TeamsAPIClient: teamsApi,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ apiVersion: extensions/v1beta1
|
|||
kind: Deployment
|
||||
metadata:
|
||||
name: postgres-operator
|
||||
namespace: acid
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ kind: "Postgresql"
|
|||
|
||||
metadata:
|
||||
name: testcluster
|
||||
namespace: acid
|
||||
|
||||
spec:
|
||||
teamId: "50051320"
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ var (
|
|||
|
||||
//TODO: remove struct duplication
|
||||
type Config struct {
|
||||
Namespace string
|
||||
ControllerNamespace string
|
||||
KubeClient *kubernetes.Clientset //TODO: move clients to the better place?
|
||||
RestClient *rest.RESTClient
|
||||
EtcdClient etcdclient.KeysAPI
|
||||
|
|
@ -74,7 +74,8 @@ func New(cfg Config, spec *spec.Postgresql) *Cluster {
|
|||
}
|
||||
|
||||
func (c *Cluster) getReadonlyToken() (string, error) {
|
||||
credentialsSecret, err := c.config.KubeClient.Secrets(c.config.Namespace).Get("postgresql-operator")
|
||||
// for some reason PlatformCredentialsSet creates secrets only in the default namespace
|
||||
credentialsSecret, err := c.config.KubeClient.Secrets(v1.NamespaceDefault).Get("postgresql-operator")
|
||||
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Can't get credentials secret: %s", err)
|
||||
|
|
@ -198,7 +199,7 @@ func (c *Cluster) waitPodDelete() error {
|
|||
return retryutil.Retry(
|
||||
constants.ResourceCheckInterval, int(constants.ResourceCheckTimeout/constants.ResourceCheckInterval),
|
||||
func() (bool, error) {
|
||||
pods, err := c.config.KubeClient.Pods(c.config.Namespace).List(listOptions)
|
||||
pods, err := c.config.KubeClient.Pods((*c.cluster).Metadata.Namespace).List(listOptions)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
@ -213,7 +214,7 @@ func (c *Cluster) waitStatefulsetReady() error {
|
|||
listOptions := v1.ListOptions{
|
||||
LabelSelector: c.labelsSet().String(),
|
||||
}
|
||||
ss, err := c.config.KubeClient.StatefulSets(c.config.Namespace).List(listOptions)
|
||||
ss, err := c.config.KubeClient.StatefulSets((*c.cluster).Metadata.Namespace).List(listOptions)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
@ -228,6 +229,7 @@ func (c *Cluster) waitStatefulsetReady() error {
|
|||
|
||||
func (c *Cluster) waitPodLabelsReady() error {
|
||||
ls := c.labelsSet()
|
||||
namespace := (*c.cluster).Metadata.Namespace
|
||||
|
||||
listOptions := v1.ListOptions{
|
||||
LabelSelector: ls.String(),
|
||||
|
|
@ -238,7 +240,7 @@ func (c *Cluster) waitPodLabelsReady() error {
|
|||
replicaListOption := v1.ListOptions{
|
||||
LabelSelector: labels.Merge(ls, labels.Set{"spilo-role": "replica"}).String(),
|
||||
}
|
||||
pods, err := c.config.KubeClient.Pods(c.config.Namespace).List(listOptions)
|
||||
pods, err := c.config.KubeClient.Pods(namespace).List(listOptions)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -247,11 +249,11 @@ func (c *Cluster) waitPodLabelsReady() error {
|
|||
return retryutil.Retry(
|
||||
constants.ResourceCheckInterval, int(constants.ResourceCheckTimeout/constants.ResourceCheckInterval),
|
||||
func() (bool, error) {
|
||||
masterPods, err := c.config.KubeClient.Pods(c.config.Namespace).List(masterListOption)
|
||||
masterPods, err := c.config.KubeClient.Pods(namespace).List(masterListOption)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
replicaPods, err := c.config.KubeClient.Pods(c.config.Namespace).List(replicaListOption)
|
||||
replicaPods, err := c.config.KubeClient.Pods(namespace).List(replicaListOption)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
@ -305,7 +307,7 @@ func (c *Cluster) waitClusterReady() error {
|
|||
|
||||
func (c *Cluster) Delete() error {
|
||||
clusterName := (*c.cluster).Metadata.Name
|
||||
namespace := c.config.Namespace
|
||||
namespace := (*c.cluster).Metadata.Namespace
|
||||
orphanDependents := false
|
||||
deleteOptions := &v1.DeleteOptions{
|
||||
OrphanDependents: &orphanDependents,
|
||||
|
|
|
|||
|
|
@ -22,12 +22,12 @@ END;
|
|||
$$`
|
||||
|
||||
func (c *Cluster) createStatefulSet() {
|
||||
clusterName := (*c.cluster).Metadata.Name
|
||||
meta := (*c.cluster).Metadata
|
||||
|
||||
envVars := []v1.EnvVar{
|
||||
{
|
||||
Name: "SCOPE",
|
||||
Value: clusterName,
|
||||
Value: meta.Name,
|
||||
},
|
||||
{
|
||||
Name: "PGROOT",
|
||||
|
|
@ -114,7 +114,7 @@ bootstrap:
|
|||
}
|
||||
|
||||
container := v1.Container{
|
||||
Name: clusterName,
|
||||
Name: meta.Name,
|
||||
Image: c.dockerImage,
|
||||
ImagePullPolicy: v1.PullAlways,
|
||||
Resources: v1.ResourceRequirements{
|
||||
|
|
@ -155,6 +155,7 @@ bootstrap:
|
|||
template := v1.PodTemplateSpec{
|
||||
ObjectMeta: v1.ObjectMeta{
|
||||
Labels: c.labelsSet(),
|
||||
Namespace: meta.Namespace,
|
||||
Annotations: map[string]string{"pod.alpha.kubernetes.io/initialized": "true"},
|
||||
},
|
||||
Spec: podSpec,
|
||||
|
|
@ -162,17 +163,18 @@ bootstrap:
|
|||
|
||||
statefulSet := &v1beta1.StatefulSet{
|
||||
ObjectMeta: v1.ObjectMeta{
|
||||
Name: clusterName,
|
||||
Name: meta.Name,
|
||||
Namespace: meta.Namespace,
|
||||
Labels: c.labelsSet(),
|
||||
},
|
||||
Spec: v1beta1.StatefulSetSpec{
|
||||
Replicas: &c.cluster.Spec.NumberOfInstances,
|
||||
ServiceName: clusterName,
|
||||
ServiceName: meta.Name,
|
||||
Template: template,
|
||||
},
|
||||
}
|
||||
|
||||
_, err := c.config.KubeClient.StatefulSets(c.config.Namespace).Create(statefulSet)
|
||||
_, err := c.config.KubeClient.StatefulSets(meta.Namespace).Create(statefulSet)
|
||||
if err != nil {
|
||||
c.logger.Errorf("Can't create statefulset: %s", err)
|
||||
} else {
|
||||
|
|
@ -182,6 +184,7 @@ bootstrap:
|
|||
|
||||
func (c *Cluster) applySecrets() {
|
||||
var err error
|
||||
namespace := (*c.cluster).Metadata.Namespace
|
||||
for username, pgUser := range c.pgUsers {
|
||||
//Skip users with no password i.e. human users (they'll be authenticated using pam)
|
||||
if pgUser.password == "" {
|
||||
|
|
@ -190,6 +193,7 @@ func (c *Cluster) applySecrets() {
|
|||
secret := v1.Secret{
|
||||
ObjectMeta: v1.ObjectMeta{
|
||||
Name: c.credentialSecretName(username),
|
||||
Namespace: namespace,
|
||||
Labels: c.labelsSet(),
|
||||
},
|
||||
Type: v1.SecretTypeOpaque,
|
||||
|
|
@ -198,11 +202,11 @@ func (c *Cluster) applySecrets() {
|
|||
"password": []byte(pgUser.password),
|
||||
},
|
||||
}
|
||||
_, err = c.config.KubeClient.Secrets(c.config.Namespace).Create(&secret)
|
||||
_, err = c.config.KubeClient.Secrets(namespace).Create(&secret)
|
||||
if k8sutil.IsKubernetesResourceAlreadyExistError(err) {
|
||||
c.logger.Infof("Skipping update of '%s'", secret.Name)
|
||||
|
||||
curSecrets, err := c.config.KubeClient.Secrets(c.config.Namespace).Get(c.credentialSecretName(username))
|
||||
curSecrets, err := c.config.KubeClient.Secrets(namespace).Get(c.credentialSecretName(username))
|
||||
if err != nil {
|
||||
c.logger.Errorf("Can't get current secret: %s", err)
|
||||
}
|
||||
|
|
@ -223,17 +227,18 @@ func (c *Cluster) applySecrets() {
|
|||
}
|
||||
|
||||
func (c *Cluster) createService() {
|
||||
clusterName := (*c.cluster).Metadata.Name
|
||||
meta := (*c.cluster).Metadata
|
||||
|
||||
_, err := c.config.KubeClient.Services(c.config.Namespace).Get(clusterName)
|
||||
_, err := c.config.KubeClient.Services(meta.Namespace).Get(meta.Name)
|
||||
if !k8sutil.ResourceNotFound(err) {
|
||||
c.logger.Infof("Service '%s' already exists", clusterName)
|
||||
c.logger.Infof("Service '%s' already exists", meta.Name)
|
||||
return
|
||||
}
|
||||
|
||||
service := v1.Service{
|
||||
ObjectMeta: v1.ObjectMeta{
|
||||
Name: clusterName,
|
||||
Name: meta.Name,
|
||||
Namespace: meta.Namespace,
|
||||
Labels: c.labelsSet(),
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
|
|
@ -243,7 +248,7 @@ func (c *Cluster) createService() {
|
|||
},
|
||||
}
|
||||
|
||||
_, err = c.config.KubeClient.Services(c.config.Namespace).Create(&service)
|
||||
_, err = c.config.KubeClient.Services(meta.Namespace).Create(&service)
|
||||
if err != nil {
|
||||
c.logger.Errorf("Error while creating service: %+v", err)
|
||||
} else {
|
||||
|
|
@ -252,22 +257,23 @@ func (c *Cluster) createService() {
|
|||
}
|
||||
|
||||
func (c *Cluster) createEndpoint() {
|
||||
clusterName := (*c.cluster).Metadata.Name
|
||||
meta := (*c.cluster).Metadata
|
||||
|
||||
_, err := c.config.KubeClient.Endpoints(c.config.Namespace).Get(clusterName)
|
||||
_, err := c.config.KubeClient.Endpoints(meta.Namespace).Get(meta.Name)
|
||||
if !k8sutil.ResourceNotFound(err) {
|
||||
c.logger.Infof("Endpoint '%s' already exists", clusterName)
|
||||
c.logger.Infof("Endpoint '%s' already exists", meta.Name)
|
||||
return
|
||||
}
|
||||
|
||||
endpoint := v1.Endpoints{
|
||||
ObjectMeta: v1.ObjectMeta{
|
||||
Name: clusterName,
|
||||
Name: meta.Name,
|
||||
Namespace: meta.Namespace,
|
||||
Labels: c.labelsSet(),
|
||||
},
|
||||
}
|
||||
|
||||
_, err = c.config.KubeClient.Endpoints(c.config.Namespace).Create(&endpoint)
|
||||
_, err = c.config.KubeClient.Endpoints(meta.Namespace).Create(&endpoint)
|
||||
if err != nil {
|
||||
c.logger.Errorf("Error while creating endpoint: %+v", err)
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import (
|
|||
)
|
||||
|
||||
type Config struct {
|
||||
Namespace string
|
||||
PodNamespace string
|
||||
KubeClient *kubernetes.Clientset
|
||||
RestClient *rest.RESTClient
|
||||
EtcdClient etcdclient.KeysAPI
|
||||
|
|
@ -81,6 +81,7 @@ func (c *Controller) createTPR() error {
|
|||
tpr := &v1beta1extensions.ThirdPartyResource{
|
||||
ObjectMeta: v1.ObjectMeta{
|
||||
Name: TPRName,
|
||||
//PodNamespace: c.config.PodNamespace, //ThirdPartyResources are cluster-wide
|
||||
},
|
||||
Versions: []v1beta1extensions.APIVersion{
|
||||
{Name: constants.TPRApiVersion},
|
||||
|
|
@ -101,12 +102,12 @@ func (c *Controller) createTPR() error {
|
|||
|
||||
restClient := c.config.RestClient
|
||||
|
||||
return k8sutil.WaitTPRReady(restClient, constants.TPRReadyWaitInterval, constants.TPRReadyWaitTimeout, c.config.Namespace)
|
||||
return k8sutil.WaitTPRReady(restClient, constants.TPRReadyWaitInterval, constants.TPRReadyWaitTimeout, c.config.PodNamespace)
|
||||
}
|
||||
|
||||
func (c *Controller) makeClusterConfig() cluster.Config {
|
||||
return cluster.Config{
|
||||
Namespace: c.config.Namespace,
|
||||
ControllerNamespace: c.config.PodNamespace,
|
||||
KubeClient: c.config.KubeClient,
|
||||
RestClient: c.config.RestClient,
|
||||
EtcdClient: c.config.EtcdClient,
|
||||
|
|
|
|||
Loading…
Reference in New Issue