---
title: "Создать несколько файловых хранилищ через Terraform"
sidebar_label: "Создать несколько файловых хранилищ"
description: "Как создать несколько файловых хранилищ"
sidebar_position: 2
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import ConfigureProviders from '@site/terraform/_partials/common/configure-providers.mdx'
import ConfigureProvidersConfig from '@site/terraform/_partials/common/configure-providers-config.mdx'
import CreateNetworks from '@site/terraform/_partials/cloud-networks/create-networks.mdx'
import CreateResourcesAlert from '@site/terraform/_partials/common/create-resources-alert.mdx'

# Создать несколько файловых хранилищ через Terraform

<CreateResourcesAlert />

<br />

1. Опционально: [настройте провайдеры](#configure-providers).
2. [Создайте приватную сеть и подсеть](#create-networks).
3. [Задайте переменные для файловых хранилищ](#add-storage-variables).
4. [Настройте конфигурацию сети хранилищ](#configure-storage-networks).
5. [Создайте файловые хранилища](#create-storages).
6. [Настройте правила доступа к файловым хранилищам](#configure-access).

## Конфигурационные файлы \{#config}

<details>
  <summary>Пример файла для настройки провайдеров</summary>

  <ConfigureProvidersConfig />
</details>

<details>
  <summary>Пример файла для создания трех файловых хранилищ</summary>

  ```hcl
  resource "openstack_networking_network_v2" "network_1" {
    name           = "private-network"
    admin_state_up = "true"
  }

  resource "openstack_networking_subnet_v2" "subnet_1" {
    name       = "private-subnet"
    network_id = openstack_networking_network_v2.network_1.id
    cidr       = "192.168.199.0/24"
  }

  variable "storages" {
    default = [
      { name = "nfs-storage-1", size = 50, type="basic.ru-3a", proto="NFS", ip = "192.168.199.10" },
      { name = "nfs-storage-2", size = 100, type="fast.ru-3a", proto="NFS", ip = "192.168.199.11" },
      { name = "nfs-storage-3", size = 50, type="universal.ru-3a", proto="CIFS", ip = "192.168.199.12" },
    ]
  }

  resource "openstack_sharedfilesystem_sharenetwork_v2" "share_network" {
    count             = length(var.storages)
    name              = "share-network-${count.index}"
    neutron_net_id    = openstack_networking_network_v2.network_1.id
    neutron_subnet_id = openstack_networking_subnet_v2.subnet_1.id
  }

  resource "openstack_sharedfilesystem_share_v2" "share" {
    count            = length(var.storages)
    name             = var.storages[count.index].name
    share_type       = var.storages[count.index].type
    share_proto      = var.storages[count.index].proto
    size             = var.storages[count.index].size
    share_network_id = openstack_sharedfilesystem_sharenetwork_v2.sharenetwork.id
    metadata         = { ip = var.storages[count.index].ip }
  }

  resource "openstack_sharedfilesystem_share_access_v2" "share_access" {
    count        = length(var.storages)
    access_level = "rw"
    access_to    = "0.0.0.0/0"
    access_type  = "ip"
    share_id     = openstack_sharedfilesystem_share_v2.share[count.index].id
  }
  ```
</details>

## 1. Опционально: настроить провайдеры \{#configure-providers}

Если вы [настроили провайдеры](/terraform/configure-terraform-environment/#configure-providers) Selectel и OpenStack, пропустите этот шаг.

<ConfigureProviders />

## 2. Создать приватную сеть и подсеть \{#create-networks}

<CreateNetworks />

## 3. Задать переменные для файловых хранилищ \{#add-storage-variables}

Задайте переменную с параметрами для каждого файлового хранилища, которые вам нужно создать.

```hcl
variable "storages" {
  default = [
    { name = "nfs-storage-1", size = 50, type="basic.ru-3a", proto="NFS", ip = "192.168.199.10" },
    { name = "nfs-storage-2", size = 100, type="fast.ru-3a", proto="NFS", ip = "192.168.199.11" },
    { name = "nfs-storage-3", size = 50, type="universal.ru-3a", proto="CIFS", ip = "192.168.199.12" },
  ]
}
```

Здесь:

* `name` — название файлового хранилища;
* `size` — размер файлового хранилища в ГБ, например `50`. Ограничения — от 50 ГБ до 50 ТБ;
* `type` — [тип файлового хранилища](/file-storage/about/about-file-storage/#file-storage-types) и [сегмент пула](/infrastructure/locations/#pool) в формате `<type>.<pool_segment>`, например `basic.ru-9a`:
  * `<type> `
    * `basic` — тип HDD Базовое;
    * `universal` — тип SSD Универсальное;
    * `fast` — тип SSD Быстрое;
  * `<pool_segment>` — сегмент пула, в котором будет создано файловое хранилище, например `ru-9a`. Список доступных сегментов пула можно посмотреть в инструкции [Доступность продуктов в локациях](/infrastructure/product-availability-by-location/);
* `proto` — протокол файлового хранилища:
  * `NFS` — для протокола NFSv4;
  * `CIFS` — для протокола CIFS SMBv3;
* опционально: `ip` — приватный IP-адрес файлового хранилища, например `192.168.199.10`. После создания хранилища IP-адрес нельзя будет изменить.

## 4. Настроить сети хранилищ \{#configure-storage-networks}

Для каждого файлового хранилища будет автоматически создан отдельный ресурс [openstack\_sharedfilesystem\_sharenetwork\_v2](/terraform/openstack-provider-reference/shared-filesystem-manila/resources/openstack_sharedfilesystem_sharenetwork_v2/), даже если файловые хранилища используют одну приватную сеть и подсеть.

```hcl
resource "openstack_sharedfilesystem_sharenetwork_v2" "share_network" {
  count             = length(var.storages)
  name              = "share-network-${count.index}"
  neutron_net_id    = openstack_networking_network_v2.network_1.id
  neutron_subnet_id = openstack_networking_subnet_v2.subnet_1.id
}
```

## 5. Создать файловые хранилища \{#create-storages}

```hcl
resource "openstack_sharedfilesystem_share_v2" "share" {
  count            = length(var.storages)
  name             = var.storages[count.index].name
  share_type       = var.storages[count.index].type
  share_proto      = var.storages[count.index].proto
  size             = var.storages[count.index].size
  share_network_id = openstack_sharedfilesystem_sharenetwork_v2.share_network[count.index].id
  metadata         = { ip = var.storages[count.index].ip }
}
```

Здесь:

* `count` — количество файловых хранилищ, которые нужно создать. Значение будет основываться на количестве файловых хранилищ, которые вы [задали в переменной ранее](#add-storage-variables);
* `share_type` — [тип файлового хранилища](/file-storage/about/about-file-storage/#file-storage-types) и [сегмент пула](/infrastructure/locations/#pool) в формате `<type>.<pool_segment>`, например `basic.ru-9a`. Значение для каждого файлового хранилища берется из переменной, которую вы [задали ранее](#add-storage-variables);
* `share_proto` — протокол файлового хранилища. Значение для каждого файлового хранилища берется из переменной, которую вы [задали ранее](#add-storage-variables):
  * `NFS` — для протокола NFSv4;
  * `CIFS` — для протокола CIFS SMBv3;
* `size` — размер файлового хранилища в ГБ, например `50`. Ограничения — от 50 ГБ до 50 ТБ. Значение для каждого файлового хранилища берется из переменной, которую вы [задали ранее](#add-storage-variables);
* опционально: `metadata = {"ip": "<ip_address>"}` — приватный IP-адрес файлового хранилища, например `192.168.199.10`. После создания хранилища IP-адрес нельзя будет изменить. Значение для каждого файлового хранилища берется из переменной, которую вы [задали ранее](#add-storage-variables).

Посмотрите подробное описание ресурса [openstack\_sharedfilesystem\_share\_v2](/terraform/openstack-provider-reference/shared-filesystem-manila/resources/openstack_sharedfilesystem_share_v2/).

## 6. Настроить правила доступа к файловым хранилищам \{#configure-access}

```hcl
resource "openstack_sharedfilesystem_share_access_v2" "share_access" {
  count        = length(var.storages)
  access_level = "rw"
  access_to    = "0.0.0.0/0"
  access_type  = "ip"
  share_id     = openstack_sharedfilesystem_share_v2.share[count.index].id
}
```

Здесь:

* `count` — количество файловых хранилищ. Значение будет основываться на количестве файловых хранилищ, которые вы [задали в переменной ранее](#add-storage-variables);
* `access_level` — [уровень доступа](/file-storage/manage/configure-access-by-ips/#access-levels) к хранилищу, который зависит от протокола:
  * для CIFS SMBv3 — `rw` (чтение и запись);
  * для NFSv4 — `ro` (только чтение) или `rw` (чтение и запись);
* `access_to` — IP-адрес или CIDR приватной подсети, для которых будет открыт доступ. Например:
  * `192.168.199.10` — доступ для IP-адреса;
  * `192.168.199.0/24` — доступ для диапазона приватной подсети;
  * `0.0.0.0/0` — доступ для всех адресов приватной подсети, в которой находятся файловые хранилища. Для настройки доступа к файловым хранилищам любому клиенту сети можно добавить в ресурс [openstack\_sharedfilesystem\_share\_v2](#create-storages) строку `metadata = {"access_list_allow_all": "true"}`.

Посмотрите подробное описание ресурса [openstack\_sharedfilesystem\_share\_access\_v2](/terraform/openstack-provider-reference/shared-filesystem-manila/resources/openstack_sharedfilesystem_share_access_v2/).

<Formbricks />
