c9a6ebf8 |
package cmd
import ( |
2da2b953 |
"errors" |
c9a6ebf8 |
"fmt"
"io"
"github.com/spf13/cobra"
|
83c702b4 |
"k8s.io/kubernetes/pkg/fields"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/labels" |
2da2b953 |
|
c9a6ebf8 |
"github.com/openshift/origin/pkg/client" |
2da2b953 |
cliconfig "github.com/openshift/origin/pkg/cmd/cli/config" |
c9a6ebf8 |
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
projectapi "github.com/openshift/origin/pkg/project/api"
)
type NewProjectOptions struct { |
d2fe5ca0 |
ProjectName string
DisplayName string
Description string |
c9a6ebf8 |
Client client.Interface |
2da2b953 |
ProjectOptions *ProjectOptions
Out io.Writer |
c9a6ebf8 |
}
|
1558f2d9 |
const ( |
c124965f |
requestProjectLong = ` |
c3e1dbba |
Create a new project for yourself |
c9a6ebf8 |
|
c124965f |
Assuming your cluster admin has granted you permission, this command will create a new project
for you and assign you as the project admin. If your administrator has not given you permission to
create your own projects, contact your system administrator. |
c9a6ebf8 |
|
c124965f |
After your project is created it will be made your default project in your config.` |
c9a6ebf8 |
|
c36413f1 |
requestProjectExample = ` // Create a new project with minimal information |
14c0fea1 |
$ %[1]s web-team-dev |
c9a6ebf8 |
|
903f2626 |
// Create a new project with a display name and description
$ %[1]s web-team-dev --display-name="Web Team Development" --description="Development project for the web team."` |
1558f2d9 |
) |
c9a6ebf8 |
func NewCmdRequestProject(name, fullName, oscLoginName, oscProjectName string, f *clientcmd.Factory, out io.Writer) *cobra.Command {
options := &NewProjectOptions{} |
2da2b953 |
options.Out = out |
c9a6ebf8 |
cmd := &cobra.Command{ |
903f2626 |
Use: fmt.Sprintf("%s NAME [--display-name=DISPLAYNAME] [--description=DESCRIPTION]", name), |
1558f2d9 |
Short: "Request a new project", |
c36413f1 |
Long: fmt.Sprintf(requestProjectLong, oscLoginName, oscProjectName),
Example: fmt.Sprintf(requestProjectExample, fullName), |
c9a6ebf8 |
Run: func(cmd *cobra.Command, args []string) { |
2da2b953 |
if err := options.complete(cmd, f); err != nil {
kcmdutil.CheckErr(err) |
c9a6ebf8 |
}
var err error
if options.Client, _, err = f.Clients(); err != nil { |
2da2b953 |
kcmdutil.CheckErr(err) |
c9a6ebf8 |
}
if err := options.Run(); err != nil { |
2da2b953 |
kcmdutil.CheckErr(err) |
c9a6ebf8 |
}
},
}
|
903f2626 |
cmd.Flags().StringVar(&options.DisplayName, "display-name", "", "Project display name")
cmd.Flags().StringVar(&options.Description, "description", "", "Project description") |
c9a6ebf8 |
return cmd
}
|
2da2b953 |
func (o *NewProjectOptions) complete(cmd *cobra.Command, f *clientcmd.Factory) error { |
c9a6ebf8 |
args := cmd.Flags().Args()
if len(args) != 1 {
cmd.Help() |
2da2b953 |
return errors.New("must have exactly one argument") |
c9a6ebf8 |
}
o.ProjectName = args[0]
|
2da2b953 |
o.ProjectOptions = &ProjectOptions{}
o.ProjectOptions.PathOptions = cliconfig.NewPathOptions(cmd)
if err := o.ProjectOptions.Complete(f, []string{""}, o.Out); err != nil {
return err
}
return nil |
c9a6ebf8 |
}
func (o *NewProjectOptions) Run() error { |
c8ffe32a |
// TODO eliminate this when we get better forbidden messages
_, err := o.Client.ProjectRequests().List(labels.Everything(), fields.Everything())
if err != nil {
return err
}
|
c9a6ebf8 |
projectRequest := &projectapi.ProjectRequest{}
projectRequest.Name = o.ProjectName
projectRequest.DisplayName = o.DisplayName |
a1a1e760 |
projectRequest.Description = o.Description |
c9a6ebf8 |
projectRequest.Annotations = make(map[string]string) |
2da2b953 |
project, err := o.Client.ProjectRequests().Create(projectRequest)
if err != nil { |
c9a6ebf8 |
return err
}
|
2da2b953 |
if o.ProjectOptions != nil {
o.ProjectOptions.ProjectName = project.Name
o.ProjectOptions.ProjectOnly = true
if err := o.ProjectOptions.RunProject(); err != nil {
return err
}
}
|
c9a6ebf8 |
return nil
} |