lp:~dimitern/goose/nova-addresses2

Created by Dimiter Naydenov and last modified
Get this branch:
bzr branch lp:~dimitern/goose/nova-addresses2
Only Dimiter Naydenov can upload to this branch. If you are Dimiter Naydenov please log in for upload directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
Dimiter Naydenov
Project:
Go OpenStack Exchange
Status:
Merged

Recent revisions

55. By Dimiter Naydenov

Changes after review

54. By Dimiter Naydenov

Extended ServerDetail to include Addresses map for public/private addresses; and go fmt

53. By John A Meinel

Include the fixes for no-repository present.

52. By John A Meinel

Add live and local tests for identity code.

51. By Ian Booth

Goose test infrastructure improvements

This branch improves the usabilty of the goose test infrastructure.

A full Openstack service test double is provided. A bunch of manual coding which was required in each test suite to set up various Openstack module test doubles is replaced by a few lines of code.

New code:

        cred := &identity.Credentials{...}
 openstack := openstack.New(cred)
 openstack.SetupHTTP(s.Mux)

Old code:

 // Create the identity service.
 s.identityDouble = identityservice.NewUserPass()
 token := s.identityDouble.AddUser(s.cred.User, s.cred.Secrets)
 s.Mux.Handle(baseIdentityURL, s.identityDouble)

 // Register Swift endpoints with identity service.
 ep := identityservice.Endpoint{
  AdminURL: s.Server.URL + baseSwiftURL,
  InternalURL: s.Server.URL + baseSwiftURL,
  PublicURL: s.Server.URL + baseSwiftURL,
  Region: s.cred.Region,
 }
 service := identityservice.Service{"swift", "object-store", []identityservice.Endpoint{ep}}
 s.identityDouble.AddService(service)
 s.swiftDouble = swiftservice.New("localhost", baseSwiftURL+"/", token)
 s.Mux.Handle(baseSwiftURL+"/", s.swiftDouble)

 // Register Nova endpoints with identity service.
 ep = identityservice.Endpoint{
  AdminURL: s.Server.URL + baseNovaURL,
  InternalURL: s.Server.URL + baseNovaURL,
  PublicURL: s.Server.URL + baseNovaURL,
  Region: s.cred.Region,
 }
 service = identityservice.Service{"nova", "compute", []identityservice.Endpoint{ep}}
 s.identityDouble.AddService(service)
 s.novaDouble = novaservice.New("localhost", "V1", token, "1")
 s.novaDouble.SetupHTTP(s.Mux)

Other changes include:

- fix the identity service double to remove the hard coded userId and tenantId.
- do not hard code a fixed token against a service double - each user is assigned their own token just like a real instance, allowing multi-user tests to be written.
- improvements to the Swift service double to make it use URLs which are compliant with how a real Swift instance would do it.
- factor out a common base class for the legacy and userpass double implementations.
- use a SetupHTTP() for all test doubles instead of requiring the coder to know the magic URL paths to use.

R=dimitern
CC=
https://codereview.appspot.com/7194043

50. By Martin Packman

Add simple tool for deleting security groups

Basic test of using the current api for doing some actual task. As the
live tests create lots of security groups without ever deleting them
it's also sort of useful to have around.

R=wallyworld, jameinel, rog, dimitern
CC=
https://codereview.appspot.com/6948051

49. By John A Meinel

test.py: add a python script for running the test suite.

Also has flags for setting up the tarmac test suite.

48. By Ian Booth

Use nova service doubles in nova tests

This branch plugs the nova service doubles into the nova live tests and makes everything work.
So now, in the nova package, "go test -gocheck.v" runs the tests against the doubles, and
"go test -gocheck.v -live" uses an Openstack instance.

Also, the rate limit retry test is now only run locally against the service doubles, where a special
request is used to trigger a rate limit service response. This replaces the previous test which
hammered a real Openstack instance to try and induce a rate limit response.

A few things needed to be done, and as a result of implementation changes to the service doubles,
changes were also needed for the service double unit tests.

 Viewing highlights:

1. Default security group

A real Openstack instance always has a default security group. The nova double and associated unit tests were modified
accordingly.

2. Out of the box flavours

The real Openstack instance used for testing has flavours defined out of the box. The live tests assume this behaviour
so the test double needed to be modifed to match.

3. Response changes

Some changes were required to certain response data eg creating a security group rule

4. ** This issue will need a follow up change **

The security group rule response contains a SecurityGroupRef struct:

type SecurityGroupRule struct {
 FromPort *int `json:"from_port"` // Can be nil
 IPProtocol *string `json:"ip_protocol"` // Can be nil
 ToPort *int `json:"to_port"` // Can be nil
 ParentGroupId int `json:"parent_group_id"`
 IPRange map[string]string `json:"ip_range"` // Can be empty
 Id int
 Group SecurityGroupRef
}

The was defined as a pointer ie Group *SecurityGroupRef.
However, nova double tests which do a DeepEquals to compare security group rules
fail because the pointer deferencing isn't done. So to make stuff work, I've
used a struct value instead and use the zeroSecurityGroupRef pattern as used
on the ec2 side. This isn't desirable and should be looked at. But if we are
prepared to go with it for now, it can be fixed in a followup branch. BTW, nothing
uses this attribute value so the change should not break juju core.

R=dimitern, jameinel
CC=
https://codereview.appspot.com/7098074

47. By Martin Packman

Introduce container ACLs

The purpose of this branch is to support Swift container ACLs, allowing a
public container to be set up to store the juju tools. Containers which are
public do not require authorisation tokens, and the setup workflow for
accessing the container is different.

For a private container, the OpenStack client authenticates in order to not
only get the authorisation token, but also the URLs used to access the
various service end points (incl swift).

For public containers, we just want to be able to nominate the swift URL
directly.

So the OpenStack client implementation has been split into authenticating
and nonauthenticating variants. Authenticating clients are initialised with
user credentials as before. Unauthenticating clients are given a base URL.
The swift client doesn't care whether it is initialised with a public or
authenticating connection to OpenStack; it works the same either way, but
operations which are forbidden by the ACL will return a 401.

46. By Dimiter Naydenov

nova double: list server filters and run server.

Implemented filters by status and name (others not implemented, but
probably also not needed), as well as creating a server (RunServer).

Added a few needed things: serverByName and generateUUID + tests.

With this, the nova double will be up-to-date with the nova client
and functional.

R=fwereade, rog
CC=
https://codereview.appspot.com/7073060

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp:~gophers/goose/trunk
This branch contains Public information 
Everyone can see this information.

Subscribers