mogan-specs/specs/pike/approved/server-group-api-extension.rst

4.5 KiB

Server Group

https://blueprints.launchpad.net/mogan/+spec/server-group-api-extension

This spec proposes adding server group support to mogan. It's quite like nova's server groups, but nova only support host based affinity or anti-affinity, which is not fit for bare metals.

Problem description

Currently, it is not possible to schedule some servers to the same or different location or group like what nova server group does for virtual machines.

Use Cases

  • As a tenant, I would like to schedule servers on the same group of bare metal nodes.
  • As a tenant, I would like to schedule servers on the different group of bare metal nodes.

Proposed change

We proposes to add a special aggregate metadata key affinity_zone. You may define it as failure domains(e.g., by power circuit, rack, room, etc), or whatever you want to make affinity and anity-affinity happen in such groups. All bare metals nodes are in a same affinity zone by default.

  • A new mogan.objects.ServerGroup object would be added to the object model.
  • Add a set of APIs to allow tenants manage the server groups, including create, delete, show and list APIs.
  • Allow users to specify server group when claiming servers.
  • Add logic to scheduler to check the server group plicy and members affinity relationship to filter nodes.

Alternatives

None

Data model impact

The proposed change will be adding the following fields to the server group object with their data type and default value for migrations.

Field Name Field Type Default Value
id Integer None
uuid UUID None
user_id UUID None
project_id UUID None
name String None
policies ListOfString None
members ListOfString None

REST API impact

REST API will be changed as part of this change.

  • To create a new server group, a user will:

    POST /v1/server_groups

    With a body containing the JSON description of the server group.

    JSON Schema:

    {
        "type": "object",
        "properties": {
            'name': {'type': 'string', 'minLength': 1, 'maxLength': 255},
            'policies': {
                'type': 'array',
                'items': [{
                    'type': 'string',
                    'enum': ['anti-affinity', 'affinity']}],
                'uniqueItems': True,
                'additionalItems': False,
            },
        },
        'required': ['name', 'policies'],
        'additionalProperties': False,
    }
  • To list server groups, a user will:

    GET /v1/server_groups
  • To show server group details, a user will:

    GET /v1/server_groups/{servergroup_id}
  • To delete a server group, a user will:

    DELETE /v1/server_groups/{servergroup_id}

Security impact

None

Notifications impact

None

Other end user impact

None

Performance Impact

None

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

liusheng

Other contributors:

zhenguo

Work Items

  • Add server group object with the proposed fields.
  • Add REST API to support server group management.
  • Change scheduler to consider the specified server group.
  • Allow users to specify server group when claiming servers.
  • Change CLI to support server group management.
  • Add UT and docs.

Dependencies

None

Testing

Unit Testing will be added.

Documentation Impact

Docs about server groups will be added.

References

None