create the rbd client access in the default namespace

This commit is contained in:
Travis Nielsen
2017-02-23 12:17:02 -08:00
parent a1bfd7cebe
commit 18ee98131c
3 changed files with 74 additions and 7 deletions
+2 -2
View File
@@ -10,5 +10,5 @@ parameters:
adminSecretName: rook-admin
adminSecretNamespace: rook
pool: rook
userId: demo-user
userSecretName: rook-demo-user
userId: rook-rbd-user
userSecretName: rook-rbd-user
+6 -5
View File
@@ -26,11 +26,12 @@ import (
)
const (
Namespace = "rook"
DataDirVolume = "rook-data"
DataDir = "/var/lib/rook"
RookType = "kubernetes.io/rook"
RbdType = "kubernetes.io/rbd"
Namespace = "rook"
DefaultNamespace = "default"
DataDirVolume = "rook-data"
DataDir = "/var/lib/rook"
RookType = "kubernetes.io/rook"
RbdType = "kubernetes.io/rbd"
)
func IsKubernetesResourceAlreadyExistError(err error) bool {
+66
View File
@@ -21,14 +21,22 @@ import (
"time"
"k8s.io/client-go/1.5/kubernetes"
"k8s.io/client-go/1.5/pkg/api/v1"
"github.com/rook/rook/pkg/cephmgr/client"
cephmon "github.com/rook/rook/pkg/cephmgr/mon"
"github.com/rook/rook/pkg/clusterd"
"github.com/rook/rook/pkg/operator/api"
"github.com/rook/rook/pkg/operator/k8sutil"
"github.com/rook/rook/pkg/operator/mon"
"github.com/rook/rook/pkg/operator/osd"
"github.com/rook/rook/pkg/operator/rgw"
)
const (
defaultPool = "rook"
)
type Operator struct {
Namespace string
MasterHost string
@@ -78,8 +86,66 @@ func (o *Operator) Run() error {
return fmt.Errorf("failed to start rgw. %+v", err)
}
err = o.createClientAccess(cluster)
if err != nil {
return fmt.Errorf("failed to create client access. %+v", err)
}
logger.Infof("DONE!")
<-time.After(1000000 * time.Second)
return nil
}
func (o *Operator) createClientAccess(clusterInfo *cephmon.ClusterInfo) error {
context := &clusterd.Context{}
conn, err := cephmon.ConnectToClusterAsAdmin(context, o.factory, clusterInfo)
if err != nil {
return fmt.Errorf("failed to connect to cluster: %+v", err)
}
defer conn.Shutdown()
// create the default rook pool
pool := client.CephStoragePoolDetails{Name: defaultPool}
_, err = client.CreatePool(conn, pool)
if err != nil {
return fmt.Errorf("failed to create default rook pool: %+v", err)
}
// create a user for rbd clients
username := "client.rook-rbd-user"
access := []string{"osd", "allow rwx", "mon", "allow r"}
// get-or-create-key for the user account
rbdKey, err := client.AuthGetOrCreateKey(conn, username, access)
if err != nil {
return fmt.Errorf("failed to get or create auth key for %s. %+v", username, err)
}
// store the secret for the rbd user in the default namespace
secrets := map[string]string{
"key": rbdKey,
}
secret := &v1.Secret{
ObjectMeta: v1.ObjectMeta{Name: "rook-rbd-user"},
StringData: secrets,
Type: k8sutil.RbdType,
}
_, err = o.clientset.Secrets(k8sutil.DefaultNamespace).Create(secret)
if err != nil {
if !k8sutil.IsKubernetesResourceAlreadyExistError(err) {
return fmt.Errorf("failed to save rook-rbd-user secret. %+v", err)
}
// update the secret in case we have a new cluster
_, err = o.clientset.Secrets(k8sutil.DefaultNamespace).Update(secret)
if err != nil {
return fmt.Errorf("failed to update rook-rbd-user secret. %+v", err)
}
logger.Infof("updated existing rook-rbd-user secret")
} else {
logger.Infof("saved rook-rbd-user secret")
}
return nil
}