@@ -53,6 +53,9 @@ type Driver struct {
53
53
client Client
54
54
// ExistingKey keeps track of whether the key was created by us or we used an existing one. If an existing one was used, we shouldn't delete it when the machine is deleted.
55
55
ExistingKey bool
56
+ // To get right port id, if multiple networks are configured and first one is not the one for floating ip.
57
+ FloatingIpNetworkName string
58
+ FloatingIpNetworkId string
56
59
}
57
60
58
61
const (
@@ -202,7 +205,19 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
202
205
mcnflag.StringFlag {
203
206
EnvVar : "OS_FLOATINGIP_POOL" ,
204
207
Name : "openstack-floatingip-pool" ,
205
- Usage : "OpenStack floating IP pool to get an IP from to assign to the instance (first network only)" ,
208
+ Usage : "OpenStack floating IP pool to get an IP from to assign to the instance." ,
209
+ Value : "" ,
210
+ },
211
+ mcnflag.StringFlag {
212
+ EnvVar : "OS_FLOATINGIP_NETWORK_NAME" ,
213
+ Name : "openstack-floatingip-net-name" ,
214
+ Usage : "OpenStack floating IP target network name to get right port for assingin IP." ,
215
+ Value : "" ,
216
+ },
217
+ mcnflag.StringFlag {
218
+ EnvVar : "OS_FLOATINGIP_NETWORK_ID" ,
219
+ Name : "openstack-floatingip-net-id" ,
220
+ Usage : "OpenStack floating IP target network id to get right port for assingin IP." ,
206
221
Value : "" ,
207
222
},
208
223
mcnflag.IntFlag {
@@ -298,6 +313,8 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
298
313
d .SecurityGroups = strings .Split (flags .String ("openstack-sec-groups" ), "," )
299
314
}
300
315
d .FloatingIpPool = flags .String ("openstack-floatingip-pool" )
316
+ d .FloatingIpNetworkName = flags .String ("openstack-floatingip-net-name" )
317
+ d .FloatingIpNetworkId = flags .String ("openstack-floatingip-net-id" )
301
318
d .IpVersion = flags .Int ("openstack-ip-version" )
302
319
d .ComputeNetwork = flags .Bool ("openstack-nova-network" )
303
320
d .SSHUser = flags .String ("openstack-ssh-user" )
@@ -561,6 +578,9 @@ func (d *Driver) checkConfig() error {
561
578
if (d .KeyPairName != "" && d .PrivateKeyFile == "" ) || (d .KeyPairName == "" && d .PrivateKeyFile != "" ) {
562
579
return fmt .Errorf (errorBothOptions , "KeyPairName" , "PrivateKeyFile" )
563
580
}
581
+ if d .FloatingIpNetworkName != "" && d .FloatingIpNetworkId != "" {
582
+ return fmt .Errorf (errorBothOptions , "FloatingIpNetworkName" , "FloatingIpNetworkId" )
583
+ }
564
584
return nil
565
585
}
566
586
@@ -570,7 +590,7 @@ func (d *Driver) resolveIds() error {
570
590
return err
571
591
}
572
592
573
- networkIDs , err := d .client .GetNetworkID ( d )
593
+ networkIDs , err := d .client .GetNetworkIDs ( strings . Split ( d . NetworkName , "," ) )
574
594
575
595
if err != nil {
576
596
return err
@@ -581,7 +601,10 @@ func (d *Driver) resolveIds() error {
581
601
}
582
602
583
603
d .NetworkId = networkIDs
584
- //TODO: log found networks?
604
+ log .Debug ("Found networks using their name" , map [string ]string {
605
+ "Names" : d .NetworkName ,
606
+ "IDs" : d .NetworkId ,
607
+ })
585
608
}
586
609
587
610
if d .FlavorName != "" {
@@ -630,23 +653,46 @@ func (d *Driver) resolveIds() error {
630
653
if err := d .initNetwork (); err != nil {
631
654
return err
632
655
}
633
- f , err := d .client .GetFloatingIPPoolID (d )
656
+
657
+ networkID , err := d .client .GetNetworkIDs ([]string {d .FloatingIpPool })
634
658
635
659
if err != nil {
636
660
return err
637
661
}
638
662
639
- if f == "" {
663
+ if networkID == "" {
640
664
return fmt .Errorf (errorUnknownNetworkName , d .FloatingIpPool )
641
665
}
642
666
643
- d .FloatingIpPoolId = f
667
+ d .FloatingIpPoolId = networkID
644
668
log .Debug ("Found floating IP pool id using its name" , map [string ]string {
645
669
"Name" : d .FloatingIpPool ,
646
670
"ID" : d .FloatingIpPoolId ,
647
671
})
648
672
}
649
673
674
+ if d .FloatingIpNetworkId == "" && ! d .ComputeNetwork {
675
+ d .FloatingIpNetworkId = strings .Split (d .NetworkId , "," )[0 ]
676
+ log .Debug ("Using first network as floating ip network" )
677
+ } else if d .FloatingIpNetworkName != "" && ! d .ComputeNetwork {
678
+ if err := d .initNetwork (); err != nil {
679
+ return err
680
+ }
681
+
682
+ networkID , err := d .client .GetNetworkIDs ([]string {d .FloatingIpNetworkName })
683
+
684
+ if err != nil {
685
+ return err
686
+ }
687
+
688
+ d .FloatingIpNetworkId = networkID
689
+
690
+ log .Debug ("Found floating network for floating ip using its name" , map [string ]string {
691
+ "Name" : d .FloatingIpNetworkName ,
692
+ "ID" : d .FloatingIpNetworkId ,
693
+ })
694
+ }
695
+
650
696
if d .TenantName != "" && d .TenantId == "" {
651
697
if err := d .initIdentity (); err != nil {
652
698
return err
0 commit comments