Skip to content
This repository was archived by the owner on May 6, 2020. It is now read-only.

feat(api): allow app names up to 63 characters in length #1198

Merged
merged 1 commit into from
Mar 31, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions rootfs/api/migrations/0023_app_k8s_name_length.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2017-01-11 22:15
from __future__ import unicode_literals

import api.models.app
import api.models.certificate
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('api', '0022_add_private_key_validation'),
]

operations = [
migrations.AlterField(
model_name='app',
name='id',
field=models.SlugField(max_length=63, null=True, unique=True, validators=[api.models.app.validate_app_id, api.models.app.validate_reserved_names]),
),
]
6 changes: 2 additions & 4 deletions rootfs/api/models/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,12 @@

from api.models import get_session
from api.models import UuidAuditedModel, AlreadyExists, DeisException, ServiceUnavailable

from api.utils import generate_app_name, async_run
from api.models.config import Config
from api.models.domain import Domain
from api.models.release import Release
from api.models.tls import TLS
from api.models.appsettings import AppSettings

from api.utils import generate_app_name, async_run
from scheduler import KubeHTTPException, KubeException

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -69,7 +67,7 @@ class App(UuidAuditedModel):
"""

owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
id = models.SlugField(max_length=24, unique=True, null=True,
id = models.SlugField(max_length=63, unique=True, null=True,
validators=[validate_app_id,
validate_reserved_names])
structure = JSONField(default={}, blank=True, validators=[validate_app_structure])
Expand Down
15 changes: 15 additions & 0 deletions rootfs/api/tests/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,21 @@ def test_app(self, mock_requests):
response = self.client.delete(url)
self.assertEqual(response.status_code, 204, response.data)

def test_app_name_length(self, mock_requests):
"""
Test that the app name length cannot be longer than the maximum length dictated by
Kubernetes' maximum service name length.
"""
name = 'a' * 64
body = {'id': name}
response = self.client.post('/v2/apps', body)
print(response)
self.assertEqual(
response.data,
{'id': ['Ensure this field has no more than 63 characters.']}
)
self.assertEqual(response.status_code, 400)

def test_response_data(self, mock_requests):
"""Test that the serialized response contains only relevant data."""
body = {'id': 'app-{}'.format(random.randrange(1000, 10000))}
Expand Down