Description: 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 proje...

Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Back to top
View this page
Toggle table of contents sidebar

# 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:

1. Check Allow custom restrictions on a project level:

2. 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.