Merge lp:~bcsaller/juju-gui/export-improvements into lp:juju-gui/experimental

Proposed by Benjamin Saller
Status: Merged
Merged at revision: 829
Proposed branch: lp:~bcsaller/juju-gui/export-improvements
Merge into: lp:juju-gui/experimental
Diff against target: 127 lines (+67/-9)
2 files modified
app/models/models.js (+33/-5)
test/test_model.js (+34/-4)
To merge this branch: bzr merge lp:~bcsaller/juju-gui/export-improvements
Reviewer Review Type Date Requested Status
Juju GUI Hackers Pending
Review via email: mp+174485@code.launchpad.net

Description of the change

Many deployer export format fixes

Export Annotations
Skip export of default service options.
Services is a dict, not an array
Use qualified charm names

https://codereview.appspot.com/11227043/

To post a comment you must log in.
Revision history for this message
Benjamin Saller (bcsaller) wrote :
Download full text (5.7 KiB)

Reviewers: mp+174485_code.launchpad.net,

Message:
Please take a look.

Description:
Many deployer export format fixes

Export Annotations
Skip export of default service options.
Services is a dict, not an array
Use qualified charm names

https://code.launchpad.net/~bcsaller/juju-gui/export-improvements/+merge/174485

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/11227043/

Affected files:
   A [revision details]
   M app/models/models.js
   M test/test_model.js

Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: <email address hidden>
+New revision: <email address hidden>

Index: test/test_model.js
=== modified file 'test/test_model.js'
--- test/test_model.js 2013-07-11 23:21:42 +0000
+++ test/test_model.js 2013-07-12 19:16:17 +0000
@@ -808,7 +808,10 @@
      var mysql = db.services.add({id: 'mysql', charm: 'precise/mysql-1'});
      var wordpress = db.services.add({
        id: 'wordpress',
- charm: 'precise/wordpress-1'});
+ charm: 'precise/wordpress-1',
+ config: {debug: 'no', username: 'admin'},
+ annotations: {'gui-x': 100, 'gui-y': 200, 'ignored': true}
+ });
      var rel0 = db.relations.add({
        id: 'relation-0',
        endpoints: [
@@ -820,13 +823,40 @@
      db.environment.set('defaultSeries', 'precise');

      // Add the charms so we can resolve them in the export.
- db.charms.add([{id: 'precise/mysql-1'}, {id: 'precise/wordpress-1'}]);
+ db.charms.add([{id: 'precise/mysql-1'},
+ {id: 'precise/wordpress-1',
+ config: {
+ options: {
+ debug: {
+ 'default': 'no'
+ },
+ username: {
+ 'default': 'root'
+ }
+ }
+ }
+ }
+ ]);
      var result = db.exportDeployer().envExport;
      var relation = result.relations[0];

      assert.equal(result.series, 'precise');
- assert.equal(result.services[0].charm, 'mysql');
- assert.equal(result.services[1].charm, 'wordpress');
+ assert.equal(result.services.mysql.charm, 'precise/mysql-1');
+ assert.equal(result.services.wordpress.charm, 'precise/wordpress-1');
+
+ // A default config value is skipped
+ assert.equal(result.services.wordpress.options.debug, undefined);
+ // A value changed from the default is exported
+ assert.equal(result.services.wordpress.options.username, 'admin');
+ // Ensure that mysql has no options object in the export as no
+ // non-default options are defined
+ assert.equal(result.services.mysql.options, undefined);
+
+ // Export position annotations.
+ assert.equal(result.services.wordpress.annotations['gui-x'], 100);
+ assert.equal(result.services.wordpress.annotations['gui-y'], 200);
+ // Note that ignored wasn't exported.
+ assert.equal(result.services.wordpress.annotations.ignored, undefined);

      assert.equal(relation[0], 'mysql:db');
      assert.equal(relation[1], 'w...

Read more...

Revision history for this message
Richard Harding (rharding) wrote :

LGTM with a suggestion to go XXX vs "doesn't make sense" note.

https://codereview.appspot.com/11227043/diff/1/app/models/models.js
File app/models/models.js (right):

https://codereview.appspot.com/11227043/diff/1/app/models/models.js#newcode919
app/models/models.js:919: // than relative which would make more sense
in an export.
should this be an XXX vs a note then if it doesn't make much sense as
is?

https://codereview.appspot.com/11227043/

Revision history for this message
Gary Poster (gary) wrote :

LGTM with trivials, thank you!

https://codereview.appspot.com/11227043/diff/1/app/models/models.js
File app/models/models.js (right):

https://codereview.appspot.com/11227043/diff/1/app/models/models.js#newcode889
app/models/models.js:889: // Process the serivce_options removing any
values
trivial: service_options

https://codereview.appspot.com/11227043/diff/1/app/models/models.js#newcode900
app/models/models.js:900: // Using package name here so the default
series
This comment is no longer correct. Delete?

https://codereview.appspot.com/11227043/diff/1/app/models/models.js#newcode919
app/models/models.js:919: // than relative which would make more sense
in an export.
Good point. File a bug? Low priority until someone asks for it.

https://codereview.appspot.com/11227043/

Revision history for this message
Benjamin Saller (bcsaller) wrote :

Thanks for the reviews

https://codereview.appspot.com/11227043/diff/1/app/models/models.js
File app/models/models.js (right):

https://codereview.appspot.com/11227043/diff/1/app/models/models.js#newcode889
app/models/models.js:889: // Process the serivce_options removing any
values
On 2013/07/12 21:32:11, gary.poster wrote:
> trivial: service_options

Done.

https://codereview.appspot.com/11227043/diff/1/app/models/models.js#newcode900
app/models/models.js:900: // Using package name here so the default
series
On 2013/07/12 21:32:11, gary.poster wrote:
> This comment is no longer correct. Delete?

Ha, the "this is likely..." part was still valid, removed though as its
happened.

https://codereview.appspot.com/11227043/diff/1/app/models/models.js#newcode919
app/models/models.js:919: // than relative which would make more sense
in an export.
On 2013/07/12 21:15:00, rharding wrote:
> should this be an XXX vs a note then if it doesn't make much sense as
is?

XXX'd :)

https://codereview.appspot.com/11227043/

Revision history for this message
Benjamin Saller (bcsaller) wrote :

*** Submitted:

Many deployer export format fixes

Export Annotations
Skip export of default service options.
Services is a dict, not an array
Use qualified charm names

R=rharding, gary.poster, benjamin.saller
CC=
https://codereview.appspot.com/11227043

https://codereview.appspot.com/11227043/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'app/models/models.js'
2--- app/models/models.js 2013-07-08 21:52:00 +0000
3+++ app/models/models.js 2013-07-12 19:20:34 +0000
4@@ -871,7 +871,7 @@
5 result = {
6 envExport: {
7 series: this.environment.get('defaultSeries'),
8- services: [],
9+ services: {},
10 relations: []
11 }
12 };
13@@ -879,22 +879,50 @@
14 serviceList.each(function(service) {
15 var units = service.units;
16 var charm = self.charms.getById(service.get('charm'));
17- if (service.get('pending') === true) {return;}
18+ var serviceOptions = {};
19+ var charmOptions = charm.get('config.options');
20+
21+ if (service.get('pending') === true) {
22+ return;
23+ }
24+
25+ // Process the serivce_options removing any values
26+ // that are the default value for the charm.
27+ Y.each(service.get('config'), function(value, key) {
28+ var optionData = charmOptions && charmOptions[key];
29+ if (!optionData || (optionData && optionData['default'] &&
30+ (value !== optionData['default']))) {
31+ serviceOptions[key] = value;
32+ }
33+ });
34+
35 var serviceData = {
36 // Using package name here so the default series
37 // is picked up. This will likely have to be the full
38 // path in the future.
39- charm: charm.get('package_name'),
40- options: service.get('config'),
41+ charm: charm.get('id'),
42 // Test models or ghosts might not have a units LazyModelList.
43 num_units: units && units.size() || 1
44 };
45+ if (serviceOptions && Y.Object.size(serviceOptions) >= 1) {
46+ serviceData.options = serviceOptions;
47+ }
48 // Add constraints
49 var constraints = service.get('constraintsStr');
50 if (constraints) {
51 serviceData.constraints = constraints;
52 }
53- result.envExport.services.push(serviceData);
54+
55+ var annotations = service.get('annotations');
56+ if (annotations && annotations['gui-x']) {
57+ // Only expose position. Currently these are position absolute rather
58+ // than relative which would make more sense in an export.
59+ serviceData.annotations = {
60+ 'gui-x': annotations['gui-x'],
61+ 'gui-y': annotations['gui-y']
62+ };
63+ }
64+ result.envExport.services[service.get('id')] = serviceData;
65 });
66
67 relationList.each(function(relation) {
68
69=== modified file 'test/test_model.js'
70--- test/test_model.js 2013-07-11 23:21:42 +0000
71+++ test/test_model.js 2013-07-12 19:20:34 +0000
72@@ -808,7 +808,10 @@
73 var mysql = db.services.add({id: 'mysql', charm: 'precise/mysql-1'});
74 var wordpress = db.services.add({
75 id: 'wordpress',
76- charm: 'precise/wordpress-1'});
77+ charm: 'precise/wordpress-1',
78+ config: {debug: 'no', username: 'admin'},
79+ annotations: {'gui-x': 100, 'gui-y': 200, 'ignored': true}
80+ });
81 var rel0 = db.relations.add({
82 id: 'relation-0',
83 endpoints: [
84@@ -820,13 +823,40 @@
85 db.environment.set('defaultSeries', 'precise');
86
87 // Add the charms so we can resolve them in the export.
88- db.charms.add([{id: 'precise/mysql-1'}, {id: 'precise/wordpress-1'}]);
89+ db.charms.add([{id: 'precise/mysql-1'},
90+ {id: 'precise/wordpress-1',
91+ config: {
92+ options: {
93+ debug: {
94+ 'default': 'no'
95+ },
96+ username: {
97+ 'default': 'root'
98+ }
99+ }
100+ }
101+ }
102+ ]);
103 var result = db.exportDeployer().envExport;
104 var relation = result.relations[0];
105
106 assert.equal(result.series, 'precise');
107- assert.equal(result.services[0].charm, 'mysql');
108- assert.equal(result.services[1].charm, 'wordpress');
109+ assert.equal(result.services.mysql.charm, 'precise/mysql-1');
110+ assert.equal(result.services.wordpress.charm, 'precise/wordpress-1');
111+
112+ // A default config value is skipped
113+ assert.equal(result.services.wordpress.options.debug, undefined);
114+ // A value changed from the default is exported
115+ assert.equal(result.services.wordpress.options.username, 'admin');
116+ // Ensure that mysql has no options object in the export as no
117+ // non-default options are defined
118+ assert.equal(result.services.mysql.options, undefined);
119+
120+ // Export position annotations.
121+ assert.equal(result.services.wordpress.annotations['gui-x'], 100);
122+ assert.equal(result.services.wordpress.annotations['gui-y'], 200);
123+ // Note that ignored wasn't exported.
124+ assert.equal(result.services.wordpress.annotations.ignored, undefined);
125
126 assert.equal(relation[0], 'mysql:db');
127 assert.equal(relation[1], 'wordpress:app');

Subscribers

People subscribed via source and target branches