Skip to content

Commit 1430798

Browse files
committed
new container
1 parent d796246 commit 1430798

File tree

8 files changed

+82
-10
lines changed

8 files changed

+82
-10
lines changed

clusters/templates/clusters/container_detail.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ <h4 class="mb-4">{{container_data.name}}</h4>
7474
<li>ports: {{ container_data.ports }}</li>
7575
<li>short_id: {{ container_data.short_id }}</li>
7676
<li>commit: {{ container_data.commit }}</li>
77-
<li>client: {{ container_data.client }}</li>
77+
<li>Finished at: {{ finished_at }}</li>
7878
</ul>
7979

8080
<script>

clusters/templates/clusters/containers.html

+7-3
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
<div class="d-flex align-items-center justify-content-between">
2121
<div class="ms-2">
2222
<i class="bi bi-ubuntu"></i>
23-
24-
2523
<a href="{% url 'container_detail' container.short_id %}">
2624
<span class="">{{container.name}}</span>
2725
</a>
@@ -46,15 +44,21 @@
4644
<div class="card p-3 h-100 p-4">
4745
{% if request.resolver_match.url_name == "container_detail" %}
4846
{% include 'clusters/container_detail.html' %}
47+
{% elif request.resolver_match.url_name == "new_container" %}
48+
{% include 'clusters/new_container.html' %}
4949
{% else %}
5050
<h4 class="mb-4">Containers</h4>
5151

5252
<div class="btn-toolbar">
53-
<a href="{% url 'create_container' %}" class="btn btn-primary">Create container</a>
53+
<a href="{% url 'new_container' %}" class="btn btn-primary">New container</a>
5454
</div>
5555
{% endif %}
5656
</div>
5757
</div>
58+
59+
<div class="col-12 mt-3 w-50 m-auto">
60+
{% include 'flash_message.html' %}
61+
</div>
5862
</div>
5963
</div>
6064

clusters/templates/clusters/create_container.html

-1
This file was deleted.

clusters/templates/clusters/images.html

-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
<a href="{% url 'remove_image' image.short_id %}" class="btn btn-light"><i class="bi bi-trash-fill text-danger"></i></a>
2525
</div>
2626
</div>
27-
28-
2927
{% endfor %}
3028
</div>
3129
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<a href="{% url 'containers' %}" class="link-underline link-underline-opacity-0 mb-3"><i class="bi bi-caret-left-fill"></i> Containers</a>
2+
3+
4+
<form action="{% url 'create_container' %}" method="post">
5+
{% csrf_token %}
6+
<div class="form-group">
7+
<label for="image_name">Image name</label>
8+
<input type="text" id="image_name" name="image_name" class="form-control mt-1" placeholder="ubuntu:latest">
9+
10+
<label for="command" class="mt-3">Command</label>
11+
<input type="text" id="command" name="command" class="form-control mt-1" placeholder="/bin/bash">
12+
13+
<label for="kwargs" class="mt-3">Key arguments (kwargs):</label>
14+
<input type="text" id="kwargs" name="kwargs" class="form-control mt-1" placeholder="kwargs">
15+
</div>
16+
17+
<div class="float-end mt-3">
18+
<button type="submit" class="btn btn-primary">Create</button>
19+
</div>
20+
</form>

clusters/urls.py

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
path("images/detail/<str:image_id>", views.image_detail, name="image_detail"),
1111
path("images/remove/<str:image_id>/", views.remove_image, name="remove_image"),
1212
path("containers/", views.containers, name="containers"),
13+
path("containers/new/", views.new_container, name="new_container"),
1314
path("containers/create/", views.create_container, name="create_container"),
1415
path("containers/start_container/<str:container_id>", views.start_container, name="start_container"),
1516
path("containers/stop_container/<str:container_id>", views.stop_container, name="stop_container"),

clusters/views.py

+52-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def start_container(request, container_id):
9999
return redirect('containers')
100100

101101
@login_required
102-
def create_container(request):
102+
def new_container(request):
103103
try:
104104
with docker_client() as client:
105105
containers = client.containers.list(all=True)
@@ -112,6 +112,18 @@ def create_container(request):
112112
}
113113
)
114114

115+
def create_container(request):
116+
try:
117+
with docker_client() as client:
118+
client.containers.run(request.POST['image_name'], request.POST['command'], detach=True)
119+
# client.containers.run(request.POST['image_name'], request.POST['command'], request.POST['kwargs'])
120+
except:
121+
messages.add_message(request, messages.ERROR, 'The request could not be processed')
122+
return redirect('containers')
123+
124+
messages.add_message(request, messages.SUCCESS, 'Container successfully created')
125+
return redirect('containers')
126+
115127
@login_required
116128
def stop_container(request, container_id):
117129
with docker_client() as client:
@@ -140,10 +152,15 @@ def container_detail(request, container_id):
140152
return redirect('docker_not_running')
141153

142154
with get_container(container_id) as container_data:
155+
finished_at_date = container_data.attrs['State']['FinishedAt'][:10]
156+
finished_at_time = container_data.attrs['State']['FinishedAt'][11:19]
157+
finished_at = calculate_time_difference(finished_at_date, finished_at_time)
158+
143159
return render(request, 'clusters/containers.html', {
144160
'request': request,
145161
'containers': containers,
146162
'container_data': container_data,
163+
'finished_at': finished_at
147164
}
148165
)
149166

@@ -212,7 +229,12 @@ def signin(request):
212229

213230
@login_required
214231
def docker_not_running(request):
215-
return render(request, 'clusters/docker_not_running.html', {'request': request})
232+
try:
233+
with docker_client() as client:
234+
client.ping()
235+
return redirect('index')
236+
except:
237+
return render(request, 'clusters/docker_not_running.html', {'request': request})
216238

217239
@contextmanager
218240
def docker_client():
@@ -230,3 +252,31 @@ def get_container(container_id):
230252
client = docker.from_env()
231253
container = client.containers.get(container_id)
232254
yield container
255+
256+
from datetime import datetime
257+
258+
def calculate_time_difference(date, time):
259+
# Convert the date and time string to a datetime object
260+
datetime_input = datetime.strptime(f'{date} {time}', '%Y-%m-%d %H:%M:%S')
261+
262+
# Get the current date and time
263+
now = datetime.now()
264+
265+
# Calculate the time difference
266+
time_difference = now - datetime_input
267+
268+
# Calculate days, hours, and minutes
269+
days = time_difference.days
270+
hours, seconds = divmod(time_difference.seconds, 3600)
271+
minutes, _ = divmod(seconds, 60)
272+
273+
# Determine how to display the time difference
274+
if days > 0:
275+
result = f'{days} days ago'
276+
elif hours > 0:
277+
result = f'{hours} hours ago'
278+
else:
279+
result = f'{minutes} minutes ago'
280+
281+
return result
282+

templates/navbar.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</a>
88
</li>
99
<li class="nav-item">
10-
<a class="nav-link mx-1 {% if request.resolver_match.url_name == 'containers' or request.resolver_match.url_name == 'container_detail' or request.resolver_match.url_name == 'create_container' %}active{% endif %}" href="{% url 'containers' %}">
10+
<a class="nav-link mx-1 {% if request.resolver_match.url_name == 'containers' or request.resolver_match.url_name == 'container_detail' or request.resolver_match.url_name == 'new_container' %}active{% endif %}" href="{% url 'containers' %}">
1111
<i class="bi bi-box me-1"></i>
1212
Containers
1313
</a>

0 commit comments

Comments
 (0)