@@ -586,7 +586,7 @@ func (driver *Driver) createSSHFirewallRule() error {
586586 }
587587
588588 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 )
590590 }
591591
592592 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 {
633633 }
634634
635635 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 )
637637 }
638638
639639 log .Debugf ("Deleting SSH firewall rule '%s' for server '%s'..." ,
@@ -651,13 +651,97 @@ func (driver *Driver) deleteSSHFirewallRule() error {
651651 return err
652652 }
653653
654- log .Debugf ("Deleted firewall rule '%s'." , driver .SSHFirewallRuleID )
654+ log .Debugf ("Deleted SSH firewall rule '%s'." , driver .SSHFirewallRuleID )
655655
656656 driver .SSHFirewallRuleID = ""
657657
658658 return nil
659659}
660660
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+
661745// Name sanitiser for firewall rules.
662746var firewallRuleNameSanitizer = strings .NewReplacer ("-" , "." , "_" , "." )
663747
0 commit comments