| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // Copyright 2019 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package volume_mount
- import (
- "context"
- "yunion.io/x/pkg/gotypes"
- "yunion.io/x/pkg/util/rbacscope"
- "yunion.io/x/onecloud/pkg/apis"
- api "yunion.io/x/onecloud/pkg/apis/compute"
- "yunion.io/x/onecloud/pkg/cloudcommon/db"
- "yunion.io/x/onecloud/pkg/cloudcommon/validators"
- "yunion.io/x/onecloud/pkg/compute/models"
- "yunion.io/x/onecloud/pkg/httperrors"
- "yunion.io/x/onecloud/pkg/mcclient"
- )
- func init() {
- models.RegisterContainerVolumeMountDriver(newCephFS())
- }
- type cephFS struct{}
- func newCephFS() models.IContainerVolumeMountDriver {
- return &cephFS{}
- }
- func (h cephFS) GetType() apis.ContainerVolumeMountType {
- return apis.CONTAINER_VOLUME_MOUNT_TYPE_CEPHF_FS
- }
- func (h cephFS) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, pod *models.SGuest, vm *apis.ContainerVolumeMount) (*apis.ContainerVolumeMount, error) {
- return vm, h.ValidatePodCreateData(ctx, userCred, vm, nil)
- }
- func (h cephFS) ValidatePodCreateData(ctx context.Context, userCred mcclient.TokenCredential, vm *apis.ContainerVolumeMount, input *api.ServerCreateInput) error {
- fs := vm.CephFS
- if fs == nil {
- return httperrors.NewNotEmptyError("ceph_fs is nil")
- }
- if len(fs.Id) == 0 {
- return httperrors.NewNotEmptyError("cep_fs.id is empty")
- }
- obj, err := validators.ValidateModel(ctx, userCred, models.FileSystemManager, &fs.Id)
- if err != nil {
- return err
- }
- filesystem := obj.(*models.SFileSystem)
- fs.Id = filesystem.Id
- if filesystem.Status != apis.STATUS_AVAILABLE {
- return httperrors.NewInvalidStatusError("invalid cephfs status %s", filesystem.Status)
- }
- account := filesystem.GetCloudaccount()
- if gotypes.IsNil(account) {
- return httperrors.NewInputParameterError("invalid cephfs %s", filesystem.Name)
- }
- if !db.IsAllowUpdate(ctx, rbacscope.ScopeProject, userCred, filesystem) {
- vm.ReadOnly = true
- }
- if account.Provider != api.CLOUD_PROVIDER_CEPHFS {
- return httperrors.NewInputParameterError("invalid cephfs type %s", account.Provider)
- }
- if gotypes.IsNil(account.Options) {
- return httperrors.NewInputParameterError("missing mon_host")
- }
- monHost, _ := account.Options.GetString("mon_host")
- if len(monHost) == 0 {
- return httperrors.NewInputParameterError("missing mon_host")
- }
- _, err = account.GetOptionPassword()
- return err
- }
|