Projects

Astakos allows users to create projects. Through a project, one can ask for additional resources on the virtual infrastructure for a certain amount of time. All users admitted to the project gain access to these resources.

Retrieve List of Projects

GET /account/v1.0/projects

Returns all accessible projects. See below.

Request Header Name Value
X-Auth-Token User authentication token

The request can include the following filters as GET parameters: state, owner, name.

It also supports parameter mode with possible values: member, default. The former restricts the result to active projects where the request user is an active member. By default it returns all accessible projects; see below.

Example Request:

GET /account/v1.0/projects?state=active&owner=uuid

Response Codes:

Status Description
200 Success
400 Bad Request
401 Unauthorized (Missing token)
500 Internal Server Error

Example Successful Response:

List of project details. See below.

Retrieve a Project

GET /account/v1.0/projects/<proj_id>

Request Header Name Value
X-Auth-Token User authentication token

A project is accessible when the request user is admin, project owner, applicant or member, or the project is active.

Response Codes:

Status Description
200 Success
401 Unauthorized (Missing token)
403 Forbidden
404 Not Found
500 Internal Server Error

Example Successful Response:

{
    "id": proj_id,
    "state": "uninitialized" | "active" | "suspended" | "terminated" | "deleted",
    "creation_date": "2013-06-26T11:48:06.579100+00:00",
    "name": "name",
    "owner": uuid,
    "homepage": homepage,
    "description": description,
    "end_date": date,
    "join_policy": "auto" | "moderated" | "closed",
    "leave_policy": "auto" | "moderated" | "closed",
    "max_members": int,
    "private": boolean,
    "system_project": boolean,
    "resources": {"cyclades.vm": {"project_capacity": int,
                                  "member_capacity": int
                                 }
                 }
    "last_application": last application or null,
    "deactivation_date": date  # if applicable
}

Create a Project

POST /account/v1.0/projects

Request Header Name Value
X-Auth-Token User authentication token

Example Request:

{
    "name": name,
    "owner": uuid,  # if omitted, request user assumed
    "homepage": homepage,  # optional
    "description": description,  # optional
    "comments": comments,  # optional
    "start_date": date,  # optional
    "end_date": date,
    "join_policy": "auto" | "moderated" | "closed",  # default: "moderated"
    "leave_policy": "auto" | "moderated" | "closed",  # default: "auto"
    "max_members": int, # optional
    "private": boolean, # default: false
    "resources": {"cyclades.vm": {"project_capacity": int,
                                  "member_capacity": int
                                 }
                 }
}

Response Codes:

Status Description
201 Created
400 Bad Request
401 Unauthorized (Missing token)
403 Forbidden
409 Conflict
500 Internal Server Error

Example Successful Response:

{
    "id": project_id,
    "application": application_id
}

Modify a Project

PUT /account/v1.0/projects/<proj_id>

Request Header Name Value
X-Auth-Token User authentication token

Example Request:

As above.

Response Codes:

Status Description
201 Created
400 Bad Request
401 Unauthorized (Missing token)
403 Forbidden
404 Not Found
409 Conflict
500 Internal Server Error

Example Successful Response:

As above.

Take Action on a Project

POST /account/v1.0/projects/<proj_id>/action

Request Header Name Value
X-Auth-Token User authentication token

Example Request:

{
    <action>: {"reason": reason,
               "app_id": app_id  # only for app related actions
              }
}

<action> can be: “suspend”, “unsuspend”, “terminate”, “reinstate”, “approve”, “deny”, “dismiss”, “cancel”. The last four actions operate on the project’s last application and require its app_id.

Response Codes:

Status Description
200 Success
400 Bad Request
401 Unauthorized (Missing token)
403 Forbidden
404 Not Found
409 Conflict
500 Internal Server Error

Retrieve List of Memberships

GET /account/v1.0/projects/memberships

Request Header Name Value
X-Auth-Token User authentication token

Get all accessible memberships. Filtering by project is possible via the GET parameter project.

Response Codes:

Status Description
200 Success
400 Bad Request
401 Unauthorized (Missing token)
500 Internal Server Error

Example Successful Response

List of memberships. See below.

Retrieve a Membership

GET /account/v1.0/projects/memberships/<memb_id>

Request Header Name Value
X-Auth-Token User authentication token

A membership is accessible if the request user is admin, project owner or the member.

Response Codes:

Status Description
200 Success
401 Unauthorized (Missing token)
403 Forbidden
404 Not Found
500 Internal Server Error

Example Successful Response

{
    "id": id,
    "user": uuid,
    "project": project_id,
    "state": "requested" | "accepted" | "leave_requested" | "suspended" | "rejected" | "cancelled" | "removed",
    "requested": last_request_date,
    "accepted": last_acceptance_date,
    "removed": last_removal_date,
    "allowed_actions": ["leave", "cancel", "accept", "reject", "remove"],
}

Take Action on a Membership

POST /account/v1.0/projects/memberships/<memb_id>/action

Request Header Name Value
X-Auth-Token User authentication token

Example Request

{
    <action>: "reason"
}

<action> can be one of: “leave”, “cancel”, “accept”, “reject”, “remove”

Response Codes:

Status Description
200 Success
400 Bad Request
401 Unauthorized (Missing token)
403 Forbidden
404 Not Found
409 Conflict
500 Internal Server Error

Create a Membership

POST /account/v1.0/projects/memberships

Request Header Name Value
X-Auth-Token User authentication token

Example Requests

{
    "join": {
        "project": proj_id
    }
}
{
    "enroll": {
        "project": proj_id,
        "user": "user@example.org"
    }
}

Response Codes:

Status Description
200 Success
400 Bad Request
401 Unauthorized (Missing token)
403 Forbidden
409 Conflict
500 Internal Server Error

Example Response

{
    "id": membership_id
}