Skip to content

Commit

Permalink
Allow using cluster_networking_config and auth_pref with --bootstrap (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
lxea committed Nov 9, 2023
1 parent 5014118 commit 30b34fd
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
45 changes: 45 additions & 0 deletions lib/services/local/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ func itemsFromResource(resource types.Resource) ([]backend.Item, error) {
item, err = itemFromProvisionToken(r)
case types.Lock:
item, err = itemFromLock(r)
case types.ClusterNetworkingConfig:
item, err = itemFromClusterNetworkingConfig(r)
case types.AuthPreference:
item, err = itemFromAuthPreference(r)
default:
return nil, trace.NotImplemented("cannot itemFrom resource of type %T", resource)
}
Expand All @@ -115,6 +119,47 @@ func itemsFromResource(resource types.Resource) ([]backend.Item, error) {
return items, nil
}

// itemFromClusterNetworkingConfig attempts to encode the supplied cluster_networking_config as an
// instance of `backend.Item` suitable for storage.
func itemFromClusterNetworkingConfig(cnc types.ClusterNetworkingConfig) (*backend.Item, error) {
if err := cnc.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
value, err := services.MarshalClusterNetworkingConfig(cnc)
if err != nil {
return nil, trace.Wrap(err)
}

item := &backend.Item{
Key: backend.Key(clusterConfigPrefix, networkingPrefix),
Value: value,
ID: cnc.GetResourceID(),
Revision: cnc.GetRevision(),
}
return item, nil
}

// itemFromAuthPreference attempts to encode the supplied cluster_auth_preference as an
// instance of `backend.Item` suitable for storage.
func itemFromAuthPreference(ap types.AuthPreference) (*backend.Item, error) {
if err := ap.CheckAndSetDefaults(); err != nil {
return nil, trace.Wrap(err)
}
value, err := services.MarshalAuthPreference(ap)
if err != nil {
return nil, trace.Wrap(err)
}

item := &backend.Item{
Key: backend.Key(authPrefix, preferencePrefix, generalPrefix),
Value: value,
ID: ap.GetResourceID(),
Revision: ap.GetRevision(),
}

return item, nil
}

// itemFromUser attempts to encode the supplied user as an
// instance of `backend.Item` suitable for storage.
func itemFromUser(user types.User) (*backend.Item, error) {
Expand Down
36 changes: 36 additions & 0 deletions lib/services/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,42 @@ func init() {
}
return lock, nil
})
RegisterResourceMarshaler(types.KindClusterNetworkingConfig, func(resource types.Resource, opts ...MarshalOption) ([]byte, error) {
cnc, ok := resource.(types.ClusterNetworkingConfig)
if !ok {
return nil, trace.BadParameter("expected cluster_networking_config go %T", resource)
}
bytes, err := MarshalClusterNetworkingConfig(cnc, opts...)
if err != nil {
return nil, trace.Wrap(err)
}
return bytes, nil
})
RegisterResourceUnmarshaler(types.KindClusterNetworkingConfig, func(bytes []byte, opts ...MarshalOption) (types.Resource, error) {
cnc, err := UnmarshalClusterNetworkingConfig(bytes, opts...)
if err != nil {
return nil, trace.Wrap(err)
}
return cnc, nil
})
RegisterResourceMarshaler(types.KindClusterAuthPreference, func(resource types.Resource, opts ...MarshalOption) ([]byte, error) {
ap, ok := resource.(types.AuthPreference)
if !ok {
return nil, trace.BadParameter("expected cluster_auth_preference go %T", resource)
}
bytes, err := MarshalAuthPreference(ap, opts...)
if err != nil {
return nil, trace.Wrap(err)
}
return bytes, nil
})
RegisterResourceUnmarshaler(types.KindClusterAuthPreference, func(bytes []byte, opts ...MarshalOption) (types.Resource, error) {
ap, err := UnmarshalAuthPreference(bytes, opts...)
if err != nil {
return nil, trace.Wrap(err)
}
return ap, nil
})
}

// MarshalResource attempts to marshal a resource dynamically, returning NotImplementedError
Expand Down

0 comments on commit 30b34fd

Please sign in to comment.