Skip to content

Commit

Permalink
Add config drive option for Openstack instances
Browse files Browse the repository at this point in the history
This enables to use config drives instead of the metadata service as a
source for the user data (cloudinit).
  • Loading branch information
ederst committed Oct 13, 2021
1 parent 6b05add commit da84492
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 0 deletions.
7 changes: 7 additions & 0 deletions pkg/apis/kops/componentconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -762,6 +762,12 @@ type OpenstackNetwork struct {
AvailabilityZoneHints []*string `json:"availabilityZoneHints,omitempty"`
}

// OpenstackMetadata defines config for metadata service related settings
type OpenstackMetadata struct {
// ConfigDrive specifies to use config drive for retrieving user data instead of the metadata service when launching instances
ConfigDrive *bool `json:"configDrive,omitempty"`
}

// OpenstackConfiguration defines cloud config elements for the openstack cloud provider
type OpenstackConfiguration struct {
Loadbalancer *OpenstackLoadbalancerConfig `json:"loadbalancer,omitempty"`
Expand All @@ -770,6 +776,7 @@ type OpenstackConfiguration struct {
BlockStorage *OpenstackBlockStorageConfig `json:"blockStorage,omitempty"`
InsecureSkipVerify *bool `json:"insecureSkipVerify,omitempty"`
Network *OpenstackNetwork `json:"network,omitempty"`
Metadata *OpenstackMetadata `json:"metadata,omitempty"`
}

// AzureConfiguration defines Azure specific cluster configuration.
Expand Down
7 changes: 7 additions & 0 deletions pkg/apis/kops/v1alpha2/componentconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -761,6 +761,12 @@ type OpenstackNetwork struct {
AvailabilityZoneHints []*string `json:"availabilityZoneHints,omitempty"`
}

// OpenstackMetadata defines config for metadata service related settings
type OpenstackMetadata struct {
// ConfigDrive specifies to use config drive for retrieving user data instead of the metadata service when launching instances
ConfigDrive *bool `json:"configDrive,omitempty"`
}

// OpenstackConfiguration defines cloud config elements for the openstack cloud provider
type OpenstackConfiguration struct {
Loadbalancer *OpenstackLoadbalancerConfig `json:"loadbalancer,omitempty"`
Expand All @@ -769,6 +775,7 @@ type OpenstackConfiguration struct {
BlockStorage *OpenstackBlockStorageConfig `json:"blockStorage,omitempty"`
InsecureSkipVerify *bool `json:"insecureSkipVerify,omitempty"`
Network *OpenstackNetwork `json:"network,omitempty"`
Metadata *OpenstackMetadata `json:"metadata,omitempty"`
}

// AzureConfiguration defines Azure specific cluster configuration.
Expand Down
7 changes: 7 additions & 0 deletions pkg/model/components/openstack.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@ func (b *OpenStackOptionsBulder) BuildOptions(o interface{}) error {
clusterSpec.CloudConfig.Openstack.BlockStorage.CreateStorageClass = fi.Bool(true)
}

if clusterSpec.CloudConfig.Openstack.Metadata == nil {
clusterSpec.CloudConfig.Openstack.Metadata = &kops.OpenstackMetadata{}
}
if clusterSpec.CloudConfig.Openstack.Metadata.ConfigDrive == nil {
clusterSpec.CloudConfig.Openstack.Metadata.ConfigDrive = fi.Bool(false)
}

if clusterSpec.ExternalCloudControllerManager == nil {
clusterSpec.ExternalCloudControllerManager = &kops.CloudControllerManagerConfig{}
}
Expand Down
1 change: 1 addition & 0 deletions pkg/model/openstackmodel/servergroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg *
Metadata: metaWithName,
SecurityGroups: ig.Spec.AdditionalSecurityGroups,
AvailabilityZone: az,
ConfigDrive: b.Cluster.Spec.CloudConfig.Openstack.Metadata.ConfigDrive,
}
c.AddTask(instanceTask)

Expand Down
3 changes: 3 additions & 0 deletions upup/pkg/fi/cloudup/openstacktasks/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ type Instance struct {
AvailabilityZone *string
SecurityGroups []string
FloatingIP *FloatingIP
ConfigDrive *bool

Lifecycle *fi.Lifecycle
ForAPIServer bool
Expand Down Expand Up @@ -165,6 +166,7 @@ func (e *Instance) Find(c *fi.Context) (*Instance, error) {
Role: fi.String(server.Metadata["KopsRole"]),
AvailabilityZone: e.AvailabilityZone,
GroupName: e.GroupName,
ConfigDrive: e.ConfigDrive,
}

ports, err := cloud.ListPorts(ports.ListOpts{
Expand Down Expand Up @@ -305,6 +307,7 @@ func (_ *Instance) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, change
},
Metadata: e.Metadata,
SecurityGroups: e.SecurityGroups,
ConfigDrive: e.ConfigDrive,
}
if e.UserData != nil {
bytes, err := fi.ResourceAsBytes(e.UserData)
Expand Down

0 comments on commit da84492

Please sign in to comment.