github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/cmd/juju/application/unexpose.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package application
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  
    10  	"github.com/juju/juju/api/application"
    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 an application.`[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 application.
    21  An application 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  	ApplicationName string
    38  }
    39  
    40  func (c *unexposeCommand) Info() *cmd.Info {
    41  	return &cmd.Info{
    42  		Name:    "unexpose",
    43  		Args:    "<application 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 application name specified")
    52  	}
    53  	c.ApplicationName = 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 application.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.ApplicationName), block.BlockChange)
    74  }