Skip to content

Commit 5898a96

Browse files
Merge pull request #20516 from mfojtik/up-95-external-config
up: move cluster up to external config
2 parents 3e8705d + c2ed5ec commit 5898a96

23 files changed

+200
-193
lines changed

hack/import-restrictions.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,7 @@
458458
"vendor/github.com/RangelReale/osincli",
459459
"vendor/github.com/spf13/cobra",
460460
"vendor/github.com/spf13/pflag",
461+
"vendor/github.com/ghodss/yaml",
461462
"vendor/golang.org",
462463
"vendor/gopkg.in/ldap.v2",
463464
"vendor/k8s.io/api",
@@ -476,7 +477,7 @@
476477
"github.com/openshift/origin/pkg/authorization/generated",
477478
"github.com/openshift/origin/pkg/build/apis/build/v1",
478479
"github.com/openshift/origin/pkg/build/generated",
479-
"github.com/openshift/origin/pkg/image/apis/image/v1",
480+
"github.com/openshift/origin/pkg/image/apis/image/v1",
480481
"github.com/openshift/origin/pkg/image/generated",
481482
"github.com/openshift/origin/pkg/image/util",
482483
"github.com/openshift/origin/pkg/network/generated",
@@ -524,6 +525,7 @@
524525
"github.com/openshift/origin/pkg/cmd/server/apis/config",
525526
"github.com/openshift/origin/pkg/cmd/server/apis/config/install",
526527
"github.com/openshift/origin/pkg/cmd/server/apis/config/latest",
528+
"github.com/openshift/origin/pkg/cmd/server/apis/config/v1",
527529
"github.com/openshift/origin/pkg/cmd/server/apis/config/validation/ldap",
528530
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy",
529531
"github.com/openshift/origin/pkg/cmd/server/etcd",

pkg/cmd/server/admin/create_nodeconfig.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ func (o CreateNodeConfigOptions) MakeNodeConfig(serverCertFile, serverKeyFile, n
456456
}
457457

458458
// Roundtrip the config to v1 and back to ensure proper defaults are set.
459-
ext, err := configapi.Scheme.ConvertToVersion(config, configv1.SchemeGroupVersion)
459+
ext, err := configapi.Scheme.ConvertToVersion(config, configv1.LegacySchemeGroupVersion)
460460
if err != nil {
461461
return err
462462
}
@@ -485,7 +485,7 @@ func (o CreateNodeConfigOptions) MakeNodeJSON(nodeJSONFile string) error {
485485
node := &kapi.Node{}
486486
node.Name = o.NodeName
487487

488-
json, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(configv1.SchemeGroupVersion), node)
488+
json, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(configv1.LegacySchemeGroupVersion), node)
489489
if err != nil {
490490
return err
491491
}

pkg/cmd/server/apis/config/latest/helpers.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func getExternalZeroValue(obj runtime.Object) (runtime.Object, error) {
146146
if len(gvks) == 0 { // should never happen
147147
return nil, fmt.Errorf("no gvks found for %#v", obj)
148148
}
149-
gvk := configv1.SchemeGroupVersion.WithKind(gvks[0].Kind)
149+
gvk := configv1.LegacySchemeGroupVersion.WithKind(gvks[0].Kind)
150150
return configapi.Scheme.New(gvk)
151151
}
152152

pkg/cmd/server/apis/config/serialization_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -454,8 +454,8 @@ func TestSpecificKind(t *testing.T) {
454454
}
455455
seed := int64(2703387474910584091) //rand.Int63()
456456
for i := 0; i < fuzzIters; i++ {
457-
fuzzInternalObject(t, configapiv1.SchemeGroupVersion, item, seed)
458-
roundTrip(t, serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(configapiv1.SchemeGroupVersion), item)
457+
fuzzInternalObject(t, configapiv1.LegacySchemeGroupVersion, item, seed)
458+
roundTrip(t, serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(configapiv1.LegacySchemeGroupVersion), item)
459459
}
460460
}
461461

@@ -487,8 +487,8 @@ func TestTypes(t *testing.T) {
487487
}
488488
seed := rand.Int63()
489489

