github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/cmd/juju/service/unexpose.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package service
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  
    10  	"github.com/juju/juju/api/service"
    11  	"github.com/juju/juju/cmd/juju/block"
    12  	"github.com/juju/juju/cmd/modelcmd"
    13  )
    14  
    15  var usageUnexposeSummary = `
    16  Removes public availability over the network for a service.`[1:]
    17  
    18  var usageUnexposeDetails = `
    19  Adjusts the firewall rules and any relevant security mechanisms of the
    20  cloud to deny public access to the service.
    21  A service is unexposed by default when it gets created.
    22  
    23  Examples:
    24      juju unexpose wordpress
    25  
    26  See also: 
    27      expose`[1:]
    28  
    29  // NewUnexposeCommand returns a command to unexpose services.
    30  func NewUnexposeCommand() cmd.Command {
    31  	return modelcmd.Wrap(&unexposeCommand{})
    32  }
    33  
    34  // unexposeCommand is responsible exposing services.
    35  type unexposeCommand struct {
    36  	modelcmd.ModelCommandBase
    37  	ServiceName string
    38  }
    39  
    40  func (c *unexposeCommand) Info() *cmd.Info {
    41  	return &cmd.Info{
    42  		Name:    "unexpose",
    43  		Args:    "<service name>",
    44  		Purpose: usageUnexposeSummary,
    45  		Doc:     usageUnexposeDetails,
    46  	}
    47  }
    48  
    49  func (c *unexposeCommand) Init(args []string) error {
    50  	if len(args) == 0 {
    51  		return errors.New("no service name specified")
    52  	}
    53  	c.ServiceName = args[0]
    54  	return cmd.CheckEmpty(args[1:])
    55  }
    56  
    57  func (c *unexposeCommand) getAPI() (serviceExposeAPI, error) {
    58  	root, err := c.NewAPIRoot()
    59  	if err != nil {
    60  		return nil, errors.Trace(err)
    61  	}
    62  	return service.NewClient(root), nil
    63  }
    64  
    65  // Run changes the juju-managed firewall to hide any
    66  // ports that were also explicitly marked by units as closed.
    67  func (c *unexposeCommand) Run(_ *cmd.Context) error {
    68  	client, err := c.getAPI()
    69  	if err != nil {
    70  		return err
    71  	}
    72  	defer client.Close()
    73  	return block.ProcessBlockedError(client.Unexpose(c.ServiceName), block.BlockChange)
    74  }