projects
« Previous section Next section »
UCloud Developer Guide / Legacy / Projects (Legacy) / Projects
Projects
The projects feature allow for collaboration between different users across the entire UCloud platform.
Rationale
This project establishes the core abstractions for projects and establishes an event stream for receiving updates about changes. Other services extend the projects feature and subscribe to these changes to create the full project feature.
⚠️ WARNING: The API listed on this page will likely change to conform with our API conventions. Be careful when building integrations. The following changes are expected:
RPC names will change to conform with the conventions
RPC request and response types will change to conform with the conventions
RPCs which return a page will be collapsed into a single
browse
endpointSome property names will change to be consistent with
Resource
s
Definition
A project in UCloud is a collection of members
which is uniquely identified by an id
. All members
are users identified by their username
and have exactly one role
. A user always has exactly one role
. Each project has exactly one principal investigator (PI
). The PI
is responsible for managing the project, including adding and removing users.
Role | Notes |
---|---|
| The primary point of contact for projects. All projects have exactly one PI. |
| Administrators are allowed to perform some project management. A project can have multiple admins. |
| Has no special privileges. |
Table: The possible roles of a project, and their privileges within project management.
A project can be updated by adding/removing/changing any of its members
. Such an update will trigger a new message on the event stream.
A project is sub-divided into groups:
Each project may have 0 or more groups. The groups can have 0 or more members. A group belongs to exactly one project, and the members of a group can only be from the project it belongs to.
Creating Projects and Sub-Projects
All projects created by end-users have exactly one parent project. Only UCloud administrators can create root-level projects, that is a project without a parent. This allows users of UCloud to create a hierarchy of projects. The project hierarchy plays a significant role in accounting.
Normal users can create a project through the grant application feature.
A project can be uniquely identified by the path from the root project to the leaf-project. As a result, the title
of a project must be unique within a single project. title
s are case-insensitive.
Permissions and memberships are not hierarchical. This means that a user must be explicitly added to every project they need permissions in. UCloud administrators can always create a sub-project in any given project. A setting exists for every project which allows normal users to create sub-projects.
Example: A project hierarchy
Figure 1: A storage hierarchy
Figure 1 shows a hierarchy of projects. Note that users deep in the hierarchy are not necessarily members of the projects further up in the hierarchy. For example, being a member of "IMADA" does not imply membership of "NAT". A member of "IMADA" can be a member of "NAT" but they must be explicitly added to both projects.
None of the projects share any resources. Each individual project will have their own home directory. The administrators, or any other user, of "NAT" will not be able to read/write any files of "IMADA" unless they have explicitly been added to the "IMADA" project.
The Project Context
All requests in UCloud are executed in a particular context. The header of every request defines the context. For the HTTP backend this is done in the Project
header. The absence of a project implies that the request is executed in the personal project context, also called My Workspace on UCloud.
Figure 2: The UCloud user interface allows you to select context through a dropdown in the navigation header.
Example: Accessing the project context from a microservice
Table of Contents
Remote Procedure Calls
allowsRenaming
allowsRenaming
Request | Response | Error |
---|---|---|
allowsSubProjectRenaming
allowsSubProjectRenaming
Request | Response | Error |
---|---|---|
countSubProjects
countSubProjects
Request | Response | Error |
---|---|---|
fetchDataManagementPlan
fetchDataManagementPlan
Request | Response | Error |
---|---|---|
listFavoriteProjects
listFavoriteProjects
Request | Response | Error |
---|---|---|
listProjects
listProjects
Request | Response | Error |
---|---|---|
lookupById
lookupById
Request | Response | Error |
---|---|---|
lookupByIdBulk
lookupByIdBulk
Request | Response | Error |
---|---|---|
lookupByPath
lookupByPath
Request | Response | Error |
---|---|---|
lookupPrincipalInvestigator
lookupPrincipalInvestigator
Request | Response | Error |
---|---|---|
search
search
Request | Response | Error |
---|---|---|
viewAncestors
viewAncestors
Request | Response | Error |
---|---|---|
viewMemberInProject
viewMemberInProject
Request | Response | Error |
---|---|---|
acceptInvite
acceptInvite
Request | Response | Error |
---|---|---|
archive
archive
Request | Response | Error |
---|---|---|
archiveBulk
archiveBulk
Request | Response | Error |
---|---|---|
changeUserRole
changeUserRole
Request | Response | Error |
---|---|---|
create
create
Request | Response | Error |
---|---|---|
deleteMember
deleteMember
Request | Response | Error |
---|---|---|
exists
exists
Request | Response | Error |
---|---|---|
invite
invite
Request | Response | Error |
---|---|---|
leaveProject
leaveProject
Request | Response | Error |
---|---|---|
listIngoingInvites
listIngoingInvites
Request | Response | Error |
---|---|---|
listOutgoingInvites
listOutgoingInvites
Request | Response | Error |
---|---|---|
listSubProjects
listSubProjects
Request | Response | Error |
---|---|---|
rejectInvite
rejectInvite
Request | Response | Error |
---|---|---|
rename
rename
Request | Response | Error |
---|---|---|
toggleRenaming
toggleRenaming
Request | Response | Error |
---|---|---|
transferPiRole
transferPiRole
Request | Response | Error |
---|---|---|
updateDataManagementPlan
updateDataManagementPlan
Request | Response | Error |
---|---|---|
verifyMembership
verifyMembership
Request | Response | Error |
---|---|---|
viewProject
viewProject
Request | Response | Error |
---|---|---|
Data Models
IngoingInvite
IngoingInvite
MemberInProject
MemberInProject
OutgoingInvite
OutgoingInvite
Project
Project
ProjectMember
ProjectMember
ProjectRole
ProjectRole
UserProjectSummary
UserProjectSummary
AcceptInviteRequest
AcceptInviteRequest
AllowsRenamingRequest
AllowsRenamingRequest
ArchiveBulkRequest
ArchiveBulkRequest
ArchiveRequest
ArchiveRequest
ChangeUserRoleRequest
ChangeUserRoleRequest
CreateProjectRequest
CreateProjectRequest
DeleteMemberRequest
DeleteMemberRequest
ExistsRequest
ExistsRequest
InviteRequest
InviteRequest
ListFavoriteProjectsRequest
ListFavoriteProjectsRequest
ListIngoingInvitesRequest
ListIngoingInvitesRequest
ListOutgoingInvitesRequest
ListOutgoingInvitesRequest
ListProjectsRequest
ListProjectsRequest
ListSubProjectsRequest
ListSubProjectsRequest
The base type for requesting paginated content.
Paginated content can be requested with one of the following consistency
guarantees, this greatly changes the semantics of the call:
Consistency | Description |
---|---|
| Consistency is preferred but not required. An inconsistent snapshot might be returned. |
| Consistency is required. A request will fail if consistency is no longer guaranteed. |
The consistency
refers to if collecting all the results via the pagination API are consistent. We consider the results to be consistent if it contains a complete view at some point in time. In practice this means that the results must contain all the items, in the correct order and without duplicates.
If you use the PREFER
consistency then you may receive in-complete results that might appear out-of-order and can contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly consistent.
The results might become inconsistent if the client either takes too long, or a service instance goes down while fetching the results. UCloud attempts to keep each next
token alive for at least one minute before invalidating it. This does not mean that a client must collect all results within a minute but rather that they must fetch the next page within a minute of the last page. If this is not feasible and consistency is not required then PREFER
should be used.
📝 NOTE: Services are allowed to ignore extra criteria of the request if the next
token is supplied. This is needed in order to provide a consistent view of the results. Clients should provide the same criterion as they paginate through the results.
LookupByIdBulkRequest
LookupByIdBulkRequest
LookupByIdRequest
LookupByIdRequest
LookupByTitleRequest
LookupByTitleRequest
ProjectSearchByPathRequest
ProjectSearchByPathRequest
The base type for requesting paginated content.
Paginated content can be requested with one of the following consistency
guarantees, this greatly changes the semantics of the call:
Consistency | Description |
---|---|
| Consistency is preferred but not required. An inconsistent snapshot might be returned. |
| Consistency is required. A request will fail if consistency is no longer guaranteed. |
The consistency
refers to if collecting all the results via the pagination API are consistent. We consider the results to be consistent if it contains a complete view at some point in time. In practice this means that the results must contain all the items, in the correct order and without duplicates.
If you use the PREFER
consistency then you may receive in-complete results that might appear out-of-order and can contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly consistent.
The results might become inconsistent if the client either takes too long, or a service instance goes down while fetching the results. UCloud attempts to keep each next
token alive for at least one minute before invalidating it. This does not mean that a client must collect all results within a minute but rather that they must fetch the next page within a minute of the last page. If this is not feasible and consistency is not required then PREFER
should be used.
📝 NOTE: Services are allowed to ignore extra criteria of the request if the next
token is supplied. This is needed in order to provide a consistent view of the results. Clients should provide the same criterion as they paginate through the results.
RejectInviteRequest
RejectInviteRequest
RenameProjectRequest
RenameProjectRequest
ToggleRenamingRequest
ToggleRenamingRequest
TransferPiRoleRequest
TransferPiRoleRequest
UpdateDataManagementPlanRequest
UpdateDataManagementPlanRequest
ViewMemberInProjectRequest
ViewMemberInProjectRequest
ViewProjectRequest
ViewProjectRequest
AllowsRenamingResponse
AllowsRenamingResponse
ExistsResponse
ExistsResponse
FetchDataManagementPlanResponse
FetchDataManagementPlanResponse
LookupPrincipalInvestigatorResponse
LookupPrincipalInvestigatorResponse
ViewMemberInProjectResponse
ViewMemberInProjectResponse
Last updated