@@ -586,7 +586,7 @@ func (driver *Driver) createSSHFirewallRule() error {
586
586
}
587
587
588
588
if driver .isSSHFirewallRuleCreated () {
589
- return fmt .Errorf ("Firewall rule '%s' has already been created for server '%s'" , driver .SSHFirewallRuleID , driver .MachineName )
589
+ return fmt .Errorf ("SSH firewall rule '%s' has already been created for server '%s'" , driver .SSHFirewallRuleID , driver .MachineName )
590
590
}
591
591
592
592
log .Debugf ("Creating SSH firewall rule for server '%s' (allow inbound traffic on port %d from '%s' to '%s')..." ,
@@ -633,7 +633,7 @@ func (driver *Driver) deleteSSHFirewallRule() error {
633
633
}
634
634
635
635
if ! driver .isSSHFirewallRuleCreated () {
636
- return fmt .Errorf ("Firewall rule has not been created for server '%s'" , driver .MachineName )
636
+ return fmt .Errorf ("SSH firewall rule has not been created for server '%s'" , driver .MachineName )
637
637
}
638
638
639
639
log .Debugf ("Deleting SSH firewall rule '%s' for server '%s'..." ,
@@ -651,13 +651,97 @@ func (driver *Driver) deleteSSHFirewallRule() error {
651
651
return err
652
652
}
653
653
654
- log .Debugf ("Deleted firewall rule '%s'." , driver .SSHFirewallRuleID )
654
+ log .Debugf ("Deleted SSH firewall rule '%s'." , driver .SSHFirewallRuleID )
655
655
656
656
driver .SSHFirewallRuleID = ""
657
657
658
658
return nil
659
659
}
660
660
661
+ // Has a firewall rule been created to allow inbound Docker for the server?
662
+ func (driver * Driver ) isDockerFirewallRuleCreated () bool {
663
+ return driver .DockerFirewallRuleID != ""
664
+ }
665
+
666
+ // Create a firewall rule to enable inbound Docker connections to the target server from the client machine's (external) IP address.
667
+ func (driver * Driver ) createDockerFirewallRule () error {
668
+ if ! driver .isServerCreated () {
669
+ return fmt .Errorf ("Server '%s' has not been created" , driver .MachineName )
670
+ }
671
+
672
+ if driver .isDockerFirewallRuleCreated () {
673
+ return fmt .Errorf ("Docker firewall rule '%s' has already been created for server '%s'" , driver .DockerFirewallRuleID , driver .MachineName )
674
+ }
675
+
676
+ log .Debugf ("Creating Docker firewall rule for server '%s' (allow inbound traffic on port %d from '%s' to '%s')..." ,
677
+ driver .MachineName ,
678
+ DefaultDockerSSLPort ,
679
+ driver .ClientPublicIPAddress ,
680
+ driver .IPAddress ,
681
+ )
682
+
683
+ ruleConfiguration := compute.FirewallRuleConfiguration {
684
+ Name : driver .buildFirewallRuleName ("Docker" ),
685
+ NetworkDomainID : driver .NetworkDomainID ,
686
+ }
687
+ ruleConfiguration .Accept ()
688
+ ruleConfiguration .Enable ()
689
+ ruleConfiguration .IPv4 ()
690
+ ruleConfiguration .TCP ()
691
+ ruleConfiguration .MatchSourceAddress (driver .ClientPublicIPAddress )
692
+ ruleConfiguration .MatchDestinationAddress (driver .IPAddress )
693
+ ruleConfiguration .MatchDestinationPort (DefaultDockerSSLPort )
694
+ ruleConfiguration .PlaceFirst ()
695
+
696
+ client , err := driver .getCloudControlClient ()
697
+ if err != nil {
698
+ return err
699
+ }
700
+
701
+ firewallRuleID , err := client .CreateFirewallRule (ruleConfiguration )
702
+ if err != nil {
703
+ return err
704
+ }
705
+
706
+ driver .DockerFirewallRuleID = firewallRuleID
707
+
708
+ log .Debugf ("Created Docker firewall rule '%s' for server '%s'." , driver .DockerFirewallRuleID , driver .ServerID )
709
+
710
+ return nil
711
+ }
712
+
713
+ // Delete the firewall rule that enables inbound Docker connections to the target server from the client machine's (external) IP address.
714
+ func (driver * Driver ) deleteDockerFirewallRule () error {
715
+ if ! driver .isServerCreated () {
716
+ return fmt .Errorf ("Server '%s' has not been created" , driver .MachineName )
717
+ }
718
+
719
+ if ! driver .isDockerFirewallRuleCreated () {
720
+ return fmt .Errorf ("Docker firewall rule has not been created for server '%s'" , driver .MachineName )
721
+ }
722
+
723
+ log .Debugf ("Deleting Docker firewall rule '%s' for server '%s'..." ,
724
+ driver .MachineName ,
725
+ driver .DockerFirewallRuleID ,
726
+ )
727
+
728
+ client , err := driver .getCloudControlClient ()
729
+ if err != nil {
730
+ return err
731
+ }
732
+
733
+ err = client .DeleteFirewallRule (driver .DockerFirewallRuleID )
734
+ if err != nil {
735
+ return err
736
+ }
737
+
738
+ log .Debugf ("Deleted Docker firewall rule '%s'." , driver .DockerFirewallRuleID )
739
+
740
+ driver .DockerFirewallRuleID = ""
741
+
742
+ return nil
743
+ }
744
+
661
745
// Name sanitiser for firewall rules.
662
746
var firewallRuleNameSanitizer = strings .NewReplacer ("-" , "." , "_" , "." )
663
747
0 commit comments