-
Notifications
You must be signed in to change notification settings - Fork 785
/
create_git_server.go
145 lines (127 loc) · 3.71 KB
/
create_git_server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package create
import (
"github.com/jenkins-x/jx/v2/pkg/auth"
"github.com/jenkins-x/jx/v2/pkg/cmd/create/options"
"github.com/jenkins-x/jx/v2/pkg/cmd/helper"
"github.com/jenkins-x/jx/v2/pkg/cmd/opts"
"github.com/jenkins-x/jx/v2/pkg/cmd/templates"
"github.com/jenkins-x/jx/v2/pkg/log"
"github.com/jenkins-x/jx/v2/pkg/util"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
var (
create_git_server_long = templates.LongDesc(`
Adds a new Git Server URL
`)
create_git_server_example = templates.Examples(`
# Add a new Git server
jx create git server --kind bitbucketserver --url http://bitbucket.acme.org
# Add a new Git server with a name
jx create git server -k bitbucketcloud -u http://bitbucket.org -n MyBitBucket
For more documentation see: [https://jenkins-x.io/developing/git/](https://jenkins-x.io/developing/git/)
`)
gitKindToServiceName = map[string]string{
"gitea": "gitea-gitea",
}
)
// CreateGitServerOptions the options for the create spring command
type CreateGitServerOptions struct {
options.CreateOptions
Name string
Kind string
URL string
User string
Secret string
}
// NewCmdCreateGitServer creates a command object for the "create" command
func NewCmdCreateGitServer(commonOpts *opts.CommonOptions) *cobra.Command {
options := &CreateGitServerOptions{
CreateOptions: options.CreateOptions{
CommonOptions: commonOpts,
},
}
cmd := &cobra.Command{
Use: "server",
Short: "Creates a new Git server from a URL and kind",
Aliases: []string{"provider", "service"},
Long: create_git_server_long,
Example: create_git_server_example,
Run: func(cmd *cobra.Command, args []string) {
options.Cmd = cmd
options.Args = args
err := options.Run()
helper.CheckErr(err)
},
}
cmd.Flags().StringVarP(&options.Name, "name", "n", "", "The name for the Git server being created")
cmd.Flags().StringVarP(&options.Kind, "kind", "k", "", "The kind of Git server being created")
cmd.Flags().StringVarP(&options.URL, "url", "u", "", "The git server URL")
cmd.Flags().StringVarP(&options.User, "apiuser", "a", "", "The git server api user")
cmd.Flags().StringVarP(&options.Secret, "secret", "s", "", "The git server api user secret")
return cmd
}
// Run implements the command
func (o *CreateGitServerOptions) Run() error {
args := o.Args
kind := o.Kind
if kind == "" {
if len(args) < 1 {
return util.MissingOption("kind")
}
kind = args[0]
}
name := o.Name
if name == "" {
name = kind
}
gitUrl := o.URL
if gitUrl == "" {
if len(args) > 1 {
gitUrl = args[1]
} else {
// lets try find the git URL based on the provider
serviceName := gitKindToServiceName[kind]
if serviceName != "" {
url, err := o.FindService(serviceName)
if err != nil {
return errors.Wrapf(err, "Failed to find %s Git service %s", kind, serviceName)
}
gitUrl = url
}
}
}
if gitUrl == "" {
return util.MissingOption("url")
}
user := o.User
if user == "" {
return util.MissingOption("apiuser")
}
secret := o.Secret
if secret == "" {
return util.MissingOption("secret")
}
initUser := &auth.UserAuth{
Username: user,
ApiToken: secret,
}
authConfigSvc, err := o.GitAuthConfigService()
if err != nil {
return errors.Wrap(err, "failed to create CreateGitAuthConfigService")
}
config := authConfigSvc.Config()
server := config.GetOrCreateServerName(gitUrl, name, kind)
server.Users = append(server.Users, initUser)
config.CurrentServer = gitUrl
err = authConfigSvc.SaveConfig()
if err != nil {
return errors.Wrap(err, "failed to save GitAuthConfigService")
}
log.Logger().Infof("Added Git server %s for URL %s", util.ColorInfo(name), util.ColorInfo(gitUrl))
err = o.EnsureGitServiceCRD(server)
if err != nil {
return err
}
return nil
}