magnum-ui 15.0.0__py3-none-any.whl → 16.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- magnum_ui/api/magnum.py +5 -0
- magnum_ui/api/rest/magnum.py +20 -8
- magnum_ui/static/dashboard/container-infra/clusters/create/create.service.js +4 -1
- magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.js +12 -7
- magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.spec.js +17 -4
- magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.js +7 -4
- magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.spec.js +12 -5
- magnum_ui/static/dashboard/container-infra/clusters/workflow/network.help.html +12 -3
- magnum_ui/static/dashboard/container-infra/clusters/workflow/workflow.service.js +56 -16
- {magnum_ui-15.0.0.dist-info → magnum_ui-16.0.0.dist-info}/AUTHORS +1 -0
- {magnum_ui-15.0.0.dist-info → magnum_ui-16.0.0.dist-info}/METADATA +7 -9
- {magnum_ui-15.0.0.dist-info → magnum_ui-16.0.0.dist-info}/RECORD +16 -16
- {magnum_ui-15.0.0.dist-info → magnum_ui-16.0.0.dist-info}/WHEEL +1 -1
- magnum_ui-16.0.0.dist-info/pbr.json +1 -0
- magnum_ui-15.0.0.dist-info/pbr.json +0 -1
- {magnum_ui-15.0.0.dist-info → magnum_ui-16.0.0.dist-info}/LICENSE +0 -0
- {magnum_ui-15.0.0.dist-info → magnum_ui-16.0.0.dist-info}/top_level.txt +0 -0
magnum_ui/api/magnum.py
CHANGED
@@ -289,3 +289,8 @@ def quotas_update(request, project_id, resource, **kwargs):
|
|
289
289
|
|
290
290
|
def quotas_delete(request, project_id, resource):
|
291
291
|
return magnumclient(request).quotas.delete(project_id, resource)
|
292
|
+
|
293
|
+
|
294
|
+
def nodegroup_list(request, cluster_id=None, limit=None, marker=None):
|
295
|
+
return magnumclient(request).nodegroups.list(cluster_id, limit=limit,
|
296
|
+
marker=marker)
|
magnum_ui/api/rest/magnum.py
CHANGED
@@ -25,6 +25,7 @@ from django.views import generic
|
|
25
25
|
from magnum_ui.api import heat
|
26
26
|
from magnum_ui.api import magnum
|
27
27
|
|
28
|
+
from heatclient import exc as heatexc
|
28
29
|
from openstack_dashboard import api
|
29
30
|
from openstack_dashboard.api import neutron
|
30
31
|
from openstack_dashboard.api.rest import urls
|
@@ -237,18 +238,29 @@ class ClusterResize(generic.View):
|
|
237
238
|
print(e)
|
238
239
|
return HttpResponseNotFound()
|
239
240
|
|
240
|
-
|
241
|
-
|
242
|
-
|
241
|
+
try:
|
242
|
+
ngs = magnum.nodegroup_list(request, cluster_id)
|
243
|
+
nodegroups = [n.to_dict() for n in ngs]
|
244
|
+
except AttributeError:
|
245
|
+
return HttpResponseNotFound()
|
243
246
|
|
247
|
+
try:
|
248
|
+
stack = heat.stack_get(request, cluster["stack_id"])
|
249
|
+
except heatexc.HTTPNotFound:
|
250
|
+
stack = None
|
244
251
|
worker_nodes = []
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
252
|
+
if stack:
|
253
|
+
search_opts = {"name": "%s-" % stack.stack_name}
|
254
|
+
servers = api.nova.server_list(request, search_opts=search_opts)[0]
|
255
|
+
|
256
|
+
for server in servers:
|
257
|
+
if (server.name.startswith("%s-minion" % stack.stack_name) or
|
258
|
+
server.name.startswith("%s-node" % stack.stack_name)):
|
259
|
+
worker_nodes.append({"name": server.name, "id": server.id})
|
249
260
|
|
250
261
|
return {"cluster": change_to_id(cluster),
|
251
|
-
"worker_nodes": worker_nodes
|
262
|
+
"worker_nodes": worker_nodes,
|
263
|
+
"nodegroups": nodegroups}
|
252
264
|
|
253
265
|
@rest_utils.ajax(data_required=True)
|
254
266
|
def post(self, request, cluster_id):
|
@@ -99,7 +99,6 @@
|
|
99
99
|
name: model.name,
|
100
100
|
cluster_template_id: model.cluster_template_id,
|
101
101
|
keypair: model.keypair,
|
102
|
-
floating_ip_enabled: model.floating_ip_enabled,
|
103
102
|
labels: requestLabels,
|
104
103
|
master_lb_enabled: model.master_lb_enabled
|
105
104
|
};
|
@@ -126,6 +125,10 @@
|
|
126
125
|
requestLabels.availability_zone = model.availability_zone;
|
127
126
|
requestLabels.auto_scaling_enabled = model.auto_scaling_enabled;
|
128
127
|
requestLabels.auto_healing_enabled = model.auto_healing_enabled;
|
128
|
+
requestLabels.master_lb_floating_ip_enabled = model.master_lb_floating_ip_enabled;
|
129
|
+
if (model.api_master_lb_allowed_cidrs !== '') {
|
130
|
+
requestLabels.api_master_lb_allowed_cidrs = model.api_master_lb_allowed_cidrs;
|
131
|
+
}
|
129
132
|
|
130
133
|
if (model.auto_scaling_enabled) {
|
131
134
|
requestLabels.min_node_count = model.min_node_count;
|
@@ -70,7 +70,7 @@
|
|
70
70
|
formModel = getFormModelDefaults();
|
71
71
|
formModel.id = selected.id;
|
72
72
|
|
73
|
-
modalConfig = constructModalConfig(response.data.worker_nodes);
|
73
|
+
modalConfig = constructModalConfig(response.data.nodegroups, response.data.worker_nodes);
|
74
74
|
|
75
75
|
deferred.resolve(modal.open(modalConfig).then(onModalSubmit));
|
76
76
|
$scope.model = formModel;
|
@@ -91,9 +91,13 @@
|
|
91
91
|
return $qExtensions.booleanAsPromise(true);
|
92
92
|
}
|
93
93
|
|
94
|
-
function constructModalConfig(workerNodesList) {
|
95
|
-
|
96
|
-
|
94
|
+
function constructModalConfig(nodegroups, workerNodesList) {
|
95
|
+
var defaultWorker = nodegroups.filter(function(ng) {
|
96
|
+
return ng.name === 'default-worker';
|
97
|
+
})[0];
|
98
|
+
formModel.original_node_count = defaultWorker.node_count;
|
99
|
+
formModel.node_count = defaultWorker.node_count;
|
100
|
+
formModel.worker_nodes = workerNodesList;
|
97
101
|
|
98
102
|
return {
|
99
103
|
title: gettext('Resize Cluster'),
|
@@ -116,8 +120,8 @@
|
|
116
120
|
form: [
|
117
121
|
{
|
118
122
|
key: 'node_count',
|
119
|
-
title: gettext('Node Count'),
|
120
|
-
placeholder: gettext('The
|
123
|
+
title: gettext('Node Count (default-worker)'),
|
124
|
+
placeholder: gettext('The default-worker nodegroup node_count.'),
|
121
125
|
required: true,
|
122
126
|
validationMessage: {
|
123
127
|
101: gettext('You cannot resize to fewer than zero worker nodes.')
|
@@ -129,7 +133,8 @@
|
|
129
133
|
type: 'checkboxes',
|
130
134
|
title: gettext('Choose nodes to remove (Optional)'),
|
131
135
|
titleMap: generateNodesTitleMap(workerNodesList),
|
132
|
-
condition: 'model.node_count < model.original_node_count'
|
136
|
+
condition: 'model.node_count < model.original_node_count && ' +
|
137
|
+
'model.worker_nodes.length > 0',
|
133
138
|
onChange: validateNodeRemovalCount,
|
134
139
|
validationMessage: {
|
135
140
|
nodeRemovalCountExceeded: gettext('You may only select as many nodes ' +
|
@@ -67,10 +67,23 @@
|
|
67
67
|
|
68
68
|
it('should open the modal, hide the loading spinner and check the form model',
|
69
69
|
inject(function($timeout) {
|
70
|
-
|
70
|
+
// 2 nodegroups, default-worker and another-nodegroup, with 2 and 3
|
71
|
+
// nodes respectively. cluster.node_count will be total nodes in all
|
72
|
+
// nodegroups
|
73
|
+
var mockDefaultWorker = {name: 'default-worker', node_count: 2};
|
74
|
+
var mockNodegroups = [mockDefaultWorker,
|
75
|
+
{name: 'default-master', node_count: 1},
|
76
|
+
{name: 'another-nodegroup', node_count: 3}];
|
77
|
+
var mockCluster = {node_count: 5};
|
78
|
+
|
79
|
+
// only populated with heat, [] for capi
|
80
|
+
var mockWorkerNodes = [{id: "456", name: "Worker Node 1"},
|
81
|
+
{id: "457", name: "Worker Node 2"}];
|
71
82
|
|
72
83
|
deferred = $q.defer();
|
73
|
-
deferred.resolve({data: {cluster:
|
84
|
+
deferred.resolve({data: {cluster: mockCluster,
|
85
|
+
worker_nodes: mockWorkerNodes,
|
86
|
+
nodegroups: mockNodegroups}});
|
74
87
|
spyOn(magnum, 'getClusterNodes').and.returnValue(deferred.promise);
|
75
88
|
|
76
89
|
service.perform(selected, $scope);
|
@@ -82,8 +95,8 @@
|
|
82
95
|
|
83
96
|
// Check if the form's model skeleton is correct
|
84
97
|
expect(modalConfig.model.id).toBe(selected.id);
|
85
|
-
expect(modalConfig.model.original_node_count).toBe(
|
86
|
-
expect(modalConfig.model.node_count).toBe(
|
98
|
+
expect(modalConfig.model.original_node_count).toBe(mockDefaultWorker.node_count);
|
99
|
+
expect(modalConfig.model.node_count).toBe(mockDefaultWorker.node_count);
|
87
100
|
expect(modalConfig.title).toBeDefined();
|
88
101
|
expect(modalConfig.schema).toBeDefined();
|
89
102
|
expect(modalConfig.form).toBeDefined();
|
@@ -85,10 +85,7 @@
|
|
85
85
|
setResponseAsDefaultIfUnset('master_flavor_id', 'master_flavor_id');
|
86
86
|
setResponseAsDefaultIfUnset('node_count', 'node_count');
|
87
87
|
setResponseAsDefaultIfUnset('flavor_id', 'flavor_id');
|
88
|
-
|
89
|
-
if (template.floating_ip_enabled !== null) {
|
90
|
-
$scope.model.floating_ip_enabled = template.floating_ip_enabled;
|
91
|
-
}
|
88
|
+
setResponseAsDefaultIfUnset('master_lb_enabled', 'master_lb_enabled');
|
92
89
|
|
93
90
|
if (!template.labels) { return; }
|
94
91
|
|
@@ -97,6 +94,12 @@
|
|
97
94
|
// If a template label exists as a field on the form -> Set it as a default
|
98
95
|
setLabelResponseAsDefault('auto_scaling_enabled', 'auto_scaling_enabled', true);
|
99
96
|
setLabelResponseAsDefault('auto_healing_enabled', 'auto_healing_enabled', true);
|
97
|
+
setLabelResponseAsDefault(
|
98
|
+
'master_lb_floating_ip_enabled',
|
99
|
+
'master_lb_floating_ip_enabled',
|
100
|
+
true);
|
101
|
+
// Forcibly clear allowed cidr values on template load. Otherwise this value becomes nil.
|
102
|
+
$scope.model.api_master_lb_allowed_cidrs = MODEL_DEFAULTS.api_master_lb_allowed_cidrs;
|
100
103
|
|
101
104
|
// Set default `ingress_controller` based on its label
|
102
105
|
if (template.labels.ingress_controller !== null &&
|
magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.spec.js
CHANGED
@@ -204,12 +204,14 @@
|
|
204
204
|
|
205
205
|
it('should always override some model properties by values from ' +
|
206
206
|
'retrieved cluster template', function() {
|
207
|
-
$scope.model.
|
208
|
-
templateResponse.
|
209
|
-
$scope.model.cluster_template_id = '99'; // Triggers
|
207
|
+
$scope.model.master_lb_floating_ip_enabled = !MODEL_DEFAULTS.master_lb_floating_ip_enabled;
|
208
|
+
templateResponse.master_lb_floating_ip_enabled = !$scope.model.master_lb_floating_ip_enabled;
|
209
|
+
$scope.model.cluster_template_id = '99'; // Triggers business logic revalidation
|
210
210
|
$scope.$apply();
|
211
211
|
|
212
|
-
expect($scope.model.
|
212
|
+
expect($scope.model.master_lb_floating_ip_enabled).toBe(
|
213
|
+
templateResponse.master_lb_floating_ip_enabled
|
214
|
+
);
|
213
215
|
});
|
214
216
|
|
215
217
|
it('should always override some model\'s properties by values from ' +
|
@@ -220,11 +222,16 @@
|
|
220
222
|
templateResponse.labels.auto_scaling_enabled = 'true';
|
221
223
|
model.auto_healing_enabled = true;
|
222
224
|
templateResponse.labels.auto_healing_enabled = 'false';
|
223
|
-
model.
|
225
|
+
model.api_master_lb_allowed_cidrs = "192.168.67.0/24";
|
226
|
+
templateResponse.labels.api_master_lb_allowed_cidrs = "10.0.0.1/16";
|
227
|
+
model.cluster_template_id = '99'; // Triggers business logic revalidation
|
224
228
|
$scope.$apply();
|
225
229
|
|
226
230
|
expect(model.auto_scaling_enabled).toBe(true);
|
227
231
|
expect(model.auto_healing_enabled).toBe(false);
|
232
|
+
expect($scope.model.api_master_lb_allowed_cidrs).toBe(
|
233
|
+
MODEL_DEFAULTS.api_master_lb_allowed_cidrs
|
234
|
+
);
|
228
235
|
});
|
229
236
|
|
230
237
|
it('should not fail if the cluster template response is empty', function() {
|
@@ -1,4 +1,13 @@
|
|
1
|
-
<h1 class="h4" translate>
|
1
|
+
<h1 class="h4" translate>Network</h1>
|
2
2
|
|
3
|
-
<p translate>
|
4
|
-
|
3
|
+
<p translate>You can choose to create a new network for this cluster, or use an existing network. If you use an existing, it needs to have a subnet and router with a gateway on the external network. You may also need to take care not to conflict with CIDRs in use by the Kubernetes pod and service network.</p>
|
4
|
+
|
5
|
+
|
6
|
+
<h1 class="h4" translate>API Loadbalancer: Floating IP</h1>
|
7
|
+
|
8
|
+
<p translate>Making the Kubernetes API accessible from your private network only is the most secure option (the default), but access will be limited to compute instances on the same private network or a VPN to that network.</p>
|
9
|
+
<p translate>Making the Kubernetes API accessible from the public internet with a floating IP is convenient, but may represent a security risk. When selecting this option, it is recommended to set Allowed CIDRs to limit access to a trusted IP address range.</p>
|
10
|
+
|
11
|
+
|
12
|
+
<h1 class="h4" translate>API Loadbalancer: Allowed CIDRs</h1>
|
13
|
+
<p translate>If this field is left empty, the API Loadbalancer will accept connections from any address. When set to one or more CIDR then only those, plus the internal network, are permitted access to the Kubernetes API Loadbalancer.</em></p>
|
@@ -44,6 +44,9 @@
|
|
44
44
|
// comma-separated key=value with optional space after comma
|
45
45
|
var REGEXP_KEY_VALUE = /^(\w+=[^,]+,?\s?)+$/;
|
46
46
|
|
47
|
+
// Comma-separated CIDR list. Allows lots of variation to include v4 and v6.
|
48
|
+
var REGEXP_CIDR_LIST = /^[a-f0-9\.:]+\/[0-9]+(,\s?[a-f0-9\.:]+\/[0-9]+)*$/;
|
49
|
+
|
47
50
|
// Object name, must start with alphabetical character.
|
48
51
|
var REGEXP_CLUSTER_NAME = /^[a-zA-Z][a-zA-Z0-9_\-\.]*$/;
|
49
52
|
|
@@ -109,7 +112,8 @@
|
|
109
112
|
'create_network': { type: 'boolean' },
|
110
113
|
'fixed_network': { type: 'string' },
|
111
114
|
'fixed_subnet': { type: 'string' },
|
112
|
-
'
|
115
|
+
'master_lb_floating_ip_enabled': { type: 'boolean' },
|
116
|
+
'api_master_lb_allowed_cidrs': { type: 'string' },
|
113
117
|
'ingress_controller': { type: 'object' },
|
114
118
|
|
115
119
|
'auto_healing_enabled': { type: 'boolean' },
|
@@ -359,11 +363,6 @@
|
|
359
363
|
type: 'fieldset',
|
360
364
|
title: gettext('Network'),
|
361
365
|
items: [
|
362
|
-
{
|
363
|
-
key: 'master_lb_enabled',
|
364
|
-
type: 'checkbox',
|
365
|
-
title: gettext('Enable Load Balancer for Master Nodes')
|
366
|
-
},
|
367
366
|
{
|
368
367
|
key: 'create_network',
|
369
368
|
title: gettext('Create New Network'),
|
@@ -398,25 +397,65 @@
|
|
398
397
|
},
|
399
398
|
{
|
400
399
|
type: 'fieldset',
|
401
|
-
title: gettext('
|
400
|
+
title: gettext('Kubernetes API Loadbalancer'),
|
402
401
|
items: [
|
403
402
|
{
|
404
|
-
key: '
|
403
|
+
key: 'master_lb_enabled',
|
404
|
+
type: 'checkbox',
|
405
|
+
title: gettext('Enable Load Balancer for Kubernetes API'),
|
406
|
+
onChange: function(value) {
|
407
|
+
if (value) {
|
408
|
+
model.master_count = MODEL_DEFAULTS.master_count;
|
409
|
+
// Reset values to defaults. They are null after being disabled.
|
410
|
+
model.master_lb_floating_ip_enabled =
|
411
|
+
MODEL_DEFAULTS.master_lb_floating_ip_enabled;
|
412
|
+
model.api_master_lb_allowed_cidrs =
|
413
|
+
MODEL_DEFAULTS.api_master_lb_allowed_cidrs;
|
414
|
+
} else {
|
415
|
+
// Without master_lb_enabled, we can only support
|
416
|
+
// a single master node.
|
417
|
+
model.master_count = 1;
|
418
|
+
}
|
419
|
+
model.isSingleMasterNode = !value;
|
420
|
+
}
|
421
|
+
},
|
422
|
+
{
|
423
|
+
key: 'master_lb_floating_ip_enabled', // formerly floating_ip_enabled
|
405
424
|
type: 'select',
|
406
|
-
title: gettext('
|
425
|
+
title: gettext('Floating IP'),
|
407
426
|
titleMap: [
|
408
427
|
{value: false, name: gettext('Accessible on private network only')},
|
409
|
-
{value: true, name: gettext('Accessible
|
410
|
-
]
|
428
|
+
{value: true, name: gettext('Accessible with public floating IP')}
|
429
|
+
],
|
430
|
+
condition: 'model.master_lb_enabled === true'
|
431
|
+
},
|
432
|
+
{
|
433
|
+
key: 'api_master_lb_allowed_cidrs',
|
434
|
+
type: 'text',
|
435
|
+
title: gettext('Allowed CIDRs'),
|
436
|
+
validationMessage: {
|
437
|
+
invalidFormat: gettext('Invalid format. Must be a comma-separated ' +
|
438
|
+
'CIDR string: 192.168.1.5/32,10.0.0.1/24')
|
439
|
+
},
|
440
|
+
$validators: {
|
441
|
+
invalidFormat: function(cidrString) {
|
442
|
+
return cidrString === '' || REGEXP_CIDR_LIST.test(cidrString);
|
443
|
+
}
|
444
|
+
},
|
445
|
+
condition: 'model.master_lb_enabled === true',
|
411
446
|
},
|
412
|
-
// Warning message
|
447
|
+
// Warning message when Kubernetes API has a Floating IP
|
413
448
|
{
|
414
449
|
type: 'template',
|
415
450
|
template: '<div class="alert alert-warning">' +
|
416
451
|
'<span class="fa fa-warning"></span> ' +
|
417
|
-
gettext('
|
452
|
+
gettext('A public floating IP will mean the Kubernetes API is ' +
|
453
|
+
'publically routable on the internet. It is generally not ' +
|
454
|
+
'recommended to give public access to the Kubernetes API. ' +
|
455
|
+
'Consider limiting the access using the Allowed CIDRs ' +
|
456
|
+
'section.') +
|
418
457
|
'</div>',
|
419
|
-
condition: 'model.
|
458
|
+
condition: 'model.master_lb_floating_ip_enabled == true'
|
420
459
|
}
|
421
460
|
]
|
422
461
|
},
|
@@ -538,7 +577,8 @@
|
|
538
577
|
create_network: true,
|
539
578
|
fixed_network: '',
|
540
579
|
fixed_subnet: '',
|
541
|
-
|
580
|
+
master_lb_floating_ip_enabled: false,
|
581
|
+
api_master_lb_allowed_cidrs: '',
|
542
582
|
ingress_controller: '',
|
543
583
|
|
544
584
|
auto_healing_enabled: true,
|
@@ -646,7 +686,7 @@
|
|
646
686
|
fixedSubnets = [{value: "", name: fixedSubnetsInitial}];
|
647
687
|
}
|
648
688
|
// NOTE(dalees): This hardcoded index could be improved by referencing an object instead.
|
649
|
-
form[0].tabs[2].items[0].items[0].items[
|
689
|
+
form[0].tabs[2].items[0].items[0].items[2].titleMap = subnetTitleMap;
|
650
690
|
model.fixed_subnet = MODEL_DEFAULTS.fixed_subnet;
|
651
691
|
}
|
652
692
|
|
@@ -4,6 +4,7 @@ Andreas Jaeger <aj@suse.com>
|
|
4
4
|
Andreas Jaeger <aj@suse.de>
|
5
5
|
Andrei Nistor <andrei_nistor@smart-x.net>
|
6
6
|
Andrew Bogott <abogott@wikimedia.org>
|
7
|
+
Andrew Bonney <andrew.bonney@bbc.co.uk>
|
7
8
|
Bharat Kunwar <bharat@stackhpc.com>
|
8
9
|
Bharat Kunwar <brtknr@bath.edu>
|
9
10
|
Bradley Jones <jones.bradley@me.com>
|
@@ -1,12 +1,10 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: magnum-ui
|
3
|
-
Version:
|
3
|
+
Version: 16.0.0
|
4
4
|
Summary: Magnum User Interface
|
5
5
|
Home-page: https://docs.openstack.org/developer/magnum-ui/
|
6
6
|
Author: OpenStack
|
7
7
|
Author-email: openstack-discuss@lists.openstack.org
|
8
|
-
License: UNKNOWN
|
9
|
-
Platform: UNKNOWN
|
10
8
|
Classifier: Environment :: OpenStack
|
11
9
|
Classifier: Intended Audience :: Information Technology
|
12
10
|
Classifier: Intended Audience :: System Administrators
|
@@ -20,10 +18,12 @@ Classifier: Programming Language :: Python :: 3.8
|
|
20
18
|
Classifier: Programming Language :: Python :: 3.9
|
21
19
|
Classifier: Programming Language :: Python :: 3.10
|
22
20
|
Classifier: Programming Language :: Python :: 3.11
|
23
|
-
|
24
|
-
|
25
|
-
Requires-Dist:
|
26
|
-
Requires-Dist: python-magnumclient
|
21
|
+
License-File: LICENSE
|
22
|
+
License-File: AUTHORS
|
23
|
+
Requires-Dist: pbr !=2.1.0,>=2.0.0
|
24
|
+
Requires-Dist: python-magnumclient >=4.2.0
|
25
|
+
Requires-Dist: python-heatclient >=1.18.0
|
26
|
+
Requires-Dist: horizon >=17.1.0
|
27
27
|
|
28
28
|
========================
|
29
29
|
Team and repository tags
|
@@ -97,5 +97,3 @@ To run horizon with the newly enabled Magnum UI plugin run::
|
|
97
97
|
to have the application start on port 8080 and the horizon dashboard will be
|
98
98
|
available in your browser at http://localhost:8080/
|
99
99
|
|
100
|
-
|
101
|
-
|
@@ -3,9 +3,9 @@ magnum_ui/karma.conf.js,sha256=hcG4XL66J9t4NCYRy4S-N6Fyz5ZIIQJeHvkcRJ-949A,5502
|
|
3
3
|
magnum_ui/version.py,sha256=wE4hFR9_kWK53KfUZNviqJMpLy_3a2jQBcrNhJHLeHw,626
|
4
4
|
magnum_ui/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
magnum_ui/api/heat.py,sha256=lM3URoQ4PWahTFAbfNqHP6vppUkr4mfqOikanBUUgfg,1910
|
6
|
-
magnum_ui/api/magnum.py,sha256=
|
6
|
+
magnum_ui/api/magnum.py,sha256=g13jvbI3pzUf9HEMiGSPK91YqBK7Th6XU8IqUDOP3bA,10348
|
7
7
|
magnum_ui/api/rest/__init__.py,sha256=YNQkFUbPTeSOVF8Fs1OeCkAfsoIBBNZfePBNe93EJg8,639
|
8
|
-
magnum_ui/api/rest/magnum.py,sha256=
|
8
|
+
magnum_ui/api/rest/magnum.py,sha256=LAzKTPfSjpHVPiZa_M8EV8HJW6vaAXvyLnQluVg5iBE,16105
|
9
9
|
magnum_ui/content/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
magnum_ui/content/cluster_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
11
|
magnum_ui/content/cluster_templates/panel.py,sha256=yU0HwXKvIQ4oThM9yB2kldJ4mdV2NlENHWjs4WHVn20,789
|
@@ -93,7 +93,7 @@ magnum_ui/static/dashboard/container-infra/clusters/clusters.utils.spec.js,sha25
|
|
93
93
|
magnum_ui/static/dashboard/container-infra/clusters/panel.html,sha256=SoSjm69fTYK0OKxAP9Sd8kGY9Qn0vGwQ_Ljc55ADvUo,1005
|
94
94
|
magnum_ui/static/dashboard/container-infra/clusters/config/config.service.js,sha256=R0QaoUl6GM1GfZjT9Bcu5WgNRqVOs5zAMhIp2TaGia4,2358
|
95
95
|
magnum_ui/static/dashboard/container-infra/clusters/config/config.service.spec.js,sha256=Ej_ztZATzc8Ui__DHMzZrd0XwpPlAfjR2SzjMugM_B4,2827
|
96
|
-
magnum_ui/static/dashboard/container-infra/clusters/create/create.service.js,sha256=
|
96
|
+
magnum_ui/static/dashboard/container-infra/clusters/create/create.service.js,sha256=o1OhoiPE60gFMj71Y85Ug2UWG5inXPgwqWNKSdzcXZs,6772
|
97
97
|
magnum_ui/static/dashboard/container-infra/clusters/create/create.service.spec.js,sha256=Ai0GTzTDPSraJQ5J8kOkKrrHd2F4z3MrU9rgrfPBl2c,4282
|
98
98
|
magnum_ui/static/dashboard/container-infra/clusters/delete/delete.service.js,sha256=t2Cigzjaq7LIENDQbqWOs8I0RzQpJ8cNP4gvMoVvyi4,5824
|
99
99
|
magnum_ui/static/dashboard/container-infra/clusters/delete/delete.service.spec.js,sha256=jS5eILGS8toKIu1tcbKo-sS7cyS4P1PdbHTS8GaTb9g,4213
|
@@ -104,8 +104,8 @@ magnum_ui/static/dashboard/container-infra/clusters/details/drawer.html,sha256=0
|
|
104
104
|
magnum_ui/static/dashboard/container-infra/clusters/details/overview.controller.js,sha256=22cJ4cjnVT_jzJ4CCXQ36-krpY1-ADTd08-alm4KdsI,1533
|
105
105
|
magnum_ui/static/dashboard/container-infra/clusters/details/overview.controller.spec.js,sha256=fmuWauBD6bZM8hDN32xtauamqLW9IVB4ZhPE8rpR0W0,1719
|
106
106
|
magnum_ui/static/dashboard/container-infra/clusters/details/overview.html,sha256=tw-ga-rQMN5xQandng7mWmzJ9xbLzTf0242lUgvBbjY,4514
|
107
|
-
magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.js,sha256=
|
108
|
-
magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.spec.js,sha256=
|
107
|
+
magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.js,sha256=qUGFTFxINEOrSDRpIS0Xm3FiO_0-TqlNt7_qTtA7SIk,6527
|
108
|
+
magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.spec.js,sha256=4W7JDfYKRBYq-F0bJZlu9KDH1ow8gRwS6EDMHVFBmeg,4693
|
109
109
|
magnum_ui/static/dashboard/container-infra/clusters/rolling-upgrade/upgrade.service.js,sha256=jvbsYRUGI1FktfETc1sIOssWr_pw1rlrcRCozmCoFck,7506
|
110
110
|
magnum_ui/static/dashboard/container-infra/clusters/rolling-upgrade/upgrade.service.spec.js,sha256=w4OoURdD_IF_jM-fS6ZjlmgOIIGGeF1pVActS6jgKSc,4801
|
111
111
|
magnum_ui/static/dashboard/container-infra/clusters/rotate-certificate/rotate-certificate.service.js,sha256=d-ZaxAFyoBPtDxHOn5svEG_Ac9ygi7sOn7oGv2A-q_U,2382
|
@@ -119,14 +119,14 @@ magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certif
|
|
119
119
|
magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate.service.js,sha256=jgt-EhcFz4YqFn-6gqz3adSNb4WVjxY8oqeGTyaQ2c0,2979
|
120
120
|
magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate.service.spec.js,sha256=wBTnUhcAGMX5CnEAsvfi7N2PDNai_kQ3zh4StYTD3HQ,2393
|
121
121
|
magnum_ui/static/dashboard/container-infra/clusters/workflow/advanced.help.html,sha256=3TpipMb754br3cYVIQyT_smPtbMngEfudJ2nHgapbT4,393
|
122
|
-
magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.js,sha256=
|
123
|
-
magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.spec.js,sha256=
|
122
|
+
magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.js,sha256=TENUOncg63ukNeGxLUfPtKsDC3wYcopGZHPoXGoPIlQ,5027
|
123
|
+
magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.spec.js,sha256=TupdSwiIUhMRtdapD9SW9M5uWDwAsrPbcULTc5jgKug,9817
|
124
124
|
magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.html,sha256=MMxTztsVLyw7O3ZvStQ7wyvFetVpmCpZ658ctiu3WDk,1315
|
125
125
|
magnum_ui/static/dashboard/container-infra/clusters/workflow/details.help.html,sha256=UTG87Dp-4jYABEKdHqeAKNB4C8fqpgriP9MJ_itEk_0,229
|
126
126
|
magnum_ui/static/dashboard/container-infra/clusters/workflow/management.help.html,sha256=cowhxDWnXXefPGRAbUTbXHZboXEmuLgk0CfMikDjIvQ,266
|
127
|
-
magnum_ui/static/dashboard/container-infra/clusters/workflow/network.help.html,sha256=
|
127
|
+
magnum_ui/static/dashboard/container-infra/clusters/workflow/network.help.html,sha256=36Fe01YOn836Qz_GnpBC6A60EDSknLBcKnPtJM75oNA,1211
|
128
128
|
magnum_ui/static/dashboard/container-infra/clusters/workflow/size.help.html,sha256=C4uRym8byNSBX6ROfCEFm0caxAeA7cusXcuRbzWl7Qo,861
|
129
|
-
magnum_ui/static/dashboard/container-infra/clusters/workflow/workflow.service.js,sha256=
|
129
|
+
magnum_ui/static/dashboard/container-infra/clusters/workflow/workflow.service.js,sha256=wDwsWs1Azk5UyqXzUAR4mAThqAYCLCNxrn9CP49WcEU,29828
|
130
130
|
magnum_ui/static/dashboard/container-infra/clusters/workflow/workflow.service.spec.js,sha256=iV9ZnzQZ8Qbtavh2dRudb3yxu6t9d2fD28U9Ajw-sxU,3861
|
131
131
|
magnum_ui/static/dashboard/container-infra/quotas/actions.module.js,sha256=ijIKewMFFxNf8qBy1GtUcrAgr_5bkSp99GcYP_Axa8M,2434
|
132
132
|
magnum_ui/static/dashboard/container-infra/quotas/actions.module.spec.js,sha256=T8P5gcUFUwy2Gvd_HtDxJQ2f4v0CuGbc6pLU1zonB-g,1299
|
@@ -150,10 +150,10 @@ magnum_ui/test/test_data.py,sha256=FjDNKKnxx3nDTczb7kMQYbMlg5yhin06F080Gt9AkD0,3
|
|
150
150
|
magnum_ui/test/api_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
151
151
|
magnum_ui/test/api_tests/test_rest_api.py,sha256=A8VanDLVVnTdJeXstZs0CaokoE27uGbpt2k_x30TFqI,5516
|
152
152
|
magnum_ui/test/integration_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
153
|
-
magnum_ui-
|
154
|
-
magnum_ui-
|
155
|
-
magnum_ui-
|
156
|
-
magnum_ui-
|
157
|
-
magnum_ui-
|
158
|
-
magnum_ui-
|
159
|
-
magnum_ui-
|
153
|
+
magnum_ui-16.0.0.dist-info/AUTHORS,sha256=0cQzwdJJrjN8oW8CLf0XHhJB6ab-vZJXy_h5w_LQjdc,2839
|
154
|
+
magnum_ui-16.0.0.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
|
155
|
+
magnum_ui-16.0.0.dist-info/METADATA,sha256=RRfeRmluzHHe84XfToNHhIIBVGy4rgbLsE3bAtu_f0A,3494
|
156
|
+
magnum_ui-16.0.0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
157
|
+
magnum_ui-16.0.0.dist-info/pbr.json,sha256=2ZBmaB2J3r5fbK6P1l1YmioDvea34K_1Zf9kYDu4Yho,46
|
158
|
+
magnum_ui-16.0.0.dist-info/top_level.txt,sha256=CDLukePJoQ3_SL4beNNspl5mYErPcdlNGI9CEKD01cA,10
|
159
|
+
magnum_ui-16.0.0.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
{"git_version": "829919f", "is_release": true}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"git_version": "736edba", "is_release": true}
|
File without changes
|
File without changes
|