Merge lp:~freyes/charms/trusty/nova-cloud-controller/bug-989337 into lp:~openstack-charmers-archive/charms/trusty/nova-cloud-controller/next

Proposed by Felipe Reyes
Status: Superseded
Proposed branch: lp:~freyes/charms/trusty/nova-cloud-controller/bug-989337
Merge into: lp:~openstack-charmers-archive/charms/trusty/nova-cloud-controller/next
Diff against target: 277 lines (+146/-3)
10 files modified
hooks/nova_cc_context.py (+26/-2)
hooks/nova_cc_hooks.py (+9/-0)
hooks/nova_cc_utils.py (+3/-1)
metadata.yaml (+2/-0)
templates/folsom/nova.conf (+5/-0)
templates/grizzly/nova.conf (+5/-0)
templates/havana/nova.conf (+4/-0)
templates/icehouse/nova.conf (+4/-0)
unit_tests/test_nova_cc_contexts.py (+87/-0)
unit_tests/test_nova_cc_hooks.py (+1/-0)
To merge this branch: bzr merge lp:~freyes/charms/trusty/nova-cloud-controller/bug-989337
Reviewer Review Type Date Requested Status
Jorge Niedbalski Pending
Edward Hope-Morley Pending
OpenStack Charmers Pending
Review via email: mp+242384@code.launchpad.net

This proposal supersedes a proposal from 2014-11-10.

This proposal has been superseded by a proposal from 2014-11-26.

Description of the change

This branch extends the charm to install python-memcache, and configure nova.conf adding the key memcached_servers when a relationship with memcached service is established.

If multiple units of memcached are available, all of them are used (memcached_servers = host1:port1,host2:port,host3:port3)

To post a comment you must log in.
Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_lint_check #771 nova-cloud-controller-next for freyes mp239671
    LINT OK: believed to pass, but you should confirm results

LINT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_lint_check/make-lint.771:
I: config.yaml: option haproxy-client-timeout has no default value
I: config.yaml: option ssl_cert has no default value
I: config.yaml: option nvp-l3-uuid has no default value
I: config.yaml: option os-internal-network has no default value

Full lint output: http://paste.ubuntu.com/8694351/
Build: http://10.98.191.181:8080/job/charm_lint_check/771/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_unit_test #579 nova-cloud-controller-next for freyes mp239671
    UNIT FAIL: unit-test failed

UNIT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_unit_test/unit-test.579:
Ran 4 tests in 0.150s

FAILED (errors=2)
make: *** [unit_test] Error 1

Full unit output: http://paste.ubuntu.com/8694352/
Build: http://10.98.191.181:8080/job/charm_unit_test/579/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_amulet_test #304 nova-cloud-controller-next for freyes mp239671
    AMULET OK: believed to pass, but you should confirm results

AMULET Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_amulet_test/make-test.304:
juju-test.conductor DEBUG : Tearing down osci-sv05 juju environment
juju-test.conductor DEBUG : Calling "juju destroy-environment -y osci-sv05"
WARNING cannot delete security group "juju-osci-sv05-0". Used by another environment?
juju-test INFO : Results: 3 passed, 0 failed, 0 errored

Full amulet output: http://paste.ubuntu.com/8694683/
Build: http://10.98.191.181:8080/job/charm_amulet_test/304/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_unit_test #582 nova-cloud-controller-next for freyes mp239671
    UNIT FAIL: unit-test failed

UNIT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_unit_test/unit-test.582:
Ran 4 tests in 0.153s

FAILED (errors=2)
make: *** [unit_test] Error 1

Full unit output: http://paste.ubuntu.com/8705925/
Build: http://10.98.191.181:8080/job/charm_unit_test/582/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_lint_check #774 nova-cloud-controller-next for freyes mp239671
    LINT OK: believed to pass, but you should confirm results

LINT Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_lint_check/make-lint.774:
I: config.yaml: option haproxy-client-timeout has no default value
I: config.yaml: option ssl_cert has no default value
I: config.yaml: option nvp-l3-uuid has no default value
I: config.yaml: option os-internal-network has no default value

