@@ -50,6 +50,8 @@ type Driver struct {
5050 FlavorId string
5151 ImageName string
5252 ImageId string
53+ ServerGroupName string
54+ ServerGroupId string
5355 KeyPairName string
5456 NetworkName string
5557 NetworkId string
@@ -223,6 +225,18 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
223225 Usage : "OpenStack image name to use for the instance" ,
224226 Value : "" ,
225227 },
228+ mcnflag.StringFlag {
229+ EnvVar : "OS_SERVER_GROUP_ID" ,
230+ Name : "openstack-server-group-id" ,
231+ Usage : "OpenStack server group id to use for the instance" ,
232+ Value : "" ,
233+ },
234+ mcnflag.StringFlag {
235+ EnvVar : "OS_SERVER_GROUP_NAME" ,
236+ Name : "openstack-server-group-name" ,
237+ Usage : "OpenStack server group name to use for the instance" ,
238+ Value : "" ,
239+ },
226240 mcnflag.StringFlag {
227241 EnvVar : "OS_KEYPAIR_NAME" ,
228242 Name : "openstack-keypair-name" ,
@@ -426,6 +440,8 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
426440 d .FlavorName = flags .String ("openstack-flavor-name" )
427441 d .ImageId = flags .String ("openstack-image-id" )
428442 d .ImageName = flags .String ("openstack-image-name" )
443+ d .ServerGroupId = flags .String ("openstack-server-group-id" )
444+ d .ServerGroupName = flags .String ("openstack-server-group-name" )
429445 d .NetworkId = flags .String ("openstack-net-id" )
430446 d .NetworkName = flags .String ("openstack-net-name" )
431447 if flags .String ("openstack-sec-groups" ) != "" {
@@ -668,15 +684,16 @@ func (d *Driver) Remove() error {
668684}
669685
670686const (
671- errorMandatoryEnvOrOption string = "%s must be specified either using the environment variable %s or the CLI option %s"
672- errorMandatoryOption string = "%s must be specified using the CLI option %s"
673- errorExclusiveOptions string = "Either %s or %s must be specified, not both"
674- errorBothOptions string = "Both %s and %s must be specified"
675- errorWrongEndpointType string = "Endpoint type must be 'publicURL', 'adminURL' or 'internalURL'"
676- errorUnknownFlavorName string = "Unable to find flavor named %s"
677- errorUnknownImageName string = "Unable to find image named %s"
678- errorUnknownNetworkName string = "Unable to find network named %s"
679- errorUnknownTenantName string = "Unable to find tenant named %s"
687+ errorMandatoryEnvOrOption string = "%s must be specified either using the environment variable %s or the CLI option %s"
688+ errorMandatoryOption string = "%s must be specified using the CLI option %s"
689+ errorExclusiveOptions string = "Either %s or %s must be specified, not both"
690+ errorBothOptions string = "Both %s and %s must be specified"
691+ errorWrongEndpointType string = "Endpoint type must be 'publicURL', 'adminURL' or 'internalURL'"
692+ errorUnknownFlavorName string = "Unable to find flavor named %s"
693+ errorUnknownImageName string = "Unable to find image named %s"
694+ errorUnknownServerGroupName string = "Unable to find server group named %s"
695+ errorUnknownNetworkName string = "Unable to find network named %s"
696+ errorUnknownTenantName string = "Unable to find tenant named %s"
680697)
681698
682699func (d * Driver ) parseAuthConfig () (* gophercloud.AuthOptions , error ) {
@@ -801,6 +818,27 @@ func (d *Driver) resolveIds() error {
801818 })
802819 }
803820
821+ if d .ServerGroupName != "" {
822+ if err := d .initCompute (); err != nil {
823+ return err
824+ }
825+ serverGroupId , err := d .client .GetServerGroupID (d )
826+
827+ if err != nil {
828+ return err
829+ }
830+
831+ if serverGroupId == "" {
832+ return fmt .Errorf (errorUnknownServerGroupName , d .ServerGroupName )
833+ }
834+
835+ d .ServerGroupId = serverGroupId
836+ log .Debug ("Found server group id using its name" , map [string ]string {
837+ "Name" : d .ServerGroupName ,
838+ "ID" : d .ServerGroupId ,
839+ })
840+ }
841+
804842 if d .FloatingIpPool != "" && ! d .ComputeNetwork {
805843 if err := d .initNetwork (); err != nil {
806844 return err
0 commit comments