490-
fuzzInternalObject(t, configapiv1.SchemeGroupVersion, item, seed)
491-
roundTrip(t, serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(configapiv1.SchemeGroupVersion), item)
490+
fuzzInternalObject(t, configapiv1.LegacySchemeGroupVersion, item, seed)
491+
roundTrip(t, serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(configapiv1.LegacySchemeGroupVersion), item)
492492
}
493493
}
494494
}
@@ -511,7 +511,7 @@ func TestSpecificRoundTrips(t *testing.T) {
511511
},
512512
},
513513
},
514-
to: configapiv1.SchemeGroupVersion,
514+
to: configapiv1.LegacySchemeGroupVersion,
515515
out: &configapiv1.MasterConfig{
516516
TypeMeta: metav1.TypeMeta{Kind: "MasterConfig", APIVersion: "v1"},
517517
AdmissionConfig: configapiv1.AdmissionConfig{
@@ -533,7 +533,7 @@ func TestSpecificRoundTrips(t *testing.T) {
533533
},
534534
VolumeConfig: configapiv1.MasterVolumeConfig{DynamicProvisioningEnabled: &boolFalse},
535535
},
536-
from: configapiv1.SchemeGroupVersion,
536+
from: configapiv1.LegacySchemeGroupVersion,
537537
},
538538
}
539539

pkg/cmd/server/apis/config/v1/register.go

+8-10
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,25 @@ import (
99
"github.com/openshift/origin/pkg/cmd/server/apis/config"
1010
)
1111