Full lint output: http://paste.ubuntu.com/8705924/
Build: http://10.98.191.181:8080/job/charm_lint_check/774/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_amulet_test #307 nova-cloud-controller-next for freyes mp239671
    AMULET FAIL: amulet-test failed

AMULET Results (max last 4 lines) from
/var/lib/jenkins/workspace/charm_amulet_test/make-test.307:
    return self.read(buflen)
  File "/usr/lib/python2.7/ssl.py", line 260, in read
    return self._sslobj.read(len)
socket.error: [Errno 110] Connection timed out

Full amulet output: http://paste.ubuntu.com/8706467/
Build: http://10.98.191.181:8080/job/charm_amulet_test/307/

Revision history for this message
Edward Hope-Morley (hopem) wrote : Posted in a previous version of this proposal

I'm getting a couple of unit test failures here. Looks like a couple of extra mocks needed - see attached u/t output.

review: Needs Fixing
Revision history for this message
Edward Hope-Morley (hopem) wrote : Posted in a previous version of this proposal
Download full text (3.7 KiB)

Hmm can't attach so pasting:

$ make unit_test
Starting unit tests...
nose.plugins.cover: ERROR: Coverage not available: unable to import coverage module
test_instance_console_context_with_memcache (unit_tests.test_nova_cc_contexts.NovaComputeContextTests) ... ok
test_instance_console_context_without_memcache (unit_tests.test_nova_cc_contexts.NovaComputeContextTests) ... ok
Failure: OSError ([Errno 2] No such file or directory) ... ERROR
Failure: OSError ([Errno 2] No such file or directory) ... ERROR

======================================================================
ERROR: Failure: OSError ([Errno 2] No such file or directory)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName
    addr.filename, addr.module)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/home/gizmo/Documents/reviews/nova-cloud-controller/bug-989337/unit_tests/test_nova_cc_hooks.py", line 6, in <module>
    import nova_cc_utils as utils
  File "hooks/nova_cc_utils.py", line 142, in <module>
    nova_cc_context.NeutronPostgresqlDBContext(),
  File "hooks/nova_cc_context.py", line 268, in __init__
    self).__init__(config('neutron-database'))
  File "hooks/charmhelpers/core/hookenv.py", line 44, in wrapper
    res = func(*args, **kwargs)
  File "hooks/charmhelpers/core/hookenv.py", line 281, in config
    config_data = json.loads(subprocess.check_output(config_cmd_line))
  File "/usr/lib/python2.7/subprocess.py", line 566, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

