Skip to content

Commit

Permalink
Add ability to specify Openstack's server group.
Browse files Browse the repository at this point in the history
  • Loading branch information
gnutix committed Nov 29, 2023
1 parent f431460 commit a0d98d8
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 6 deletions.
2 changes: 2 additions & 0 deletions provisioner/openstack/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ type Config struct {
Image string `json:"openstack-image"`
// Machine flavor to use for nodes
Flavor string `json:"openstack-flavor"`
// Server group to use for nodes
ServerGroup string `json:"openstack-server-group"`
// Networks to attach to nodes
Networks []servers.Network `json:"openstack-network,omitempty"`
// Security groups to attach to nodes
Expand Down
16 changes: 13 additions & 3 deletions provisioner/openstack/provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/schedulerhints"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
"golang.org/x/crypto/ssh"
)
Expand Down Expand Up @@ -101,8 +102,7 @@ func (p *Provisioner) GetName() string {

func (p *Provisioner) Provision(nodeName string) (scheduler.Node, error) {
name := fmt.Sprintf("alfred-%s", nodeName)

server, err := servers.Create(p.client, keypairs.CreateOptsExt{
var optsBuilder servers.CreateOptsBuilder = keypairs.CreateOptsExt{
CreateOptsBuilder: servers.CreateOpts{
Name: name,
ImageRef: p.config.Image,
Expand All @@ -115,7 +115,17 @@ func (p *Provisioner) Provision(nodeName string) (scheduler.Node, error) {
},
},
KeyName: p.keypairName,
}).Extract()
}
if p.config.ServerGroup != "" {
optsBuilder = schedulerhints.CreateOptsExt{
CreateOptsBuilder: optsBuilder,
SchedulerHints: schedulerhints.SchedulerHints{
Group: p.config.ServerGroup,
},
}
}

server, err := servers.Create(p.client, optsBuilder).Extract()
if err != nil {
return nil, fmt.Errorf("failed to create server '%s': %w", name, err)
}
Expand Down
2 changes: 2 additions & 0 deletions server/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const (

OpenstackDockerHost = "openstack-docker-host"
OpenstackFlavor = "openstack-flavor"
OpenstackServerGroup = "openstack-server-group"
OpenstackImage = "openstack-image"
OpenstackNetworks = "openstack-networks"
OpenstackSecurityGroups = "openstack-security-groups"
Expand All @@ -55,6 +56,7 @@ func init() {
// Openstack
flags.String(OpenstackDockerHost, "", "docker host on the nodes")
flags.String(OpenstackFlavor, "", "flavor to use for provisioning")
flags.String(OpenstackServerGroup, "", "server group to use for provisioning")
flags.String(OpenstackImage, "", "image to use for provisioning")
flags.StringSlice(OpenstackNetworks, nil, "networks attached to the nodes")
flags.StringSlice(OpenstackSecurityGroups, nil, "security groups defined for the nodes")
Expand Down
7 changes: 4 additions & 3 deletions server/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,10 @@ func createProvisioner() (schedulerpkg.Provisioner, error) {

case "openstack":
config := openstack.Config{
Logger: logger,
Image: viper.GetString(flags.OpenstackImage),
Flavor: viper.GetString(flags.OpenstackFlavor),
Logger: logger,
Image: viper.GetString(flags.OpenstackImage),
Flavor: viper.GetString(flags.OpenstackFlavor),
ServerGroup: viper.GetString(flags.OpenstackServerGroup),
Networks: lo.Map(
viper.GetStringSlice(flags.OpenstackNetworks),
func(s string, _ int) servers.Network {
Expand Down

0 comments on commit a0d98d8

Please sign in to comment.