kube-system NS support

This commit is contained in:
Vincent Fiduccia 2016-02-24 13:57:35 -07:00
parent 81a99dea66
commit ecbd91c166
16 changed files with 202 additions and 120 deletions

View File

@ -1,7 +1,15 @@
import Ember from 'ember';
import C from 'ui/utils/constants';
export default Ember.Route.extend({
redirect: function() {
if ( window.lc('authenticated').get('hasKubernetes') )
{
this.transitionTo('environments', {queryParams: {which: C.EXTERNALID.KIND_NOT_KUBERNETES}});
}
else
{
this.transitionTo('environments');
}
}
});

View File

@ -3,10 +3,10 @@
<thead>
<tr>
<th>Pod Name</th>
<th>Status</th>
<th>Containers</th>
<th>Host IP</th>
<th>Pod IP</th>
<th width="150">Status</th>
<th width="150">Containers</th>
<th width="150">Host IP</th>
<th width="150">Pod IP</th>
<th class="actions" width="85">&nbsp;</th>
</tr>
</thead>

View File

@ -53,8 +53,8 @@ export default Ember.Component.extend({
this.set('status','Initializing...');
var term = new Terminal({
cols: 80,
rows: 24,
cols: 120,
rows: 30,
useStyle: true,
screenKeys: true,
cursorBlink: false

View File

@ -5,7 +5,7 @@
{{#if (or isKubernetesTab hasKubernetes)}}
{{#link-to "k8s-tab" projectId id="k8s-tab"}}Kubernetes{{/link-to}}
{{/if}}
{{#link-to "applications-tab" projectId id="applications-tab"}}Applications{{/link-to}}
{{#link-to "applications-tab" projectId id="applications-tab"}}{{if hasKubernetes 'System' 'Applications'}}{{/link-to}}
{{#link-to "infrastructure-tab" projectId id="infrastructure-tab"}}Infrastructure{{/link-to}}
{{#if isAdmin}}
<span class="link-admin">
@ -130,13 +130,27 @@
{{#if k8s.namespaces.length}}
<li role="presentation" class="dropdown-header">Namespaces</li>
{{#each k8s.namespaces as |ns|}}
{{#unless ns.isSystem}}
<li class="{{if (eq ns k8s.namespace) 'disabled selected'}}">
<a {{action "switchNamespace" ns.id}} class="clip">
<i class="icon {{ns.icon}}"></i>
<i class="{{ns.icon}}"></i>
&nbsp;
{{ns.displayName}}
</a>
</li>
{{/unless}}
{{/each}}
<li role="presentation" class="divider"></li>
{{#each k8s.namespaces as |ns|}}
{{#if ns.isSystem}}
<li class="{{if (eq ns k8s.namespace) 'disabled selected'}}">
<a {{action "switchNamespace" ns.id}} class="clip">
<i class="{{ns.icon}}"></i>
&nbsp;
{{ns.displayName}}
</a>
</li>
{{/if}}
{{/each}}
<li role="presentation" class="divider"></li>
{{/if}}

View File

@ -8,7 +8,7 @@
{{#if model.description}}{{model.description}}{{else}}<span class="text-muted">No description</span>{{/if}}
</td>
<td>
{{model.displayOrchestration}}
{{model.displayClustering}}
</td>
<td>
{{#if model.isDefault}}<i class="icon icon-check"></i>{{else}}<span class="text-muted">&ndash;</span>{{/if}}

View File

@ -22,6 +22,7 @@
{{#if showEdit}}
<section class="well">
<label>Cluster Management</label>
<div class="nav nav-boxes checked-active">
{{#each orchestrationChoices as |driver|}}
<a {{action "selectOrchestration" driver.name}} alt={{driver.label}} class="nav-box-item driver orchestration-driver {{if driver.active 'active'}} {{driver.css}}"></a>

View File

@ -28,6 +28,9 @@ export default Ember.Controller.extend(Sortable, {
},
setup: function() {
// Need this to setup the observer for filteredStacks
this.get('which');
var sort = this.get(`prefs.${C.PREFS.SORT_STACKS_BY}`);
if (sort && sort !== this.get('sortBy')) {
this.set('sortBy', sort);
@ -42,11 +45,17 @@ export default Ember.Controller.extend(Sortable, {
{
return all;
}
else if ( which === C.EXTERNALID.KIND_NOT_KUBERNETES )
{
return all.filter((obj) => {
return obj.get('grouping') !== C.EXTERNALID.KIND_KUBERNETES;
});
}
else
{
return all.filterBy('grouping', which);
}
}.property('model.[]','which'),
}.property('model.[]','model.@each.grouping','which'),
sortBy: 'state',

View File

@ -14,7 +14,9 @@
</thead>
<tbody>
{{#each arranged as |ns|}}
{{#unless ns.isSystem}}
{{k8s/ns-row model=ns}}
{{/unless}}
{{else}}
<tr><td colspan="5" class="text-center text-muted">You do not have any Namespaces yet.</td></tr>
{{/each}}

View File

@ -1,5 +1,18 @@
import K8sResource from 'ui/models/k8s-resource';
var Namespace = K8sResource.extend();
var Namespace = K8sResource.extend({
isSystem: Ember.computed.equal('id','kube-system'),
icon: function() {
if ( this.get('isSystem') )
{
return 'icon icon-gear';
}
else
{
return 'icon icon-folder';
}
}.property('isSystem'),
});
export default Namespace;

View File

@ -118,7 +118,7 @@ var Project = Resource.extend(PolledResource, {
return this.get('state') === 'active' && !this.get('isDefault');
}.property('state','isDefault'),
displayOrchestration: function() {
displayClustering: function() {
if ( this.get('kubernetes') )
{
return 'Kubernetes';
@ -129,7 +129,7 @@ var Project = Resource.extend(PolledResource, {
}
else
{
return 'Corral';
return 'Cattle';
}
}.property('kubernetes','swarm'),
});

View File

@ -459,7 +459,32 @@ export default Ember.Service.extend({
});
},
allNamespaces() { return this._allCollection('namespace','namespaces'); },
allNamespaces() {
var store = this.get('store');
var type = `${C.K8S.TYPE_PREFIX}namespace`;
var name = 'kube-system';
return this._allCollection('namespace','namespaces').then((namespaces) => {
// kube-system is special and doesn't feel like it needs to come back in a list...
if ( !store.getById(type,name) )
{
store._add(type, store.createRecord({
apiVersion: 'v1',
type: type,
id: name,
metadata: {
name: name,
},
kind: 'Namespace',
spec: {},
}));
}
return namespaces;
});
},
getNamespaces() { return this._getCollection('namespace','namespaces'); },
getNamespace(name) {
return this._find(`${C.K8S.TYPE_PREFIX}namespace`, name , {

View File

@ -7,7 +7,7 @@ export default Ember.Controller.extend(Sortable, {
state: ['stateSort','name','id'],
name: ['name','id'],
description: ['description','name','id'],
orchestration:['displayOrchestration','name','id'],
clustering: ['displayClustering','name','id'],
},
access: Ember.inject.service(),

View File

@ -21,7 +21,7 @@
{{sortable-th sortable=this action="changeSort" name="state" width="125"}}
{{sortable-th sortable=this action="changeSort" name="name"}}
{{sortable-th sortable=this action="changeSort" name="description"}}
{{sortable-th sortable=this action="changeSort" name="orchestration"}}
{{sortable-th sortable=this action="changeSort" name="clustering"}}
<th width="80">Default</th>
<th width="50">&nbsp;</th>
</tr>

View File

@ -1,5 +1,9 @@
{{#if hasKubernetes}}
{{#link-to "environments" (query-params which="not-kubernetes")}}<i class="icon icon-layers"></i>Stacks{{/link-to}}
{{else}}
{{#link-to "environments" (query-params which="user")}}<i class="icon icon-layers"></i> Stacks{{/link-to}}
{{#if hasSystem}}
{{#link-to "environments" (query-params which="system")}}<i class="icon icon-network"></i>System{{/link-to}}
{{/if}}
{{/if}}
{{#link-to "applications-tab.catalog"}}<i class="icon icon-catalog"></i> Catalog{{/link-to}}

View File

@ -3,6 +3,7 @@ const KIND_CATALOG = 'catalog';
const KIND_SYSTEM = 'system';
const KIND_SYSTEM_CATALOG = 'system-catalog';
const KIND_KUBERNETES = 'kubernetes';
const KIND_NOT_KUBERNETES = 'not-kubernetes';
var C = {
COOKIE: {

View File

@ -1,104 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<style type="text/css">
.st0{fill:#95A5A6;}
.st1{fill:#0075A8;}
.st2{fill:#0EB7ED;}
.st3{fill:#D3EDF1;}
.st4{fill:none;stroke:#000000;stroke-width:0.5;stroke-miterlimit:10;}
.st5{fill:none;}
.st6{fill:#394D54;}
.st7{fill:#39B7E1;}
.st8{fill:#FFFFFF;}
.st9{fill:#336EE5;}
.st10{fill:none;stroke:#FFFFFF;stroke-width:0.2744;}
.st11{fill:#373535;}
.st12{fill:#0074AA;}
.st13{fill:#00C8FA;}
.st14{fill:#00A9D2;}
.st15{opacity:0.5;fill:#0EB7ED;}
.st0{fill:#394D54;}
.st1{fill:#0074AA;}
.st2{fill:none;}
.st3{fill:#39B7E1;}
.st4{fill:#FFFFFF;}
.st5{fill:#336EE5;}
.st6{fill:none;stroke:#FFFFFF;stroke-width:0.2744;}
.st7{fill:#373535;}
.st8{fill:#95A5A6;}
</style>
<g id="Layer_2">
</g>
<g id="Layer_1">
<rect x="9" y="42" class="st0" width="2" height="20"/>
<g>
<path class="st1" d="M73.5,39.4l-0.5-2.8c-0.1-0.9-0.5-1.6-0.8-1.6s-0.5,0.7-0.5,1.6v0.7c0,0.9-0.7,1.6-1.6,1.6h-0.7
c-0.1,0-0.1,0-0.2,0v2c0.1,0,0.1,0,0.2,0h2.7C73,41,73.7,40.3,73.5,39.4"/>
<path class="st1" d="M67,37.1h-4.4c0,0-0.1,0-0.1,0h-4.5c-0.1,0-0.1,0-0.2,0v-0.4c0-0.9-0.2-1.6-0.5-1.6s-0.6,0.7-0.8,1.6L56,39.4
c-0.1,0.9,0.5,1.6,1.4,1.6h2.7c0.3,0,0.5,0,0.8-0.1c-0.1,0.5-0.5,0.8-1,0.8h-3.8c-0.6,0-1.1-0.6-1-1.2l0.4-2.3
c0.1-0.6-0.4-1.2-1-1.2h-19c-0.4,0-0.8,0.2-0.9,0.6L31,43.1c-0.1,0.1-0.1,0.2,0,0.3l0.7,0.8c0.1,0.1,0.2,0.1,0.3,0l2.4-1.9V54
c0,0.6,0.4,1,1,1h5.4c0.6,0,1-0.4,1-1v-4.1c0-0.6,0.4-1,1-1h13.5c0.6,0,1,0.4,1,1V54c0,0.6,0.4,1,1,1h5.4c0.6,0,1-0.4,1-1v-4.4
h-2.9c-0.9,0-1.6-0.7-1.6-1.6v-2.8c0-0.5,0.3-1,0.7-1.3v3.3c0,0.9,0.7,1.6,1.6,1.6H67c0.9,0,1.6-0.7,1.6-1.6v-8.5
C68.6,37.8,67.9,37.1,67,37.1"/>
<path class="st0" d="M34.2,87.3c0.1,0,0.3,0.1,0.4,0.2l1.1,1.2c-0.6,0.7-1.3,1.3-2.2,1.7c-0.9,0.4-1.9,0.6-3.1,0.6
c-1.1,0-2.1-0.2-3-0.6c-0.9-0.4-1.6-0.9-2.2-1.6c-0.6-0.7-1.1-1.5-1.4-2.4s-0.5-1.9-0.5-3c0-1.1,0.2-2.1,0.5-3
c0.4-0.9,0.9-1.7,1.5-2.4c0.6-0.7,1.4-1.2,2.3-1.6c0.9-0.4,1.9-0.6,3-0.6c1.1,0,2,0.2,2.9,0.5c0.8,0.4,1.5,0.8,2.1,1.4L34.5,79
c-0.1,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.4,0.1c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.2-0.1-0.4-0.2c-0.1-0.1-0.3-0.2-0.4-0.3
c-0.2-0.1-0.4-0.2-0.6-0.3s-0.5-0.2-0.8-0.2c-0.3-0.1-0.6-0.1-1-0.1c-0.7,0-1.3,0.1-1.8,0.4c-0.5,0.2-1,0.6-1.4,1
c-0.4,0.4-0.7,1-0.9,1.6c-0.2,0.6-0.3,1.4-0.3,2.2c0,0.8,0.1,1.6,0.4,2.2c0.2,0.6,0.6,1.2,1,1.6s0.9,0.8,1.4,1
c0.5,0.2,1.1,0.4,1.8,0.4c0.4,0,0.7,0,1-0.1c0.3,0,0.6-0.1,0.8-0.2s0.5-0.2,0.7-0.3c0.2-0.1,0.5-0.3,0.7-0.5
c0.1-0.1,0.1-0.1,0.2-0.1C34,87.3,34.1,87.3,34.2,87.3z"/>
<path class="st0" d="M36.9,81.8c1.2-1.1,2.7-1.7,4.3-1.7c0.6,0,1.2,0.1,1.6,0.3c0.5,0.2,0.9,0.5,1.2,0.8c0.3,0.4,0.6,0.8,0.8,1.3
c0.2,0.5,0.3,1,0.3,1.6v6.6H44c-0.2,0-0.4,0-0.6-0.1c-0.1-0.1-0.2-0.2-0.3-0.4l-0.2-0.8c-0.3,0.2-0.5,0.4-0.8,0.6
c-0.3,0.2-0.5,0.3-0.8,0.5s-0.6,0.2-0.9,0.3c-0.3,0.1-0.7,0.1-1,0.1c-0.4,0-0.9-0.1-1.2-0.2c-0.4-0.1-0.7-0.3-1-0.5
c-0.3-0.2-0.5-0.5-0.6-0.9s-0.2-0.8-0.2-1.2c0-0.3,0-0.5,0.1-0.8c0.1-0.3,0.2-0.5,0.4-0.7c0.2-0.2,0.5-0.5,0.8-0.7
c0.3-0.2,0.7-0.4,1.2-0.6c0.5-0.2,1-0.3,1.6-0.4c0.6-0.1,1.3-0.2,2.1-0.2v-0.6c0-0.7-0.2-1.2-0.5-1.6c-0.3-0.3-0.7-0.5-1.3-0.5
c-0.4,0-0.7,0-1,0.1c-0.3,0.1-0.5,0.2-0.7,0.3c-0.2,0.1-0.4,0.2-0.6,0.3C38.5,83,38.3,83,38.1,83c-0.2,0-0.3,0-0.4-0.1
c-0.1-0.1-0.2-0.2-0.3-0.3L36.9,81.8z M42.7,86.3c-0.7,0-1.3,0.1-1.8,0.2c-0.5,0.1-0.9,0.2-1.2,0.4c-0.3,0.1-0.5,0.3-0.6,0.5
c-0.1,0.2-0.2,0.4-0.2,0.6c0,0.4,0.1,0.8,0.4,1c0.3,0.2,0.6,0.3,1,0.3c0.5,0,1-0.1,1.3-0.3c0.4-0.2,0.7-0.5,1.1-0.9V86.3z"/>
<path class="st0" d="M50.8,90.9c-0.9,0-1.6-0.3-2.1-0.8C48.3,89.7,48,88.9,48,88v-5.8h-1.1c-0.1,0-0.3,0-0.3-0.1
c-0.1-0.1-0.1-0.2-0.1-0.4v-1l1.7-0.3l0.5-2.9c0-0.1,0.1-0.2,0.2-0.3c0.1-0.1,0.2-0.1,0.4-0.1h1.3v3.3h4.4l0.5-2.9
c0-0.1,0.1-0.2,0.2-0.3c0.1-0.1,0.2-0.1,0.4-0.1h1.3v3.3h2.8v1.8h-2.8v5.7c0,0.3,0.1,0.6,0.2,0.8c0.2,0.2,0.4,0.3,0.7,0.3
c0.1,0,0.3,0,0.4-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.1-0.1,0.2-0.1c0.1,0,0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0.2,0.2
l0.8,1.2c-0.4,0.3-0.8,0.5-1.3,0.7s-1,0.2-1.5,0.2c-0.9,0-1.6-0.3-2.1-0.8c-0.5-0.5-0.7-1.2-0.7-2.1v-5.8h-4.2v5.7
c0,0.3,0.1,0.6,0.2,0.8c0.2,0.2,0.4,0.3,0.7,0.3c0.2,0,0.3,0,0.4-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.1-0.1,0.2-0.1
c0.1,0,0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0.2,0.2l0.8,1.2c-0.4,0.3-0.8,0.5-1.3,0.7C51.8,90.9,51.4,90.9,50.8,90.9z
"/>
<path class="st0" d="M64.3,75.6v15.2h-2.5V75.6H64.3z"/>
<path class="st0" d="M68.7,85.9c0,0.5,0.1,1,0.3,1.4c0.1,0.4,0.3,0.7,0.6,1c0.2,0.3,0.5,0.4,0.9,0.6c0.3,0.1,0.7,0.2,1.1,0.2
c0.4,0,0.8,0,1.1-0.1c0.3-0.1,0.6-0.2,0.8-0.3c0.2-0.1,0.4-0.2,0.6-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0.1,0.5,0.2l0.7,0.9
c-0.3,0.3-0.6,0.6-0.9,0.8c-0.3,0.2-0.7,0.4-1.1,0.5c-0.4,0.1-0.8,0.2-1.2,0.3c-0.4,0.1-0.8,0.1-1.1,0.1c-0.7,0-1.4-0.1-2-0.4
c-0.6-0.2-1.2-0.6-1.6-1.1c-0.5-0.5-0.8-1.1-1.1-1.8c-0.3-0.7-0.4-1.5-0.4-2.4c0-0.7,0.1-1.4,0.3-2c0.2-0.6,0.6-1.2,1-1.6
c0.4-0.5,1-0.8,1.6-1.1c0.6-0.3,1.3-0.4,2.1-0.4c0.7,0,1.3,0.1,1.8,0.3c0.6,0.2,1,0.5,1.4,0.9c0.4,0.4,0.7,0.9,0.9,1.5
c0.2,0.6,0.3,1.3,0.3,2c0,0.4,0,0.6-0.1,0.8c-0.1,0.1-0.2,0.2-0.5,0.2H68.7z M73.5,84.3c0-0.3,0-0.6-0.1-0.9
c-0.1-0.3-0.2-0.5-0.4-0.8c-0.2-0.2-0.4-0.4-0.7-0.5c-0.3-0.1-0.6-0.2-1-0.2c-0.7,0-1.3,0.2-1.7,0.6c-0.4,0.4-0.7,1-0.8,1.8H73.5z"
/>
</g>
<g>
<path class="st1" d="M84.8,20.5l-0.3-1.9c-0.1-0.6-0.3-1.1-0.5-1.1c-0.2,0-0.4,0.5-0.4,1.1v0.5c0,0.6-0.5,1.1-1.1,1.1H82
c0,0-0.1,0-0.1,0v1.4c0,0,0.1,0,0.1,0h1.9C84.5,21.6,84.9,21.1,84.8,20.5"/>
<path class="st1" d="M80.3,18.8h-3.1c0,0-0.1,0-0.1,0h-3.2c0,0-0.1,0-0.1,0v-0.3c0-0.6-0.2-1.1-0.4-1.1s-0.4,0.5-0.5,1.1l-0.3,1.9
c-0.1,0.6,0.3,1.1,1,1.1h1.9c0.2,0,0.4,0,0.5-0.1c-0.1,0.3-0.3,0.6-0.7,0.6h-2.7c-0.4,0-0.8-0.4-0.7-0.8l0.3-1.6
c0.1-0.4-0.3-0.8-0.7-0.8H58.2c-0.3,0-0.5,0.2-0.6,0.4L55,23.1c0,0.1,0,0.1,0,0.2l0.5,0.6c0.1,0.1,0.2,0.1,0.2,0l1.7-1.3v8.2
c0,0.4,0.3,0.7,0.7,0.7H62c0.4,0,0.7-0.3,0.7-0.7v-2.8c0-0.4,0.3-0.7,0.7-0.7h9.5c0.4,0,0.7,0.3,0.7,0.7v2.8
c0,0.4,0.3,0.7,0.7,0.7H78c0.4,0,0.7-0.3,0.7-0.7v-3.1h-2c-0.6,0-1.1-0.5-1.1-1.1v-2c0-0.4,0.2-0.7,0.5-0.9V26
c0,0.6,0.5,1.1,1.1,1.1h3.1c0.6,0,1.1-0.5,1.1-1.1v-6C81.4,19.4,80.9,18.8,80.3,18.8"/>
<g>
<g>
<path class="st1" d="M51,13.9L50.7,12c-0.1-0.7-0.3-1.1-0.6-1.1c-0.2,0-0.3,0.6-0.3,1.1v0.5c0,0.7-0.6,1.1-1.1,1.1h-0.5h-0.1v1.4
h0.1h1.9C50.7,15,51.1,14.5,51,13.9z"/>
</g>
</g>
<path class="st1" d="M46.5,12.2h-3.1c0,0,0,0-0.1,0h-3.2H40v-0.3c0-0.7-0.1-1.1-0.3-1.1s-0.5,0.5-0.6,1.1l-0.3,1.9
c-0.1,0.7,0.3,1.1,1,1.1h1.8c0.2,0,0.3,0,0.6-0.1c-0.1,0.3-0.3,0.6-0.7,0.6h-2.7c-0.5,0-0.8-0.3-0.7-0.8l0.2-1.6
c0.1-0.5-0.2-0.8-0.7-0.8H24.2c-0.3,0-0.6,0.1-0.7,0.5L21,16.5c0,0.1,0,0.1,0,0.2l0.5,0.6c0.1,0.1,0.1,0.1,0.2,0l1.7-1.4v8.2
c0,0.3,0.3,0.7,0.7,0.7h3.8c0.3,0,0.7-0.3,0.7-0.7v-2.9c0-0.3,0.3-0.7,0.7-0.7h9.6c0.3,0,0.7,0.3,0.7,0.7v2.9
c0,0.3,0.3,0.7,0.7,0.7H44c0.3,0,0.7-0.3,0.7-0.7v-3.1h-2.1c-0.7,0-1.1-0.6-1.1-1.1V18c0-0.3,0.2-0.7,0.5-0.9v2.4
c0,0.7,0.6,1.1,1.1,1.1h3.1c0.7,0,1.1-0.6,1.1-1.1v-6.2C47.6,12.8,47,12.2,46.5,12.2z"/>
</g>
<g>
<path class="st1" d="M48,13.6l-0.3-1.8c-0.1-0.6-0.3-1-0.5-1c-0.2,0-0.3,0.5-0.3,1v0.5c0,0.6-0.5,1-1,1h-0.5c0,0-0.1,0-0.1,0v1.3
c0,0,0.1,0,0.1,0h1.7C47.7,14.7,48.1,14.2,48,13.6"/>
<path class="st1" d="M43.8,12.1H41c0,0,0,0-0.1,0h-2.9c0,0-0.1,0-0.1,0v-0.3c0-0.6-0.1-1-0.3-1s-0.4,0.5-0.5,1l-0.3,1.8
c-0.1,0.6,0.3,1,0.9,1h1.7c0.2,0,0.3,0,0.5-0.1c-0.1,0.3-0.3,0.5-0.6,0.5h-2.4c-0.4,0-0.7-0.4-0.6-0.7l0.2-1.5
c0.1-0.4-0.2-0.7-0.6-0.7H23.9c-0.3,0-0.5,0.2-0.6,0.4L21,16c0,0.1,0,0.1,0,0.2l0.4,0.5c0.1,0.1,0.2,0.1,0.2,0l1.5-1.2v7.4
c0,0.4,0.3,0.6,0.6,0.6h3.4c0.4,0,0.6-0.3,0.6-0.6v-2.6c0-0.4,0.3-0.6,0.6-0.6h8.5c0.4,0,0.6,0.3,0.6,0.6v2.6
c0,0.4,0.3,0.6,0.6,0.6h3.4c0.4,0,0.6-0.3,0.6-0.6v-2.8h-1.8c-0.6,0-1-0.5-1-1v-1.8c0-0.3,0.2-0.6,0.4-0.8v2.1c0,0.6,0.5,1,1,1
h2.8c0.6,0,1-0.5,1-1v-5.4C44.9,12.6,44.4,12.1,43.8,12.1"/>
</g>
<rect x="33" y="50" class="st0" width="34" height="3"/>
<rect x="33" y="56" class="st0" width="34" height="3"/>
<rect x="33" y="62" class="st0" width="34" height="3"/>
<rect x="32" y="48" class="st0" width="2" height="20"/>
<rect x="49" y="48" class="st0" width="2" height="20"/>
<rect x="66" y="48" class="st0" width="2" height="20"/>
<polygon class="st0" points="10,46.4 32,53 32,49.9 10,43.3 "/>
<polygon class="st0" points="10,52.6 32,59.1 32,56.1 10,49.5 "/>
<polygon class="st0" points="10,58.8 32,65.3 32,62.3 10,55.7 "/>
<rect x="19" y="45" class="st0" width="2" height="20"/>
<polygon class="st0" points="90,46.4 68,53 68,50 90,43.4 "/>
<polygon class="st0" points="90,52.6 68,59.2 68,56.2 90,49.6 "/>
<polygon class="st0" points="89.5,58.8 67.5,65.4 67.5,62.3 89.5,55.8 "/>
<rect x="79" y="45" class="st0" width="2" height="20"/>
<rect x="89" y="42" class="st0" width="2" height="20"/>
<g>
<path class="st6" d="M34.4,87.4c0.1,0,0.3,0.1,0.4,0.2l1.1,1.2c-0.6,0.7-1.3,1.3-2.2,1.7S31.8,91,30.6,91c-1.1,0-2-0.2-2.9-0.5
c-0.9-0.4-1.6-0.9-2.2-1.5c-0.6-0.7-1.1-1.4-1.4-2.3c-0.3-0.9-0.5-1.9-0.5-3c0-1.1,0.2-2.1,0.5-3s0.8-1.7,1.5-2.3s1.4-1.2,2.3-1.5
s1.8-0.5,2.9-0.5c1.1,0,2,0.2,2.8,0.5s1.5,0.8,2.1,1.4l-0.9,1.2c-0.1,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.1
c-0.1,0-0.2,0-0.3-0.1s-0.2-0.1-0.3-0.2c-0.1-0.1-0.3-0.2-0.4-0.3c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.5-0.2-0.8-0.2
s-0.6-0.1-1-0.1c-0.6,0-1.2,0.1-1.8,0.3c-0.5,0.2-1,0.6-1.4,1c-0.4,0.4-0.7,1-0.9,1.6c-0.2,0.6-0.3,1.3-0.3,2.2
c0,0.8,0.1,1.5,0.3,2.2c0.2,0.6,0.5,1.2,0.9,1.6s0.9,0.8,1.4,1c0.5,0.2,1.1,0.3,1.7,0.3c0.4,0,0.7,0,1-0.1c0.3,0,0.6-0.1,0.8-0.2
s0.5-0.2,0.7-0.3c0.2-0.1,0.4-0.3,0.7-0.5c0.1-0.1,0.1-0.1,0.2-0.1C34.2,87.5,34.3,87.4,34.4,87.4z"/>
<path class="st6" d="M41.6,80.4c0.8,0,1.5,0.1,2.1,0.4c0.6,0.2,1.2,0.6,1.6,1s0.8,1,1,1.7s0.4,1.4,0.4,2.2c0,0.8-0.1,1.5-0.4,2.2
s-0.6,1.2-1,1.7s-1,0.8-1.6,1.1c-0.6,0.2-1.3,0.4-2.1,0.4c-0.8,0-1.5-0.1-2.1-0.4c-0.6-0.2-1.2-0.6-1.6-1.1c-0.4-0.5-0.8-1-1-1.7
s-0.4-1.4-0.4-2.2c0-0.8,0.1-1.5,0.4-2.2s0.6-1.2,1-1.7c0.4-0.5,1-0.8,1.6-1C40.2,80.6,40.9,80.4,41.6,80.4z M41.6,89.1
c0.9,0,1.5-0.3,1.9-0.9c0.4-0.6,0.6-1.4,0.6-2.5s-0.2-2-0.6-2.5s-1-0.9-1.9-0.9c-0.9,0-1.5,0.3-1.9,0.9c-0.4,0.6-0.6,1.4-0.6,2.5
c0,1.1,0.2,1.9,0.6,2.5C40.1,88.8,40.8,89.1,41.6,89.1z"/>
<path class="st6" d="M50.9,82.4c0.3-0.6,0.7-1.1,1.1-1.4c0.4-0.4,1-0.5,1.6-0.5c0.5,0,0.9,0.1,1.1,0.3l-0.2,1.8
c0,0.1-0.1,0.2-0.1,0.3s-0.1,0.1-0.3,0.1c-0.1,0-0.2,0-0.4,0c-0.2,0-0.4,0-0.6,0c-0.3,0-0.5,0-0.7,0.1c-0.2,0.1-0.4,0.2-0.6,0.3
c-0.2,0.1-0.3,0.3-0.5,0.5c-0.1,0.2-0.3,0.5-0.4,0.7v6.3h-2.5V80.6H50c0.3,0,0.4,0,0.5,0.1c0.1,0.1,0.2,0.3,0.2,0.5L50.9,82.4z"/>
<path class="st6" d="M58.4,82.4c0.3-0.6,0.7-1.1,1.1-1.4c0.4-0.4,1-0.5,1.6-0.5c0.5,0,0.9,0.1,1.1,0.3l-0.2,1.8
c0,0.1-0.1,0.2-0.1,0.3s-0.1,0.1-0.3,0.1c-0.1,0-0.2,0-0.4,0c-0.2,0-0.4,0-0.6,0c-0.3,0-0.5,0-0.7,0.1c-0.2,0.1-0.4,0.2-0.6,0.3
c-0.2,0.1-0.3,0.3-0.5,0.5c-0.1,0.2-0.3,0.5-0.4,0.7v6.3H56V80.6h1.5c0.3,0,0.4,0,0.5,0.1c0.1,0.1,0.2,0.3,0.2,0.5L58.4,82.4z"/>
<path class="st6" d="M63.1,82c1.2-1.1,2.6-1.6,4.3-1.6c0.6,0,1.1,0.1,1.6,0.3c0.5,0.2,0.9,0.5,1.2,0.8c0.3,0.3,0.6,0.8,0.7,1.3
s0.3,1,0.3,1.6v6.5h-1.1c-0.2,0-0.4,0-0.5-0.1c-0.1-0.1-0.2-0.2-0.3-0.4L69,89.6c-0.3,0.2-0.5,0.4-0.8,0.6
c-0.2,0.2-0.5,0.3-0.8,0.4s-0.6,0.2-0.9,0.3C66.3,91,66,91,65.6,91c-0.4,0-0.8-0.1-1.2-0.2c-0.4-0.1-0.7-0.3-1-0.5
s-0.5-0.5-0.6-0.9s-0.2-0.8-0.2-1.2c0-0.3,0-0.5,0.1-0.8c0.1-0.3,0.2-0.5,0.4-0.7s0.5-0.5,0.8-0.7c0.3-0.2,0.7-0.4,1.2-0.5
s1-0.3,1.6-0.4C67.3,85,68,85,68.8,85v-0.6c0-0.7-0.1-1.2-0.4-1.5c-0.3-0.3-0.7-0.5-1.3-0.5c-0.4,0-0.7,0-1,0.1
c-0.3,0.1-0.5,0.2-0.7,0.3S65,83,64.9,83.1c-0.2,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.4-0.1c-0.1-0.1-0.2-0.2-0.3-0.3L63.1,82z
M68.8,86.5c-0.7,0-1.3,0.1-1.8,0.2s-0.9,0.2-1.2,0.3c-0.3,0.1-0.5,0.3-0.6,0.5c-0.1,0.2-0.2,0.4-0.2,0.6c0,0.4,0.1,0.7,0.4,0.9
c0.3,0.2,0.6,0.3,1,0.3c0.5,0,0.9-0.1,1.3-0.3c0.4-0.2,0.7-0.5,1.1-0.8V86.5z"/>
<path class="st6" d="M76,76v14.9h-2.5V76H76z"/>
<g>
<path class="st1" d="M84.8,21L84.5,19c-0.1-0.7-0.3-1.1-0.6-1.1c-0.2,0-0.3,0.6-0.3,1.1v0.5c0,0.7-0.6,1.1-1.1,1.1H82h-0.1V22H82
h1.9C84.5,22.1,85,21.5,84.8,21z"/>
</g>
</g>
<g id="Layer_3">
<path class="st1" d="M80.3,19.3h-3.1c0,0,0,0-0.1,0h-3.2h-0.1v-0.3c0-0.7-0.1-1.1-0.3-1.1s-0.5,0.5-0.6,1.1l-0.3,1.9
c-0.1,0.7,0.3,1.1,1,1.1h1.8c0.2,0,0.3,0,0.6-0.1c-0.1,0.3-0.3,0.6-0.7,0.6h-2.7c-0.5,0-0.8-0.3-0.7-0.8l0.2-1.6
c0.1-0.5-0.2-0.8-0.7-0.8H58c-0.3,0-0.6,0.1-0.7,0.5l-2.5,3.9c0,0.1,0,0.1,0,0.2l0.5,0.6c0.1,0.1,0.1,0.1,0.2,0l1.7-1.4v8.2
c0,0.3,0.3,0.7,0.7,0.7h3.8c0.3,0,0.7-0.3,0.7-0.7v-2.9c0-0.3,0.3-0.7,0.7-0.7h9.6c0.3,0,0.7,0.3,0.7,0.7v2.9
c0,0.3,0.3,0.7,0.7,0.7h3.8c0.3,0,0.7-0.3,0.7-0.7v-3.1h-2.1c-0.7,0-1.1-0.6-1.1-1.1v-1.9c0-0.3,0.2-0.7,0.5-0.9v2.4
c0,0.7,0.6,1.1,1.1,1.1h3.1c0.7,0,1.1-0.6,1.1-1.1v-6.2C81.4,19.8,80.8,19.3,80.3,19.3z"/>
</g>
<g>
<g>
<g>
<path class="st1" d="M73.5,39.1L73,36.3c-0.2-1-0.5-1.6-0.8-1.6c-0.3,0-0.5,0.8-0.5,1.6V37c0,1-0.8,1.6-1.6,1.6h-0.7h-0.2v2h0.2
h2.8C73,40.7,73.7,39.9,73.5,39.1z"/>
</g>
</g>
<path class="st1" d="M67,36.7h-4.4c0,0,0,0-0.2,0h-4.6h-0.2v-0.5c0-1-0.2-1.6-0.5-1.6s-0.7,0.7-0.8,1.6l-0.5,2.8
c-0.2,1,0.5,1.6,1.5,1.6H60c0.3,0,0.5,0,0.8-0.2c-0.2,0.5-0.5,0.8-1,0.8h-3.9c-0.7,0-1.1-0.5-1-1.1l0.3-2.3c0.2-0.7-0.3-1.1-1-1.1
H35.2c-0.5,0-0.8,0.2-1,0.7l-3.6,5.5c0,0.2,0,0.2,0,0.3l0.7,0.8c0.2,0.2,0.2,0.2,0.3,0l2.4-2v11.7c0,0.5,0.5,1,1,1h5.4
c0.5,0,1-0.5,1-1v-4.1c0-0.5,0.5-1,1-1h13.7c0.5,0,1,0.5,1,1v4.1c0,0.5,0.5,1,1,1h5.4c0.5,0,1-0.5,1-1v-4.4h-2.9
c-1,0-1.6-0.8-1.6-1.6V45c0-0.5,0.3-1,0.7-1.3v3.4c0,1,0.8,1.6,1.6,1.6h4.4c1,0,1.6-0.8,1.6-1.6v-8.8C68.6,37.5,67.8,36.7,67,36.7z
"/>
</g>
<rect x="33.1" y="49.8" class="st8" width="33.9" height="3.1"/>
<rect x="33.1" y="56" class="st8" width="33.9" height="3.1"/>
<rect x="33.1" y="62.2" class="st8" width="33.9" height="3.1"/>
<rect x="32" y="48.1" class="st8" width="1.5" height="19.8"/>
<rect x="49.3" y="48.1" class="st8" width="1.5" height="19.8"/>
<rect x="66.6" y="48.1" class="st8" width="1.5" height="19.8"/>
<polygon class="st8" points="10.4,46.4 32.1,53 32.1,49.9 10.4,43.3 "/>
<polygon class="st8" points="10.4,52.6 32.1,59.1 32.1,56.1 10.4,49.5 "/>
<polygon class="st8" points="10.4,58.8 32.1,65.3 32.1,62.3 10.4,55.7 "/>
<rect x="19.2" y="44.8" class="st8" width="1.5" height="19.8"/>
<rect x="9.7" y="42.4" class="st8" width="1.5" height="19.8"/>
<polygon class="st8" points="89.8,46.4 68.1,53 68.1,50 89.8,43.4 "/>
<polygon class="st8" points="89.8,52.6 68.1,59.2 68.1,56.2 89.8,49.6 "/>
<polygon class="st8" points="89.8,58.8 68.1,65.4 68.1,62.3 89.8,55.8 "/>
<rect x="79.5" y="44.9" class="st8" width="1.5" height="19.8"/>
<rect x="89.1" y="42.4" class="st8" width="1.5" height="19.8"/>
</svg>

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB