How to create and configure projects¶
You can configure projects at creation time or later. However, note that it is not possible to modify the features that are enabled for a project when the project contains instances.
Create a project¶
To create a project, use the lxc project create
command.
You can specify configuration options by using the --config
flag.
See Project configuration for the available configuration options.
For example, to create a project called my-project
that isolates instances, but allows access to the default project’s images and profiles, enter the following command:
lxc project create my-project --config features.images=false --config features.profiles=false
To create a project called my-restricted-project
that blocks access to security-sensitive features (for example, container nesting) but allows snapshots, enter the following command:
lxc project create my-restricted-project --config restricted=true --config restricted.snapshots=allow
To create a project, send a POST request to the /1.0/projects
endpoint.
You can specify configuration options under the "config"
field.
See Project configuration for the available configuration options.
For example, to create a project called my-project
that isolates instances, but allows access to the default project’s images and profiles, send the following request:
lxc query --request POST /1.0/projects --data '{
"config": {
"features.images": "false",
"features.profiles": "false"
},
"name": "my-project"
}'
To create a project called my-restricted-project
that blocks access to security-sensitive features (for example, container nesting) but allows snapshots, send the following request:
lxc query --request POST /1.0/projects --data '{
"config": {
"restricted": "true",
"restricted.snapshots": "allow"
},
"name": "my-restricted-project"
}'
See POST /1.0/projects
for more information.
To create a project, expand the Project drop-down and select + Create project at the bottom.
Enter a name and optionally a description for the new project. You can create the project using the default set of features or select Customised to add or remove specific features. See Project features for more information about the available features.
For example, to create a project called my-project
that isolates instances, but allows access to the default project’s images and profiles:
To configure resource limits for the project, select Resource limits.
To restrict a project from accessing security-sensitive features, check Allow custom restrictions on a project level. You can then configure the restrictions under Restrictions. See Project restrictions for more information.
For example, to create a project called my-restricted-project
that blocks access to security-sensitive features (for example, container nesting) but allows snapshots:
Check Allow custom restrictions on a project level:
Configure the restrictions:
Tip
When you create a project with the default options, features.profiles
is set to true
, which means that profiles are isolated in the project.
Consequently, the new project does not have access to the default
profile of the default
project and therefore misses required configuration for creating instances (like the root disk).
To fix this, add a root disk device to the project’s default
profile (see Set specific options for a profile for instructions).
Configure a project¶
To configure a project, you can either set a specific configuration option or edit the full project.
Some configuration options can only be set for projects that do not contain any instances.
Set specific configuration options¶
To set a specific configuration option, use the lxc project set
command.
For example, to limit the number of containers that can be created in my-project
to five, enter the following command:
lxc project set my-project limits.containers=5
To unset a specific configuration option, use the lxc project unset
command.
Note
If you unset a configuration option, it is set to its default value. This default value might differ from the initial value that is set when the project is created.
To set a specific configuration option, send a PATCH request to the project.
For example, to limit the number of containers that can be created in my-project
to five, send the following request:
lxc query --request PATCH /1.0/projects/my-project --data '{
"config": {
"limits.containers": "5"
}
}'
See PATCH /1.0/projects/{name}
for more information.
To update the project configuration, select the respective project from the Project drop-down. Then go to Configuration and click Edit configuration to set or unset any configuration options.
Edit the project¶
To edit the full project configuration, use the lxc project edit
command.
For example:
lxc project edit my-project
To update the entire project configuration, send a PUT request to the project. For example:
lxc query --request PUT /1.0/projects/my-project --data '{
"config": { ... },
"description": "<description>"
}'
See PUT /1.0/projects/{name}
for more information.
The UI does not currently support editing the full YAML configuration for a project. However, you can update several or all configuration options at the same time through the UI.