github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/cloud/show_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package cloud_test
     5  
     6  import (
     7  	"io/ioutil"
     8  	"strings"
     9  
    10  	"github.com/juju/cmd/cmdtesting"
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/cmd/juju/cloud"
    15  	"github.com/juju/juju/juju/osenv"
    16  	_ "github.com/juju/juju/provider/all"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type showSuite struct {
    21  	testing.FakeJujuXDGDataHomeSuite
    22  }
    23  
    24  var _ = gc.Suite(&showSuite{})
    25  
    26  func (s *showSuite) TestShowBadArgs(c *gc.C) {
    27  	_, err := cmdtesting.RunCommand(c, cloud.NewShowCloudCommand())
    28  	c.Assert(err, gc.ErrorMatches, "no cloud specified")
    29  }
    30  
    31  func (s *showSuite) TestShow(c *gc.C) {
    32  	ctx, err := cmdtesting.RunCommand(c, cloud.NewShowCloudCommand(), "aws-china")
    33  	c.Assert(err, jc.ErrorIsNil)
    34  	out := cmdtesting.Stdout(ctx)
    35  	c.Assert(out, gc.Equals, `
    36  defined: public
    37  type: ec2
    38  description: Amazon China
    39  auth-types: [access-key]
    40  regions:
    41    cn-north-1:
    42      endpoint: https://ec2.cn-north-1.amazonaws.com.cn
    43    cn-northwest-1:
    44      endpoint: https://ec2.cn-northwest-1.amazonaws.com.cn
    45  `[1:])
    46  }
    47  
    48  func (s *showSuite) TestShowWithConfig(c *gc.C) {
    49  	data := `
    50  clouds:
    51    homestack:
    52      type: openstack
    53      description: Openstack Cloud
    54      auth-types: [userpass, access-key]
    55      endpoint: http://homestack
    56      regions:
    57        london:
    58          endpoint: http://london/1.0
    59      config:
    60        bootstrap-timeout: 1800
    61        use-default-secgroup: true
    62  `[1:]
    63  	err := ioutil.WriteFile(osenv.JujuXDGDataHomePath("clouds.yaml"), []byte(data), 0600)
    64  
    65  	ctx, err := cmdtesting.RunCommand(c, cloud.NewShowCloudCommand(), "homestack")
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	out := cmdtesting.Stdout(ctx)
    68  	c.Assert(out, gc.Equals, `
    69  defined: local
    70  type: openstack
    71  description: Openstack Cloud
    72  auth-types: [userpass, access-key]
    73  endpoint: http://homestack
    74  regions:
    75    london:
    76      endpoint: http://london/1.0
    77  config:
    78    bootstrap-timeout: 1800
    79    use-default-secgroup: true
    80  `[1:])
    81  }
    82  
    83  var openstackProviderConfig = `
    84  The available config options specific to openstack clouds are:
    85  external-network:
    86    type: string
    87    description: The network label or UUID to create floating IP addresses on when multiple
    88      external networks exist.
    89  network:
    90    type: string
    91    description: The network label or UUID to bring machines up on when multiple networks
    92      exist.
    93  policy-target-group:
    94    type: string
    95    description: The UUID of Policy Target Group to use for Policy Targets created.
    96  use-default-secgroup:
    97    type: bool
    98    description: Whether new machine instances should have the "default" Openstack security
    99      group assigned in addition to juju defined security groups.
   100  use-floating-ip:
   101    type: bool
   102    description: Whether a floating IP address is required to give the nodes a public
   103      IP address. Some installations assign public IP addresses by default without requiring
   104      a floating IP address.
   105  use-openstack-gbp:
   106    type: bool
   107    description: Whether to use Neutrons Group-Based Policy
   108  `
   109  
   110  func (s *showSuite) TestShowWithRegionConfigAndFlags(c *gc.C) {
   111  	data := `
   112  clouds:
   113    homestack:
   114      type: openstack
   115      description: Openstack Cloud
   116      auth-types: [userpass, access-key]
   117      endpoint: http://homestack
   118      regions:
   119        london:
   120          endpoint: http://london/1.0
   121      config:
   122        bootstrap-retry-delay: 1500
   123        network: nameme
   124      region-config:
   125        london:
   126          bootstrap-timeout: 1800
   127          use-floating-ip: true
   128  `[1:]
   129  	err := ioutil.WriteFile(osenv.JujuXDGDataHomePath("clouds.yaml"), []byte(data), 0600)
   130  
   131  	ctx, err := cmdtesting.RunCommand(c, cloud.NewShowCloudCommand(), "homestack", "--include-config")
   132  	c.Assert(err, jc.ErrorIsNil)
   133  	out := cmdtesting.Stdout(ctx)
   134  	c.Assert(out, gc.Equals, strings.Join([]string{`defined: local
   135  type: openstack
   136  description: Openstack Cloud
   137  auth-types: [userpass, access-key]
   138  endpoint: http://homestack
   139  regions:
   140    london:
   141      endpoint: http://london/1.0
   142  config:
   143    bootstrap-retry-delay: 1500
   144    network: nameme
   145  region-config:
   146    london:
   147      bootstrap-timeout: 1800
   148      use-floating-ip: true
   149  `, openstackProviderConfig}, ""))
   150  }
   151  
   152  func (s *showSuite) TestShowWithRegionConfigAndFlagNoExtraOut(c *gc.C) {
   153  	ctx, err := cmdtesting.RunCommand(c, cloud.NewShowCloudCommand(), "joyent", "--include-config")
   154  	c.Assert(err, jc.ErrorIsNil)
   155  	out := cmdtesting.Stdout(ctx)
   156  	c.Assert(out, gc.Equals, `
   157  defined: public
   158  type: joyent
   159  description: Joyent Cloud
   160  auth-types: [userpass]
   161  regions:
   162    us-east-1:
   163      endpoint: https://us-east-1.api.joyentcloud.com
   164    us-east-2:
   165      endpoint: https://us-east-2.api.joyentcloud.com
   166    us-east-3:
   167      endpoint: https://us-east-3.api.joyentcloud.com
   168    us-west-1:
   169      endpoint: https://us-west-1.api.joyentcloud.com
   170    us-sw-1:
   171      endpoint: https://us-sw-1.api.joyentcloud.com
   172    eu-ams-1:
   173      endpoint: https://eu-ams-1.api.joyentcloud.com
   174  `[1:])
   175  }
   176  
   177  var yamlWithCert = `
   178  clouds:
   179    homestack:
   180      type: openstack
   181      auth-types: [userpass]
   182      endpoint: https://homestack:5000/v2.0
   183      regions:
   184        RegionOne:
   185          endpoint: https://homestack:5000/v2.0
   186      ca-certificates:
   187      - |-
   188        -----BEGIN CERTIFICATE-----
   189        MIIC0DCCAbigAwIBAgIUeIj3r4ocrSubOmb1yPxmoiRfhO8wDQYJKoZIhvcNAQEL
   190        BQAwDzENMAsGA1UEAwwET1NDSTAeFw0xODA3MTUxNjE2NTZaFw0xODEwMjQxNjE2
   191        NTZaMA8xDTALBgNVBAMMBE9TQ0kwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
   192        AoIBAQCpCLMLGZpLojudOwrupsbk2ESCQO4/kEOF6L5YHxcUrRxcrxu0DmnwWYcK
   193        pjKL9K3U7xSiSL+MtNff7MfBYbV0SOfjHR0/gqwio0JeYONABeeynUZkuXg1CXuG
   194        uMHcmPjCAWnLyAnlF4Wwavv6pPdM4l1X4lt1b2ez8G6u4+UPg/zNt473aqOzwMzy
   195        B3aToHSHOoDvXQDwtDkR0PimyEtHVz/17AcwSHzMqNGLgLFEx0SPuYJus8WJg1Sn
   196        c9kqrvIUBnZzjtbCquCxLRxG2xHdvBxOesbRyJPO0ypqEcTMtrX9rmJce67HG+4h
   197        EgLCEpcgfSVyH9PS3wdUAfkr9KE9AgMBAAGjJDAiMA8GA1UdEQQIMAaCBE9TQ0kw
   198        DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAFIYyqNayVFxZ1jcz
   199        fdvEP2yVB9dq8vhSXU4lbkqlPw5q954bLURQzklqMfpXhhIbmrvq6LcLGaSkgmPp
   200        CzlxMkjr8oTRVQUqNIfcJQKtwNOAGh7xZ77GPhBlfHJ8VhTFtDXPM/fj8GLr5Oav
   201        gy9+QywhESKkwAn4+AubBRRtEDBX9zwc2hT5uqz1x1tcs16tKAZBIekwmMBJKkNs
   202        61I+cRHoXtXFh8/upMC6eMAvv6eVHgqpcEWrVLvoBh7ivcsFuUD1IyuIlN4i6roh
   203        xcSAzRCXqVe/BBsHqYyd8044vrIG7P7pYGaQm99nFGylTBfSh5g1LrYV7IJP6KkG
   204        6JHZXg==
   205        -----END CERTIFICATE-----
   206  `[1:]
   207  
   208  var resultWithCert = `
   209  defined: local
   210  type: openstack
   211  description: Openstack Cloud
   212  auth-types: [userpass]
   213  endpoint: https://homestack:5000/v2.0
   214  regions:
   215    RegionOne: {}
   216  ca-credentials:
   217  - |-
   218    -----BEGIN CERTIFICATE-----
   219    MIIC0DCCAbigAwIBAgIUeIj3r4ocrSubOmb1yPxmoiRfhO8wDQYJKoZIhvcNAQEL
   220    BQAwDzENMAsGA1UEAwwET1NDSTAeFw0xODA3MTUxNjE2NTZaFw0xODEwMjQxNjE2
   221    NTZaMA8xDTALBgNVBAMMBE9TQ0kwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
   222    AoIBAQCpCLMLGZpLojudOwrupsbk2ESCQO4/kEOF6L5YHxcUrRxcrxu0DmnwWYcK
   223    pjKL9K3U7xSiSL+MtNff7MfBYbV0SOfjHR0/gqwio0JeYONABeeynUZkuXg1CXuG
   224    uMHcmPjCAWnLyAnlF4Wwavv6pPdM4l1X4lt1b2ez8G6u4+UPg/zNt473aqOzwMzy
   225    B3aToHSHOoDvXQDwtDkR0PimyEtHVz/17AcwSHzMqNGLgLFEx0SPuYJus8WJg1Sn
   226    c9kqrvIUBnZzjtbCquCxLRxG2xHdvBxOesbRyJPO0ypqEcTMtrX9rmJce67HG+4h
   227    EgLCEpcgfSVyH9PS3wdUAfkr9KE9AgMBAAGjJDAiMA8GA1UdEQQIMAaCBE9TQ0kw
   228    DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAFIYyqNayVFxZ1jcz
   229    fdvEP2yVB9dq8vhSXU4lbkqlPw5q954bLURQzklqMfpXhhIbmrvq6LcLGaSkgmPp
   230    CzlxMkjr8oTRVQUqNIfcJQKtwNOAGh7xZ77GPhBlfHJ8VhTFtDXPM/fj8GLr5Oav
   231    gy9+QywhESKkwAn4+AubBRRtEDBX9zwc2hT5uqz1x1tcs16tKAZBIekwmMBJKkNs
   232    61I+cRHoXtXFh8/upMC6eMAvv6eVHgqpcEWrVLvoBh7ivcsFuUD1IyuIlN4i6roh
   233    xcSAzRCXqVe/BBsHqYyd8044vrIG7P7pYGaQm99nFGylTBfSh5g1LrYV7IJP6KkG
   234    6JHZXg==
   235    -----END CERTIFICATE-----
   236  `[1:]
   237  
   238  func (s *showSuite) TestShowWithCACertificate(c *gc.C) {
   239  	err := ioutil.WriteFile(osenv.JujuXDGDataHomePath("clouds.yaml"), []byte(yamlWithCert), 0600)
   240  
   241  	ctx, err := cmdtesting.RunCommand(c, cloud.NewShowCloudCommand(), "homestack")
   242  	c.Assert(err, jc.ErrorIsNil)
   243  	out := cmdtesting.Stdout(ctx)
   244  	c.Assert(out, gc.Equals, resultWithCert)
   245  }