12-
const GroupName = ""
13-
14-
// SchemeGroupVersion is group version used to register these objects
15-
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"}
16-
1712
var (
18-
SchemeBuilder = runtime.NewSchemeBuilder(
19-
addKnownTypes,
13+
// Legacy is the 'v1' apiVersion of config
14+
LegacyGroupName = ""
15+
LegacySchemeGroupVersion = schema.GroupVersion{Group: LegacyGroupName, Version: "v1"}
16+
legacySchemeBuilder = runtime.NewSchemeBuilder(
17+
addKnownTypesToLegacy,
2018
config.InstallLegacy,
2119
coreinternalconversions.AddToScheme,
2220
buildinternalconversions.Install,
2321

2422
addConversionFuncs,
2523
addDefaultingFuncs,
2624
)
27-
InstallLegacy = SchemeBuilder.AddToScheme
25+
InstallLegacy = legacySchemeBuilder.AddToScheme
2826
)
2927

3028
// Adds the list of known types to api.Scheme.
31-
func addKnownTypes(scheme *runtime.Scheme) error {
32-
scheme.AddKnownTypes(SchemeGroupVersion,
29+
func addKnownTypesToLegacy(scheme *runtime.Scheme) error {
30+
scheme.AddKnownTypes(LegacySchemeGroupVersion,
3331
&MasterConfig{},
3432
&NodeConfig{},
3533
&SessionSecrets{},

pkg/cmd/server/apis/config/v1/stringsource_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
)
1414

1515
func TestStringSourceUnmarshaling(t *testing.T) {
16-
codec := serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(SchemeGroupVersion)
16+
codec := serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(LegacySchemeGroupVersion)
1717

1818
testcases := map[string]struct {
1919
JSON string
@@ -94,7 +94,7 @@ func TestStringSourceUnmarshaling(t *testing.T) {
9494
}
9595

9696
func TestStringSourceMarshaling(t *testing.T) {
97-
codec := serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(SchemeGroupVersion)
97+
codec := serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(LegacySchemeGroupVersion)
9898

9999
testcases := map[string]struct {
100100
Object configapi.StringSource

pkg/cmd/server/apis/config/v1/types_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ volumeConfig:
183183
}
184184

185185
func TestMasterConfig(t *testing.T) {
186-
internal.Scheme.AddKnownTypes(v1.SchemeGroupVersion, &testtypes.AdmissionPluginTestConfig{})
186+
internal.Scheme.AddKnownTypes(v1.LegacySchemeGroupVersion, &testtypes.AdmissionPluginTestConfig{})
187187
internal.Scheme.AddKnownTypes(internal.SchemeGroupVersion, &testtypes.AdmissionPluginTestConfig{})
188188
config := &internal.MasterConfig{
189189
ServingInfo: internal.HTTPServingInfo{
@@ -261,7 +261,7 @@ func TestMasterConfig(t *testing.T) {
261261

262262
func writeYAML(obj runtime.Object) ([]byte, error) {
263263
// Round-trip to pick up defaults
264-
externalObj, err := internal.Scheme.ConvertToVersion(obj, v1.SchemeGroupVersion)
264+
externalObj, err := internal.Scheme.ConvertToVersion(obj, v1.LegacySchemeGroupVersion)
265265
if err != nil {
266266
return nil, err
267267
}
@@ -271,7 +271,7 @@ func writeYAML(obj runtime.Object) ([]byte, error) {
271271
return nil, err
272272
}
273273

274-
json, err := runtime.Encode(serializer.NewCodecFactory(internal.Scheme).LegacyCodec(v1.SchemeGroupVersion), internalObj)
274+
json, err := runtime.Encode(serializer.NewCodecFactory(internal.Scheme).LegacyCodec(v1.LegacySchemeGroupVersion), internalObj)
275275
if err != nil {
276276
return nil, err
277277
}

pkg/cmd/server/start/master_args.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ func (args MasterArgs) BuildSerializeableMasterConfig() (*configapi.MasterConfig
305305
admin.DefaultServiceAccountPublicKeyFile(args.ConfigDir.Value()),
306306
}
307307

308-
internal, err := applyDefaults(config, configapiv1.SchemeGroupVersion)
308+
internal, err := applyDefaults(config, configapiv1.LegacySchemeGroupVersion)
309309
if err != nil {
310310
return nil, err
311311
}

pkg/cmd/server/start/node_args.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ func (args NodeArgs) BuildSerializeableNodeConfig() (*configapi.NodeConfig, erro
229229
config.ServingInfo.ClientCA = admin.DefaultKubeletClientCAFile(args.MasterCertDir)
230230
}
231231

232-
internal, err := applyDefaults(config, configapiv1.SchemeGroupVersion)
232+
internal, err := applyDefaults(config, configapiv1.LegacySchemeGroupVersion)
233233
if err != nil {
234234
return nil, err
235235
}

pkg/oc/clusteradd/componentinstall/apply_list.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010

1111
"k8s.io/apimachinery/pkg/util/wait"
1212

13-
"github.com/openshift/origin/pkg/oc/clusterup/coreinstall/kubeapiserver"
1413
"github.com/openshift/origin/pkg/oc/clusterup/docker/dockerhelper"
1514
"github.com/openshift/origin/pkg/oc/clusterup/docker/run"
1615
"github.com/openshift/origin/pkg/oc/lib/errors"
@@ -60,7 +59,7 @@ func (opt *installReadyList) Name() string {
6059
func (opt *installReadyList) Install(dockerClient dockerhelper.Interface) error {
6160
imageRunHelper := run.NewRunHelper(dockerhelper.NewHelper(dockerClient)).New()
6261

63-
clusterAdminConfigBytes, err := ioutil.ReadFile(path.Join(opt.baseDir, kubeapiserver.KubeAPIServerDirName, "admin.kubeconfig"))
62+
clusterAdminConfigBytes, err := ioutil.ReadFile(path.Join(opt.baseDir, "kube-apiserver", "admin.kubeconfig"))
6463
if err != nil {
6564
return err
6665
}

pkg/oc/clusteradd/componentinstall/apply_template.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import (
88
"time"
99

1010
"github.com/golang/glog"
11-
"github.com/openshift/origin/pkg/oc/clusterup/coreinstall/kubeapiserver"
12-
1311
"k8s.io/apimachinery/pkg/util/wait"
1412

1513
"github.com/openshift/origin/pkg/oc/clusterup/docker/dockerhelper"
@@ -82,7 +80,7 @@ func (opt installReadyTemplate) Install(dockerClient dockerhelper.Interface) err
8280

8381
glog.Infof("Installing %q\n", opt.Name())
8482

85-
clusterAdminConfigBytes, err := ioutil.ReadFile(path.Join(opt.baseDir, kubeapiserver.KubeAPIServerDirName, "admin.kubeconfig"))
83+
clusterAdminConfigBytes, err := ioutil.ReadFile(path.Join(opt.baseDir, "kube-apiserver", "admin.kubeconfig"))
8684
if err != nil {
8785
return err
8886
}

pkg/oc/clusteradd/componentinstall/context.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"io/ioutil"
55
"path"
66

7-
"github.com/openshift/origin/pkg/oc/clusterup/coreinstall/kubeapiserver"
87
restclient "k8s.io/client-go/rest"
98
kclientcmd "k8s.io/client-go/tools/clientcmd"
109
)
@@ -68,7 +67,7 @@ func (c *installContext) ImagePullPolicy() string {
6867
}
6968

7069
func NewComponentInstallContext(clientImageName, imageFormat, pullPolicy, baseDir string, logLevel int) (Context, error) {
71-
clusterAdminConfigBytes, err := ioutil.ReadFile(path.Join(baseDir, kubeapiserver.KubeAPIServerDirName, adminKubeConfigFileName))
70+
clusterAdminConfigBytes, err := ioutil.ReadFile(path.Join(baseDir, "kube-apiserver", adminKubeConfigFileName))
7271
if err != nil {
7372
return nil, err
7473
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package componentinstall
2+
3+
import (
4+
"fmt"
5+
"io/ioutil"
6+
7+
"github.com/ghodss/yaml"
8+
9+
"k8s.io/apimachinery/pkg/runtime"
10+
"k8s.io/apimachinery/pkg/runtime/serializer"
11+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
12+
13+
configv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1"
14+
)
15+
16+
var (
17+
masterConfigScheme = runtime.NewScheme()
18+
masterConfigDecoder runtime.Decoder
19+
masterConfigEncoder runtime.Encoder
20+
)
21+
22+
func init() {
23+
utilruntime.Must(configv1.InstallLegacy(masterConfigScheme))
24+
25+
// TODO: Remove this when we start generating config.openshift.io/v1 configs
26+
utilruntime.Must(configv1.InstallLegacy(masterConfigScheme))
27+
28+
configCodecfactory := serializer.NewCodecFactory(masterConfigScheme)
29+
masterConfigDecoder = configCodecfactory.UniversalDecoder(configv1.LegacySchemeGroupVersion)
30+
masterConfigEncoder = configCodecfactory.LegacyCodec(configv1.LegacySchemeGroupVersion)
31+
}
32+
33+
func WriteMasterConfig(filename string, config *configv1.MasterConfig) error {
34+
json, err := runtime.Encode(masterConfigEncoder, config)
35+
if err != nil {
36+
return fmt.Errorf("unable to encode master config: %v", err)
37+
}
38+
yamlBytes, err := yaml.JSONToYAML(json)
39+
if err != nil {
40+
return err
41+
}
42+
43+
return ioutil.WriteFile(filename, yamlBytes, 0644)
44+
}
45+
46+
func ReadMasterConfig(filename string) (*configv1.MasterConfig, error) {
47+
masterBytes, err := ioutil.ReadFile(filename)
48+
if err != nil {
49+
return nil, err
50+
}
51+
return ReadMasterConfigBytes(masterBytes)
52+
}
53+
54+
func ReadMasterConfigBytes(masterBytes []byte) (*configv1.MasterConfig, error) {
55+
obj, err := runtime.Decode(masterConfigDecoder, masterBytes)
56+
if err != nil {
57+
return nil, err
58+
}
59+
masterConfig, ok := obj.(*configv1.MasterConfig)
60+
if !ok {
61+
return nil, fmt.Errorf("object %T is not MasterConfig", masterConfig)
62+
}
63+
return masterConfig, nil
64+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package componentinstall
2+
3+
import (
4+
"fmt"
5+
"io/ioutil"
6+
7+
"github.com/ghodss/yaml"
8+
9+
"k8s.io/apimachinery/pkg/runtime"
10+
"k8s.io/apimachinery/pkg/runtime/serializer"
11+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
12+
13+
configv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1"
14+
)
15+
16+
var (
17+
nodeConfigScheme = runtime.NewScheme()
18+
nodeConfigDecoder runtime.Decoder
19+
nodeConfigEncoder runtime.Encoder
20+
)
21+
22+
func init() {
23+
utilruntime.Must(configv1.InstallLegacy(nodeConfigScheme))
24+
25+
// TODO: Remove this when we generate config.openshift.io/v1 configs
26+
utilruntime.Must(configv1.InstallLegacy(nodeConfigScheme))
27+
28+
configCodecfactory := serializer.NewCodecFactory(nodeConfigScheme)
29+
nodeConfigDecoder = configCodecfactory.UniversalDecoder(configv1.LegacySchemeGroupVersion)
30+
nodeConfigEncoder = configCodecfactory.LegacyCodec(configv1.LegacySchemeGroupVersion)
31+
}
32+
33+
func WriteNodeConfig(filename string, config *configv1.NodeConfig) error {
34+
json, err := runtime.Encode(nodeConfigEncoder, config)
35+
if err != nil {
36+
return fmt.Errorf("unable to encode node config: %v", err)
37+
}
38+
yamlBytes, err := yaml.JSONToYAML(json)
39+
if err != nil {
40+
return err
41+
}
42+
43+
return ioutil.WriteFile(filename, yamlBytes, 0644)
44+
}
45+
46+
func ReadNodeConfig(filename string) (*configv1.NodeConfig, error) {
47+
masterBytes, err := ioutil.ReadFile(filename)
48+
if err != nil {
49+
return nil, err
50+
}
51+
obj, err := runtime.Decode(nodeConfigDecoder, masterBytes)
52+
if err != nil {
53+
return nil, err
54+
}
55+
nodeConfig, ok := obj.(*configv1.NodeConfig)
56+
if !ok {
57+
return nil, fmt.Errorf("object %T is not NodeConfig", nodeConfig)
58+
}
59+
return nodeConfig, nil
60+
}

0 commit comments

Comments
 (0)