@@ -57,6 +57,7 @@ import (
57
57
installertypesovirt "github.com/openshift/installer/pkg/types/ovirt"
58
58
installertypesvsphere "github.com/openshift/installer/pkg/types/vsphere"
59
59
60
+ jsoniter "github.com/json-iterator/go"
60
61
hivev1 "github.com/openshift/hive/apis/hive/v1"
61
62
contributils "github.com/openshift/hive/contrib/pkg/utils"
62
63
awsutils "github.com/openshift/hive/contrib/pkg/utils/aws"
@@ -432,6 +433,12 @@ func (m *InstallManager) Run() error {
432
433
m .log .WithError (err ).Error ("error reading cluster metadata" )
433
434
return errors .Wrap (err , "error reading cluster metadata" )
434
435
}
436
+ scrubbedMetadataBytes , err := scrubMetadataJSON (metadataBytes )
437
+ if err != nil {
438
+ m .log .WithError (err ).Error ("error cleaning up metadata" )
439
+ return errors .Wrap (err , "error cleaning up metadata" )
440
+ }
441
+
435
442
kubeconfigSecret , err := m .uploadAdminKubeconfig (m )
436
443
if err != nil {
437
444
m .log .WithError (err ).Error ("error uploading admin kubeconfig" )
@@ -446,7 +453,7 @@ func (m *InstallManager) Run() error {
446
453
if err := m .updateClusterProvision (
447
454
m ,
448
455
func (provision * hivev1.ClusterProvision ) {
449
- provision .Spec .MetadataJSON = metadataBytes
456
+ provision .Spec .MetadataJSON = scrubbedMetadataBytes
450
457
provision .Spec .InfraID = pointer .String (metadata .InfraID )
451
458
provision .Spec .ClusterID = pointer .String (metadata .ClusterID )
452
459
@@ -2045,3 +2052,89 @@ func patchAzureOverrideCreds(overrideCredsBytes, clusterInfraConfigBytes []byte,
2045
2052
}
2046
2053
return & modifiedBytes , nil
2047
2054
}
2055
+
2056
+ func scrubMetadataJSON (metadataJson []byte ) ([]byte , error ) {
2057
+ api := jsoniter .ConfigCompatibleWithStandardLibrary
2058
+ iter := jsoniter .ParseBytes (api , metadataJson )
2059
+ var outBytes bytes.Buffer
2060
+ stream := jsoniter .NewStream (api , & outBytes , len (metadataJson ))
2061
+
2062
+ if err := scrubInner (iter , stream ); err != nil {
2063
+ return nil , err
2064
+ }
2065
+
2066
+ if err := stream .Flush (); err != nil {
2067
+ return nil , err
2068
+ }
2069
+ return outBytes .Bytes (), nil
2070
+ }
2071
+
2072
+ func scrubInner (iter * jsoniter.Iterator , stream * jsoniter.Stream ) error {
2073
+ switch iter .WhatIsNext () {
2074
+ case jsoniter .InvalidValue :
2075
+ return errors .New ("invalid value" )
2076
+ case jsoniter .StringValue :
2077
+ stream .WriteString (iter .ReadString ())
2078
+ case jsoniter .NumberValue :
2079
+ numVal := iter .ReadNumber ()
2080
+ if num , err := numVal .Int64 (); err == nil {
2081
+ stream .WriteInt64 (num )
2082
+ } else if num , err := numVal .Float64 (); err == nil {
2083
+ stream .WriteFloat64 (num )
2084
+ }
2085
+ case jsoniter .NilValue :
2086
+ iter .ReadNil ()
2087
+ stream .WriteNil ()
2088
+ case jsoniter .BoolValue :
2089
+ stream .WriteBool (iter .ReadBool ())
2090
+ case jsoniter .ArrayValue :
2091
+ start := true
2092
+ stream .WriteArrayStart ()
2093
+ for iter .ReadArray () {
2094
+ if ! start {
2095
+ stream .WriteMore ()
2096
+ } else {
2097
+ start = false
2098
+ }
2099
+ if err := scrubInner (iter , stream ); err != nil {
2100
+ return err
2101
+ }
2102
+ }
2103
+ stream .WriteArrayEnd ()
2104
+ case jsoniter .ObjectValue :
2105
+ start := true
2106
+ stream .WriteObjectStart ()
2107
+ for {
2108
+ fieldName := iter .ReadObject ()
2109
+ if len (fieldName ) == 0 {
2110
+ break
2111
+ }
2112
+
2113
+ if ! start {
2114
+ stream .WriteMore ()
2115
+ } else {
2116
+ start = false
2117
+ }
2118
+
2119
+ stream .WriteObjectField (fieldName )
2120
+ switch strings .ToLower (fieldName ) {
2121
+ case "username" , "password" :
2122
+ _ = iter .ReadAny ()
2123
+ stream .WriteString ("REDACTED" )
2124
+ default :
2125
+ if err := scrubInner (iter , stream ); err != nil {
2126
+ return err
2127
+ }
2128
+ }
2129
+ }
2130
+ stream .WriteObjectEnd ()
2131
+ }
2132
+
2133
+ if iter .Error != nil {
2134
+ return iter .Error
2135
+ }
2136
+ if stream .Error != nil {
2137
+ return stream .Error
2138
+ }
2139
+ return nil
2140
+ }
0 commit comments