======================================================================
ERROR: Failure: OSError ([Errno 2] No such file or directory)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName
    addr.filename, addr.module)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/home/gizmo/Documents/reviews/nova-cloud-controller/bug-989337/unit_tests/test_nova_cc_utils.py", line 11, in <module>
    import nova_cc_utils as utils
  File "hooks/nova_cc_utils.py", line 142, in <module>
    nova_cc_context.NeutronPostgresqlDBContext(),
  File "hooks/nova_cc_context.py", line 268, in __init__
    self).__init__(config('neutron-database'))
  File "hooks/charmhelpers/core/hookenv.py", line 44, in wrapper
    res = func(*args, **kwa...

Read more...

Revision history for this message
Edward Hope-Morley (hopem) wrote : Posted in a previous version of this proposal

FWIW, other than the above this lgtm

Revision history for this message
Felipe Reyes (freyes) wrote : Posted in a previous version of this proposal

Edward, I fixed the broken tests, the patch was a little bit larger than what I expected, but they are working OK now.

Name Stmts Miss Cover Missing
-----------------------------------------------------
hooks/nova_cc_context 166 112 33% 21-28, 39-41, 48-59, 65-79, 86-104, 116-169, 180-195, 203-204, 208, 212-214, 219, 222-236, 242-256, 273-276, 281-283, 297-299
hooks/nova_cc_hooks 447 146 67% 132-135, 148-149, 173, 184-185, 189, 224, 229-234, 245, 325-328, 336-339, 345-348, 358-374, 383-385, 395-409, 413-422, 508, 518, 522-523, 576, 582-592, 597-608, 618-628, 633-672, 682-697, 705-709, 734-743, 767, 772-780, 806, 861, 865-868
hooks/nova_cc_utils 442 111 75% 296-301, 312-315, 325-326, 382, 384, 428-430, 434, 448-456, 463-468, 472-486, 592-594, 599-602, 607, 611, 635-636, 650-652, 673-674, 680-703, 707-713, 717-723, 729, 735, 742, 753-757, 842, 902-908, 912-914, 918-921, 925-937
-----------------------------------------------------
TOTAL 1055 369 65%
----------------------------------------------------------------------
Ran 99 tests in 7.518s

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_lint_check #922 nova-cloud-controller-next for freyes mp239671
    LINT OK: passed

LINT Results (max last 5 lines):
  I: config.yaml: option os-admin-network has no default value
  I: config.yaml: option haproxy-client-timeout has no default value
  I: config.yaml: option ssl_cert has no default value
  I: config.yaml: option nvp-l3-uuid has no default value
  I: config.yaml: option os-internal-network has no default value

Full lint test output: http://paste.ubuntu.com/8822840/
Build: http://10.98.191.181:8080/job/charm_lint_check/922/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_unit_test #757 nova-cloud-controller-next for freyes mp239671
    UNIT OK: passed

UNIT Results (max last 5 lines):
  hooks/nova_cc_hooks 447 146 67% 132-135, 148-149, 173, 184-185, 189, 224, 229-234, 245, 325-328, 336-339, 345-348, 358-374, 383-385, 395-409, 413-422, 508, 518, 522-523, 576, 582-592, 597-608, 618-628, 633-672, 682-697, 705-709, 734-743, 767, 772-780, 806, 861, 865-868
  hooks/nova_cc_utils 442 111 75% 296-301, 312-315, 325-326, 382, 384, 428-430, 434, 448-456, 463-468, 472-486, 592-594, 599-602, 607, 611, 635-636, 650-652, 673-674, 680-703, 707-713, 717-723, 729, 735, 742, 753-757, 842, 902-908, 912-914, 918-921, 925-937
  TOTAL 1055 369 65%
  Ran 99 tests in 8.707s
  OK

Full unit test output: http://paste.ubuntu.com/8822843/
Build: http://10.98.191.181:8080/job/charm_unit_test/757/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_amulet_test #340 nova-cloud-controller-next for freyes mp239671
    AMULET OK: passed

AMULET Results (max last 5 lines):
  juju-test.conductor.15-basic-trusty-icehouse RESULT :
  juju-test.conductor DEBUG : Tearing down osci-sv07 juju environment
  juju-test.conductor DEBUG : Calling "juju destroy-environment -y osci-sv07"
  WARNING cannot delete security group "juju-osci-sv07-0". Used by another environment?
  juju-test INFO : Results: 3 passed, 0 failed, 0 errored

Full amulet test output: http://paste.ubuntu.com/8823194/
Build: http://10.98.191.181:8080/job/charm_amulet_test/340/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_lint_check #979 nova-cloud-controller-next for freyes mp241318
    LINT OK: passed

LINT Results (max last 5 lines):
  I: config.yaml: option os-admin-network has no default value
  I: config.yaml: option haproxy-client-timeout has no default value
  I: config.yaml: option ssl_cert has no default value
  I: config.yaml: option nvp-l3-uuid has no default value
  I: config.yaml: option os-internal-network has no default value

Full lint test output: http://paste.ubuntu.com/8925102/
Build: http://10.98.191.181:8080/job/charm_lint_check/979/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_unit_test #814 nova-cloud-controller-next for freyes mp241318
    UNIT OK: passed

UNIT Results (max last 5 lines):
  hooks/nova_cc_hooks 447 146 67% 132-135, 148-149, 173, 184-185, 189, 224, 229-234, 245, 325-328, 336-339, 345-348, 358-374, 383-385, 395-409, 413-422, 508, 518, 522-523, 576, 582-592, 597-608, 618-628, 633-672, 682-697, 705-709, 734-743, 767, 772-780, 806, 861, 865-868
  hooks/nova_cc_utils 442 111 75% 296-301, 312-315, 325-326, 382, 384, 428-430, 434, 448-456, 463-468, 472-486, 592-594, 599-602, 607, 611, 635-636, 650-652, 673-674, 680-703, 707-713, 717-723, 729, 735, 742, 753-757, 842, 902-908, 912-914, 918-921, 925-937
  TOTAL 1055 369 65%
  Ran 99 tests in 8.712s
  OK

Full unit test output: http://paste.ubuntu.com/8925116/
Build: http://10.98.191.181:8080/job/charm_unit_test/814/

Revision history for this message
Ryan Beisner (1chb1n) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_amulet_test #359 nova-cloud-controller-next for freyes mp241318
    AMULET OK: passed

AMULET Results (max last 5 lines):
  juju-test.conductor.15-basic-trusty-icehouse RESULT :
  juju-test.conductor DEBUG : Tearing down osci-sv07 juju environment
  juju-test.conductor DEBUG : Calling "juju destroy-environment -y osci-sv07"
  WARNING cannot delete security group "juju-osci-sv07-0". Used by another environment?
  juju-test INFO : Results: 3 passed, 0 failed, 0 errored

Full amulet test output: http://paste.ubuntu.com/8925544/
Build: http://10.98.191.181:8080/job/charm_amulet_test/359/

Revision history for this message
Edward Hope-Morley (hopem) wrote : Posted in a previous version of this proposal

Felipe, thanks for working on this it is much needed.

So some initial comments;

  * could you please rename the cache-relation-* to memcache-relation-*
  * is there are reason for replacing config() with hookenv.config()? I know it is not the nicest coding style but it is the same across all charms so to do it differently here would be breaking convention.
  * some more comments inline

review: Needs Fixing
Revision history for this message
Felipe Reyes (freyes) wrote : Posted in a previous version of this proposal

Hi,

> * could you please rename the cache-relation-* to memcache-relation-*
I initially used memcache-relation-* hooks, but they weren't triggered, a quick look to mediawiki charm also uses cache-relation-* for memcache, I'll give it another try to double check this.

> * is there are reason for replacing config() with hookenv.config()? I know
> it is not the nicest coding style but it is the same across all charms so to
> do it differently here would be breaking convention.
I know, but importing config() function made fail the mocking due to the way the modules are imported, if this is a blocker I totally understand and I can revisit this to find a way to make the tests happy.

Best,

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_lint_check #1151 nova-cloud-controller-next for freyes mp241318
    LINT OK: passed

LINT Results (max last 5 lines):
  I: config.yaml: option os-admin-network has no default value
  I: config.yaml: option haproxy-client-timeout has no default value
  I: config.yaml: option ssl_cert has no default value
  I: config.yaml: option nvp-l3-uuid has no default value
  I: config.yaml: option os-internal-network has no default value

Full lint test output: http://paste.ubuntu.com/9125387/
Build: http://10.98.191.181:8080/job/charm_lint_check/1151/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_unit_test #985 nova-cloud-controller-next for freyes mp241318
    UNIT OK: passed

UNIT Results (max last 5 lines):
  hooks/nova_cc_hooks 447 146 67% 132-135, 148-149, 173, 184-185, 189, 224, 229-234, 245, 325-328, 336-339, 345-348, 358-374, 383-385, 395-409, 413-422, 508, 518, 522-523, 576, 582-592, 597-608, 618-628, 633-672, 682-697, 705-709, 734-743, 767, 772-780, 806, 861, 865-868
  hooks/nova_cc_utils 442 111 75% 296-301, 312-315, 325-326, 382, 384, 428-430, 434, 448-456, 463-468, 472-486, 592-594, 599-602, 607, 611, 635-636, 650-652, 673-674, 680-703, 707-713, 717-723, 729, 735, 742, 753-757, 842, 902-908, 912-914, 918-921, 925-937
  TOTAL 1054 369 65%
  Ran 99 tests in 9.596s
  OK

Full unit test output: http://paste.ubuntu.com/9125402/
Build: http://10.98.191.181:8080/job/charm_unit_test/985/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote : Posted in a previous version of this proposal

UOSCI bot says:
charm_amulet_test #493 nova-cloud-controller-next for freyes mp241318
    AMULET FAIL: amulet-test failed

AMULET Results (max last 5 lines):
"
  WARNING cannot delete security group "juju-osci-sv07-0". Used by another environment?
  juju-test INFO : Results: 2 passed, 0 failed, 1 errored
  ERROR subprocess encountered error code 124
  make: *** [test] Error 124

Full amulet test output: http://paste.ubuntu.com/9125932/
Build: http://10.98.191.181:8080/job/charm_amulet_test/493/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

UOSCI bot says:
charm_lint_check #1159 nova-cloud-controller-next for freyes mp242384
    LINT OK: passed

LINT Results (max last 5 lines):
  I: config.yaml: option os-admin-network has no default value
  I: config.yaml: option haproxy-client-timeout has no default value
  I: config.yaml: option ssl_cert has no default value
  I: config.yaml: option nvp-l3-uuid has no default value
  I: config.yaml: option os-internal-network has no default value

Full lint test output: http://paste.ubuntu.com/9127053/
Build: http://10.98.191.181:8080/job/charm_lint_check/1159/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

UOSCI bot says:
charm_unit_test #993 nova-cloud-controller-next for freyes mp242384
    UNIT OK: passed

UNIT Results (max last 5 lines):
  hooks/nova_cc_hooks 445 146 67% 132-135, 148-149, 173, 184-185, 189, 221, 226-231, 242, 322-325, 333-336, 342-345, 355-371, 380-382, 392-406, 410-419, 505, 515, 519-520, 573, 579-589, 594-605, 615-625, 630-669, 679-694, 702-706, 731-740, 764, 769-777, 803, 858, 862-865
  hooks/nova_cc_utils 445 112 75% 298-303, 314-317, 327-328, 384, 386, 432-434, 438, 452-460, 467-472, 476-490, 546, 595-597, 602-605, 610, 614, 638-639, 653-655, 676-677, 683-706, 710-716, 720-726, 732, 738, 745, 756-760, 845, 905-911, 915-917, 921-924, 928-940
  TOTAL 1055 370 65%
  Ran 98 tests in 10.450s
  OK

Full unit test output: http://paste.ubuntu.com/9127055/
Build: http://10.98.191.181:8080/job/charm_unit_test/993/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

UOSCI bot says:
charm_amulet_test #501 nova-cloud-controller-next for freyes mp242384
    AMULET FAIL: amulet-test failed

AMULET Results (max last 5 lines):
  subprocess.CalledProcessError: Command '['juju-deployer', '-W', '-L', '-c', '/tmp/amulet-juju-deployer-bskSEW.json', '-e', 'osci-sv05', '-t', '1000', 'osci-sv05']' returned non-zero exit status 1
  WARNING cannot delete security group "juju-osci-sv05-0". Used by another environment?
  juju-test INFO : Results: 0 passed, 2 failed, 1 errored
  ERROR subprocess encountered error code 2
  make: *** [test] Error 2

Full amulet test output: http://paste.ubuntu.com/9127779/
Build: http://10.98.191.181:8080/job/charm_amulet_test/501/

Revision history for this message
Felipe Reyes (freyes) wrote : Posted in a previous version of this proposal

> juju-test.conductor.15-basic-trusty-icehouse RESULT : ✔
> juju-test.conductor DEBUG : Tearing down osci-sv07 juju environment
> juju-test.conductor DEBUG : Calling "juju destroy-environment -y osci-sv07ERROR:root:Make target returned non-zero.
> "
> WARNING cannot delete security group "juju-osci-sv07-0". Used by another environment?
> juju-test INFO : Results: 2 passed, 0 failed, 1 errored
> ERROR subprocess encountered error code 124

Should I do something with this error?

review: Needs Resubmitting
Revision history for this message
Felipe Reyes (freyes) : Posted in a previous version of this proposal
review: Abstain
Revision history for this message
Felipe Reyes (freyes) wrote :

By the way, this patch can be tested using the bundler file available at https://code.launchpad.net/~openstack-charm-testers/+junk/nova-memcached

Thanks,

131. By Felipe Reyes

Added IPv6 support

Added test to check that IPv6 addresses are properly formatted.

132. By Felipe Reyes

Commit after merge

133. By Felipe Reyes

Replace "Couldn't get caching servers" with "Couldn't get memcache servers"

134. By Felipe Reyes

Refactor the way memcached_servers config is put in the templates

Instead of formatting the string with Jinja2, it's formatted with python
and passed to the template as a string.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added symlink 'hooks/memcache-relation-broken'
2=== target is u'nova_cc_hooks.py'
3=== added symlink 'hooks/memcache-relation-changed'
4=== target is u'nova_cc_hooks.py'
5=== added symlink 'hooks/memcache-relation-departed'
6=== target is u'nova_cc_hooks.py'
7=== added symlink 'hooks/memcache-relation-joined'
8=== target is u'nova_cc_hooks.py'
9=== modified file 'hooks/nova_cc_context.py'
10--- hooks/nova_cc_context.py 2014-10-13 16:18:58 +0000
11+++ hooks/nova_cc_context.py 2014-11-26 21:25:07 +0000
12@@ -1,6 +1,6 @@
13 from charmhelpers.core.hookenv import (
14 config, relation_ids, relation_set, log, ERROR,
15- unit_get, related_units, relation_get)
16+ unit_get, related_units, relation_get, relations_for_id)
17
18 from charmhelpers.fetch import apt_install, filter_installed_packages
19 from charmhelpers.contrib.openstack import context, neutron, utils
20@@ -13,7 +13,8 @@
21 )
22
23 from charmhelpers.contrib.network.ip import (
24- get_ipv6_addr
25+ get_ipv6_addr,
26+ format_ipv6_addr
27 )
28
29
30@@ -281,3 +282,26 @@
31 ctxt = super(NovaIPv6Context, self).__call__()
32 ctxt['use_ipv6'] = config('prefer-ipv6')
33 return ctxt
34+
35+
36+class InstanceConsoleContext(context.OSContextGenerator):
37+ interfaces = []
38+
39+ def __call__(self):
40+ ctxt = {}
41+ servers = []
42+ try:
43+ for rid in relation_ids('memcache'):
44+ for rel in relations_for_id(rid):
45+ priv_addr = rel['private-address']
46+ # format it as IPv6 address if neeeded
47+ priv_addr = format_ipv6_addr(priv_addr) or priv_addr
48+ servers.append({'private-address': priv_addr,
49+ 'port': rel['port']})
50+ except Exception as ex:
51+ log("Couldn't get caching servers: {}".format(str(ex)),
52+ level='WARNING')
53+ servers = []
54+
55+ ctxt['memcached_servers'] = servers
56+ return ctxt
57
58=== modified file 'hooks/nova_cc_hooks.py'
59--- hooks/nova_cc_hooks.py 2014-10-23 07:32:45 +0000
60+++ hooks/nova_cc_hooks.py 2014-11-26 21:25:07 +0000
61@@ -849,6 +849,15 @@
62 quantum_joined(rid=rid)
63
64
65+@hooks.hook('memcache-relation-joined',
66+ 'memcache-relation-departed',
67+ 'memcache-relation-changed',
68+ 'memcache-relation-broken')
69+@restart_on_change(restart_map())
70+def memcached_joined():
71+ CONFIGS.write(NOVA_CONF)
72+
73+
74 def main():
75 try:
76 hooks.execute(sys.argv)
77
78=== modified file 'hooks/nova_cc_utils.py'
79--- hooks/nova_cc_utils.py 2014-11-14 09:55:10 +0000
80+++ hooks/nova_cc_utils.py 2014-11-26 21:25:07 +0000
81@@ -68,6 +68,7 @@
82 'python-psycopg2',
83 'python-psutil',
84 'uuid',
85+ 'python-memcache',
86 ]
87
88 BASE_SERVICES = [
89@@ -123,7 +124,8 @@
90 nova_cc_context.VolumeServiceContext(),
91 nova_cc_context.NovaIPv6Context(),
92 nova_cc_context.NeutronCCContext(),
93- nova_cc_context.NovaConfigContext()],
94+ nova_cc_context.NovaConfigContext(),
95+ nova_cc_context.InstanceConsoleContext()],
96 }),
97 (NOVA_API_PASTE, {
98 'services': [s for s in BASE_SERVICES if 'api' in s],
99
100=== modified file 'metadata.yaml'
101--- metadata.yaml 2014-07-11 09:14:57 +0000
102+++ metadata.yaml 2014-11-26 21:25:07 +0000
103@@ -40,6 +40,8 @@
104 nova-vmware:
105 interface: nova-vmware
106 scope: container
107+ memcache:
108+ interface: memcache
109 peers:
110 cluster:
111 interface: nova-ha
112
113=== modified file 'templates/folsom/nova.conf'
114--- templates/folsom/nova.conf 2014-04-16 08:25:14 +0000
115+++ templates/folsom/nova.conf 2014-11-26 21:25:07 +0000
116@@ -21,6 +21,11 @@
117 enabled_apis=ec2,osapi_compute,metadata
118 auth_strategy=keystone
119 compute_driver=libvirt.LibvirtDriver
120+
121+{% if memcached_servers %}
122+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
123+{% endif %}
124+
125 {% if keystone_ec2_url -%}
126 keystone_ec2_url = {{ keystone_ec2_url }}
127 {% endif -%}
128
129=== modified file 'templates/grizzly/nova.conf'
130--- templates/grizzly/nova.conf 2014-03-31 11:56:09 +0000
131+++ templates/grizzly/nova.conf 2014-11-26 21:25:07 +0000
132@@ -20,6 +20,11 @@
133 enabled_apis=ec2,osapi_compute,metadata
134 auth_strategy=keystone
135 compute_driver=libvirt.LibvirtDriver
136+
137+{% if memcached_servers %}
138+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
139+{% endif %}
140+
141 {% if keystone_ec2_url -%}
142 keystone_ec2_url = {{ keystone_ec2_url }}
143 {% endif -%}
144
145=== modified file 'templates/havana/nova.conf'
146--- templates/havana/nova.conf 2014-08-08 09:31:32 +0000
147+++ templates/havana/nova.conf 2014-11-26 21:25:07 +0000
148@@ -26,6 +26,10 @@
149 cpu_allocation_ratio = {{ cpu_allocation_ratio }}
150 use_syslog={{ use_syslog }}
151
152+{% if memcached_servers %}
153+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
154+{% endif %}
155+
156 {% if keystone_ec2_url -%}
157 keystone_ec2_url = {{ keystone_ec2_url }}
158 {% endif -%}
159
160=== modified file 'templates/icehouse/nova.conf'
161--- templates/icehouse/nova.conf 2014-10-07 11:37:20 +0000
162+++ templates/icehouse/nova.conf 2014-11-26 21:25:07 +0000
163@@ -38,6 +38,10 @@
164
165 use_syslog={{ use_syslog }}
166
167+{% if memcached_servers %}
168+memcached_servers = {%for s in memcached_servers %}{% if loop.index0 != 0 %},{% endif %}{{s['private-address']}}:{{s['port']}}{% endfor %}
169+{% endif %}
170+
171 {% if keystone_ec2_url -%}
172 keystone_ec2_url = {{ keystone_ec2_url }}
173 {% endif -%}
174
175=== added file 'unit_tests/test_nova_cc_contexts.py'
176--- unit_tests/test_nova_cc_contexts.py 1970-01-01 00:00:00 +0000
177+++ unit_tests/test_nova_cc_contexts.py 2014-11-26 21:25:07 +0000
178@@ -0,0 +1,87 @@
179+from __future__ import print_function
180+
181+import mock
182+
183+#####
184+# NOTE(freyes): this is a workaround to patch config() function imported by
185+# nova_cc_utils before it gets a reference to the actual config() provided by
186+# hookenv module.
187+from charmhelpers.core import hookenv
188+_conf = hookenv.config
189+hookenv.config = mock.MagicMock()
190+import nova_cc_utils as _utils
191+# this assert is a double check + to avoid pep8 warning
192+assert _utils.config == hookenv.config
193+hookenv.config = _conf
194+#####
195+
196+import nova_cc_context as context
197+
198+from charmhelpers.contrib.openstack import utils
199+
200+from test_utils import CharmTestCase
201+
202+
203+TO_PATCH = [
204+ 'apt_install',
205+ 'filter_installed_packages',
206+ 'relation_ids',
207+ 'relation_get',
208+ 'related_units',
209+ 'config',
210+ 'log',
211+ 'unit_get',
212+ 'relations_for_id',
213+]
214+
215+
216+def fake_log(msg, level=None):
217+ level = level or 'INFO'
218+ print('[juju test log (%s)] %s' % (level, msg))
219+
220+
221+class NovaComputeContextTests(CharmTestCase):
222+ def setUp(self):
223+ super(NovaComputeContextTests, self).setUp(context, TO_PATCH)
224+ self.relation_get.side_effect = self.test_relation.get
225+ self.config.side_effect = self.test_config.get
226+ self.log.side_effect = fake_log
227+
228+ @mock.patch.object(utils, 'os_release')
229+ @mock.patch('charmhelpers.contrib.network.ip.log')
230+ def test_instance_console_context_without_memcache(self, os_release, log_):
231+ self.unit_get.return_value = '127.0.0.1'
232+ self.relation_ids.return_value = 'cache:0'
233+ self.related_units.return_value = 'memcached/0'
234+ instance_console = context.InstanceConsoleContext()
235+ os_release.return_value = 'icehouse'
236+ self.assertEqual({'memcached_servers': []},
237+ instance_console())
238+
239+ @mock.patch.object(utils, 'os_release')
240+ @mock.patch('charmhelpers.contrib.network.ip.log')
241+ def test_instance_console_context_with_memcache(self, os_release, log_):
242+ self.check_instance_console_context_with_memcache(os_release,
243+ '127.0.1.1',
244+ '127.0.1.1')
245+
246+ @mock.patch.object(utils, 'os_release')
247+ @mock.patch('charmhelpers.contrib.network.ip.log')
248+ def test_instance_console_context_with_memcache_ipv6(self, os_release,
249+ log_):
250+ self.check_instance_console_context_with_memcache(os_release, '::1',
251+ '[::1]')
252+
253+ def check_instance_console_context_with_memcache(self, os_release, ip,
254+ formated_ip):
255+ memcached_servers = [{'private-address': formated_ip,
256+ 'port': '11211'}]
257+ self.unit_get.return_value = ip
258+ self.relation_ids.return_value = ['cache:0']
259+ self.relations_for_id.return_value = memcached_servers
260+ self.related_units.return_value = 'memcached/0'
261+ instance_console = context.InstanceConsoleContext()
262+ os_release.return_value = 'icehouse'
263+ self.maxDiff = None
264+ self.assertEqual({'memcached_servers': memcached_servers},
265+ instance_console())
266
267=== modified file 'unit_tests/test_nova_cc_hooks.py'
268--- unit_tests/test_nova_cc_hooks.py 2014-10-21 13:18:47 +0000
269+++ unit_tests/test_nova_cc_hooks.py 2014-11-26 21:25:07 +0000
270@@ -1,6 +1,7 @@
271 from mock import MagicMock, patch, call
272 from test_utils import CharmTestCase, patch_open
273 import os
274+
275 with patch('charmhelpers.core.hookenv.config') as config:
276 config.return_value = 'neutron'
277 import nova_cc_utils as utils

Subscribers

People subscribed via source and target branches