Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
zoe
main
Commits
f03a4fb5
Commit
f03a4fb5
authored
Oct 10, 2017
by
Daniele Venzano
Browse files
Implement labels and fix several bugs
parent
fe3120c9
Pipeline
#4582
passed with stages
in 2 minutes and 44 seconds
Changes
9
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
schemas/app_description_schema.json
View file @
f03a4fb5
...
...
@@ -145,10 +145,18 @@
},
"work_dir"
:
{
"type"
:
"string"
,
"minLength"
:
1
},
"labels"
:
{
"type"
:
"array"
,
"items"
:
{
"type"
:
"string"
},
"minItems"
:
0
,
"uniqueItems"
:
true
}
},
"additionalProperties"
:
false
,
"required"
:
[
"name"
,
"image"
,
"ports"
,
"environment"
,
"volumes"
,
"monitor"
,
"startup_order"
,
"essential_count"
,
"total_count"
,
"resources"
,
"command"
,
"replicas"
]
"required"
:
[
"name"
,
"image"
,
"ports"
,
"environment"
,
"volumes"
,
"monitor"
,
"startup_order"
,
"essential_count"
,
"total_count"
,
"resources"
,
"command"
]
},
"port"
:
{
"type"
:
"object"
,
...
...
zoe_api/web/templates/status.html
View file @
f03a4fb5
...
...
@@ -108,6 +108,15 @@
{% endif %}
</div>
<div
class=
"container_count"
>
{{ node['container_count'] }} containers
</div>
{% if node['labels']|length > 0 %}
<div
class=
"container_count"
>
Labels:
{% for label in node['labels'] %}
{{ label }}
{% endfor %}
</div>
{% else %}
<div
class=
"container_count"
>
No labels
</div>
{% endif %}
<div
class=
"plot-container"
>
<p>
Memory
</p>
...
...
zoe_lib/state/service.py
View file @
f03a4fb5
...
...
@@ -160,9 +160,9 @@ class Service:
self
.
volumes
=
[
VolumeDescriptionHostPath
(
v
[
0
],
v
[
1
],
v
[
2
])
for
v
in
self
.
description
[
'volumes'
]]
try
:
self
.
replica
s
=
self
.
description
[
'
replica
s'
]
self
.
label
s
=
self
.
description
[
'
label
s'
]
except
KeyError
:
self
.
replica
s
=
0
self
.
label
s
=
[]
def
serialize
(
self
):
"""Generates a dictionary that can be serialized in JSON."""
...
...
zoe_master/backends/docker/config.py
View file @
f03a4fb5
...
...
@@ -32,7 +32,7 @@ class DockerHostConfig:
self
.
tls_cert
=
None
self
.
tls_key
=
None
self
.
tls_ca
=
None
self
.
labels
=
[]
self
.
labels
=
set
()
class
DockerConfig
:
...
...
@@ -61,7 +61,7 @@ class DockerConfig:
continue
if
'labels'
in
config
[
section
]:
# labels are optional
host
.
labels
=
config
[
section
][
'labels'
].
split
(
','
)
host
.
labels
=
set
(
config
[
section
][
'labels'
].
split
(
','
)
)
hosts
.
append
(
host
)
if
len
(
hosts
)
==
0
:
...
...
zoe_master/backends/docker/threads.py
View file @
f03a4fb5
...
...
@@ -112,7 +112,8 @@ class DockerStateSynchronizer(threading.Thread):
node_stats
.
container_count
=
info
[
'Containers'
]
node_stats
.
cores_total
=
info
[
'NCPU'
]
node_stats
.
memory_total
=
info
[
'MemTotal'
]
node_stats
.
labels
+=
info
[
'Labels'
]
if
info
[
'Labels'
]
is
not
None
:
node_stats
.
labels
+=
set
(
info
[
'Labels'
])
stats
=
{}
for
cont
in
container_list
:
...
...
zoe_master/backends/kubernetes/api_client.py
View file @
f03a4fb5
...
...
@@ -242,7 +242,7 @@ class KubernetesClient:
config
.
set_labels
(
ZOE_LABELS
)
config
.
set_labels
({
'service_name'
:
service_instance
.
name
})
config
.
set_replicas
(
service_instance
.
replicas_count
)
config
.
set_replicas
(
1
)
config
.
set_spec_selector
(
ZOE_LABELS
)
config
.
set_spec_selector
({
'service_name'
:
service_instance
.
name
})
...
...
zoe_master/backends/service_instance.py
View file @
f03a4fb5
...
...
@@ -69,5 +69,3 @@ class ServiceInstance:
self
.
ports
=
[]
for
port
in
service
.
ports
:
self
.
ports
.
append
(
BackendPort
(
port
.
internal_number
,
port
.
protocol
))
self
.
replicas_count
=
service
.
replicas
zoe_master/scheduler/simulated_platform.py
View file @
f03a4fb5
...
...
@@ -26,14 +26,16 @@ class SimulatedNode:
def
service_fits
(
self
,
service
:
Service
)
->
bool
:
"""Checks whether a service can fit in this node"""
return
service
.
resource_reservation
.
memory
.
min
<
self
.
node_free_memory
()
and
service
.
resource_reservation
.
cores
.
min
<=
self
.
node_free_cores
()
return
set
(
service
.
labels
).
issubset
(
self
.
labels
)
and
service
.
resource_reservation
.
memory
.
min
<
self
.
node_free_memory
()
and
service
.
resource_reservation
.
cores
.
min
<=
self
.
node_free_cores
()
def
service_why_unfit
(
self
,
service
)
->
str
:
"""Generate an explanation of why the service does not fit this node."""
if
service
.
resource_reservation
.
memory
.
min
<
self
.
node_free_memory
():
if
service
.
resource_reservation
.
memory
.
min
>=
self
.
node_free_memory
():
return
'needs {} bytes of memory'
.
format
(
self
.
node_free_memory
()
-
service
.
resource_reservation
.
memory
.
min
)
elif
service
.
resource_reservation
.
cores
.
min
<=
self
.
node_free_cores
():
elif
service
.
resource_reservation
.
cores
.
min
>
self
.
node_free_cores
():
return
'needs {} more cores'
.
format
(
self
.
node_free_cores
()
-
service
.
resource_reservation
.
cores
.
min
)
elif
not
set
(
service
.
labels
).
issubset
(
self
.
labels
):
return
'service required labels {} to be defined on the node'
.
format
(
service
.
labels
)
def
service_add
(
self
,
service
):
"""Add a service in this node."""
...
...
zoe_master/stats.py
View file @
f03a4fb5
...
...
@@ -55,7 +55,7 @@ class NodeStats(Stats):
'memory_total'
:
self
.
memory_total
,
'memory_reserved'
:
self
.
memory_reserved
,
'memory_in_use'
:
self
.
memory_in_use
,
'labels'
:
self
.
labels
,
'labels'
:
list
(
self
.
labels
)
,
'status'
:
self
.
status
,
'error'
:
self
.
error
,
'services'
:
[]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment