Skip to content

Commit fb8c1e4

Browse files
authored
Copy generic-admission-server into pkg (#318)
1 parent 5a5093f commit fb8c1e4

File tree

2 files changed

+114
-6
lines changed

2 files changed

+114
-6
lines changed

apiserver.go

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package cmds
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"net"
7+
8+
"github.com/appscode/stash/pkg/admission/plugin"
9+
"github.com/appscode/stash/pkg/apiserver"
10+
"github.com/spf13/cobra"
11+
admissionv1beta1 "k8s.io/api/admission/v1beta1"
12+
genericapiserver "k8s.io/apiserver/pkg/server"
13+
genericoptions "k8s.io/apiserver/pkg/server/options"
14+
)
15+
16+
const defaultEtcdPathPrefix = "/registry/stash.appscode.com"
17+
18+
type AdmissionServerOptions struct {
19+
RecommendedOptions *genericoptions.RecommendedOptions
20+
21+
AdmissionHooks []apiserver.AdmissionHook
22+
23+
StdOut io.Writer
24+
StdErr io.Writer
25+
}
26+
27+
func NewAdmissionServerOptions(out, errOut io.Writer, admissionHooks ...apiserver.AdmissionHook) *AdmissionServerOptions {
28+
o := &AdmissionServerOptions{
29+
// TODO we will nil out the etcd storage options. This requires a later level of k8s.io/apiserver
30+
RecommendedOptions: genericoptions.NewRecommendedOptions(defaultEtcdPathPrefix, apiserver.Codecs.LegacyCodec(admissionv1beta1.SchemeGroupVersion)),
31+
32+
AdmissionHooks: admissionHooks,
33+
34+
StdOut: out,
35+
StdErr: errOut,
36+
}
37+
o.RecommendedOptions.Etcd = nil
38+
39+
return o
40+
}
41+
42+
// NewCommandStartMaster provides a CLI handler for 'start master' command
43+
func NewCommandStartAPIServer(out, errOut io.Writer, stopCh <-chan struct{}) *cobra.Command {
44+
o := NewAdmissionServerOptions(out, errOut)
45+
46+
cmd := &cobra.Command{
47+
Use: "apiserver",
48+
Short: "Launch Stash API server",
49+
Long: "Launch Stash API server",
50+
RunE: func(c *cobra.Command, args []string) error {
51+
o.AdmissionHooks = []apiserver.AdmissionHook{
52+
&plugin.AdmissionHook{},
53+
}
54+
55+
if err := o.Complete(); err != nil {
56+
return err
57+
}
58+
if err := o.Validate(args); err != nil {
59+
return err
60+
}
61+
if err := o.RunServer(stopCh); err != nil {
62+
return err
63+
}
64+
return nil
65+
},
66+
}
67+
68+
flags := cmd.Flags()
69+
o.RecommendedOptions.AddFlags(flags)
70+
71+
return cmd
72+
}
73+
74+
func (o AdmissionServerOptions) Validate(args []string) error {
75+
return nil
76+
}
77+
78+
func (o *AdmissionServerOptions) Complete() error {
79+
return nil
80+
}
81+
82+
func (o AdmissionServerOptions) Config() (*apiserver.Config, error) {
83+
// TODO have a "real" external address
84+
if err := o.RecommendedOptions.SecureServing.MaybeDefaultWithSelfSignedCerts("localhost", nil, []net.IP{net.ParseIP("127.0.0.1")}); err != nil {
85+
return nil, fmt.Errorf("error creating self-signed certificates: %v", err)
86+
}
87+
88+
serverConfig := genericapiserver.NewRecommendedConfig(apiserver.Codecs)
89+
if err := o.RecommendedOptions.ApplyTo(serverConfig); err != nil {
90+
return nil, err
91+
}
92+
93+
config := &apiserver.Config{
94+
GenericConfig: serverConfig,
95+
ExtraConfig: apiserver.ExtraConfig{
96+
AdmissionHooks: o.AdmissionHooks,
97+
},
98+
}
99+
return config, nil
100+
}
101+
102+
func (o AdmissionServerOptions) RunServer(stopCh <-chan struct{}) error {
103+
config, err := o.Config()
104+
if err != nil {
105+
return err
106+
}
107+
108+
server, err := config.Complete().New()
109+
if err != nil {
110+
return err
111+
}
112+
return server.GenericAPIServer.PrepareRun().Run(stopCh)
113+
}

root.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ import (
1010
v "github.com/appscode/go/version"
1111
"github.com/appscode/kutil/tools/analytics"
1212
"github.com/appscode/stash/client/scheme"
13-
"github.com/appscode/stash/pkg/admission/plugin"
1413
"github.com/appscode/stash/pkg/util"
1514
"github.com/jpillora/go-ogle-analytics"
16-
"github.com/openshift/generic-admission-server/pkg/cmd/server"
1715
"github.com/spf13/cobra"
1816
"github.com/spf13/pflag"
1917
genericapiserver "k8s.io/apiserver/pkg/server"
@@ -58,10 +56,7 @@ func NewRootCmd() *cobra.Command {
5856
rootCmd.AddCommand(NewCmdCheck())
5957

6058
stopCh := genericapiserver.SetupSignalHandler()
61-
cmd := server.NewCommandStartAdmissionServer(os.Stdout, os.Stderr, stopCh, &plugin.AdmissionHook{})
62-
cmd.Use = "admission-webhook"
63-
cmd.Long = "Launch Stash admission webhook server"
64-
cmd.Short = cmd.Long
59+
cmd := NewCommandStartAPIServer(os.Stdout, os.Stderr, stopCh)
6560
rootCmd.AddCommand(cmd)
6661

6762
return rootCmd

0 commit comments

Comments
 (0)