Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v14] Allow using cluster_networking_config and auth_pref with --bootstrap #34445

Merged
merged 1 commit into from Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
45 changes: 45 additions & 0 deletions lib/services/local/resource.go
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
Expand Up @@ -591,6 +591,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