# -*- coding: utf-8 -*- #
# Copyright 2025 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# NOTE: This file is autogenerated and should not be edited by hand.
# AUTOGEN_CLI_VERSION: HEAD
- release_tracks:
  - ALPHA
  auto_generated: true
  help_text:
    brief: Creates a Managed Lustre instance
    description: |
      Creates a Managed Lustre instance.
    examples: |-
      To create an instance `my-instance` in location `us-central1-a` with 18000 Gib capacity run:

      $ {command} my-instance --capacity-gib=18000 --location=us-central1-a --network=projects/my-project/global/networks/default --filesystem=lustrefs --per-unit-storage-throughput=1000
  arguments:
    params:
    - help_text: |-
        Identifier.
        The name of the instance.
      is_positional: true
      is_primary_resource: true
      request_id_field: instanceId
      resource_spec: !REF googlecloudsdk.command_lib.lustre.v1alpha_resources:projects_locations_instances
      required: true
    - arg_name: filesystem
      api_field: instance.filesystem
      required: true
      repeated: false
      help_text: |-
        The filesystem name for this instance. This name is used by client-side
        tools, including when mounting the instance. Must be eight characters or
        less and can only contain letters and numbers.
    - arg_name: capacity-gib
      api_field: instance.capacityGib
      required: true
      repeated: false
      type: long
      help_text: |-
        The storage capacity of the instance in gibibytes (GiB). Allowed values
        are from `18000` to `7632000`, depending on the `perUnitStorageThroughput`.
        See [Performance tiers and maximum storage
        capacities](https://cloud.google.com/managed-lustre/docs/create-instance#performance-tiers)
        for specific minimums, maximums, and step sizes for each performance tier.
    - arg_name: network
      help_text: |-
        The full name of the VPC network to which the instance is connected.
        Must be in the format
        `projects/{project_id}/global/networks/{network_name}`.
      is_positional: false
      is_primary_resource: false
      resource_spec: !REF googlecloudsdk.command_lib.lustre.v1alpha_resources:projects_none_networks
      resource_method_params:
        instance.network: '{__relative_name__}'
      required: true
    - arg_name: description
      api_field: instance.description
      required: false
      repeated: false
      help_text: |-
        A user-readable description of the instance.
    - arg_name: labels
      api_field: instance.labels
      required: false
      repeated: true
      help_text: |-
        Labels as key value pairs.
      spec:
      - api_field: key
      - api_field: value
    - arg_name: per-unit-storage-throughput
      api_field: instance.perUnitStorageThroughput
      required: true
      repeated: false
      type: long
      help_text: |-
        The throughput of the instance in MB/s/TiB. Valid values are 125, 250,
        500, 1000.
        See [Performance tiers and maximum storage
        capacities](https://cloud.google.com/managed-lustre/docs/create-instance#performance-tiers)
        for more information.
    - arg_name: gke-support-enabled
      api_field: instance.gkeSupportEnabled
      action: store_true
      required: false
      type: bool
      help_text: |-
        Indicates whether you want to enable support for GKE clients. By default,
        GKE clients are not supported.
        Deprecated. No longer required for GKE instance creation.
      default: null
    - arg_name: kms-key
      api_field: instance.kmsKey
      required: false
      repeated: false
      help_text: |-
        The Cloud KMS key name to use for data encryption.
        If not set, the instance will use Google-managed encryption keys.
        If set, the instance will use customer-managed encryption keys.
        The key must be in the same region as the instance.
        The key format is:
        projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{key}
    - arg_name: placement-policy
      api_field: instance.placementPolicy
      required: false
      repeated: false
      help_text: |-
        The placement policy name for the instance in the format of
        projects/{project}/locations/{location}/resourcePolicies/{resource_policy}
    - group:
        api_field: instance.accessRulesOptions
        required: false
        help_text: |-
          IP-based access rules for the Managed Lustre instance. These options
          define the root user squash configuration.
        params:
        - arg_name: access-rules
          api_field: instance.accessRulesOptions.accessRules
          required: false
          repeated: true
          help_text: |-
            The access rules for the instance.
          spec:
          - api_field: name
            help_text: |-
              The name of the access rule policy group.
              Must be 16 characters or less and include only alphanumeric characters
              or '_'.
          - api_field: ipAddressRanges
            help_text: |-
              The IP address ranges to which to apply this access rule. Accepts
              non-overlapping CIDR ranges (e.g., `192.168.1.0/24`) and IP addresses
              (e.g., `192.168.1.0`).
          - api_field: accessMode
            help_text: |-
              The access mode for the access rule nodemap.
              Default is [READ_WRITE][google.cloud.lustre.v1alpha.AccessRulesOptions.AccessRule.AccessMode.READ_WRITE].
          - api_field: squashMode
            help_text: |-
              Squash mode for the access rule.
          - api_field: squashUid
            help_text: |-
              Squash UID for the access rule. If the squash mode for this rule is
              [ROOT_SQUASH][google.cloud.lustre.v1alpha.AccessRulesOptions.SquashMode.ROOT_SQUASH], root users matching the
              [ip_address_ranges][google.cloud.lustre.v1alpha.AccessRulesOptions.AccessRule.ip_address_ranges] are squashed to this
              UID. Defaults to 0 (no root squash).
          - api_field: squashGid
            help_text: |-
              Squash GID for the access rule. If the squash mode for this rule is
              [ROOT_SQUASH][google.cloud.lustre.v1alpha.AccessRulesOptions.SquashMode.ROOT_SQUASH], root users matching the
              [ip_address_ranges][google.cloud.lustre.v1alpha.AccessRulesOptions.AccessRule.ip_address_ranges] are squashed to this
              GID. Defaults to 0 (no root squash).
          - api_field: mountableSubdirectories
            help_text: |-
              The list of non-root directories that can be mounted from
              clients in this NID range subset. Currently, there can be only a single
              directory at most. If no directory is mentioned, then the root directory
              will be accessible.
        - arg_name: default-squash-mode
          api_field: instance.accessRulesOptions.defaultSquashMode
          required: true
          help_text: |-
            The squash mode for the default access rule.
          choices:
          - arg_value: no-squash
            enum_value: NO_SQUASH
            help_text: |-
              Squash is disabled.

              If set inside an [AccessRule][google.cloud.lustre.v1alpha.AccessRulesOptions.AccessRule], root users matching the
              [ip_ranges][AccessRule.ip_ranges] are not squashed.

              If set as the [default_squash_mode][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_mode], root squash is
              disabled for this instance.

              If the default squash mode is `NO_SQUASH`, do not set the
              [default_squash_uid][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_uid] or
              [default_squash_gid][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_gid], or an `invalid argument` error
              is returned.
          - arg_value: root-squash
            enum_value: ROOT_SQUASH
            help_text: |-
              Root user squash is enabled.

              Not supported inside an [AccessRule][google.cloud.lustre.v1alpha.AccessRulesOptions.AccessRule].

              If set as the [default_squash_mode][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_mode],
              root users not matching any of the [access_rules][google.cloud.lustre.v1alpha.AccessRulesOptions.access_rules] are
              squashed to the [default_squash_uid][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_uid] and
              [default_squash_gid][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_gid].
          - arg_value: all-users-squash
            enum_value: ALL_USERS_SQUASH
            help_text: |-
              All users squashed to the [squash_uid][google.cloud.lustre.v1alpha.AccessRulesOptions.AccessRule.squash_uid] and
              [squash_gid][google.cloud.lustre.v1alpha.AccessRulesOptions.AccessRule.squash_gid] for the access rule.
              If this is for the [default_squash_mode][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_mode], then the
              [default_squash_uid][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_uid] and
              [default_squash_gid][google.cloud.lustre.v1alpha.AccessRulesOptions.default_squash_gid] will be squashed.
            hidden: true
        - arg_name: default-squash-uid
          api_field: instance.accessRulesOptions.defaultSquashUid
          required: false
          repeated: false
          type: int
          help_text: |-
            The user squash UID for the default access rule.
            This user squash UID applies to all root users connecting from clients
            that are not matched by any of the access rules. If not set, the default
            is 0 (no UID squash).
        - arg_name: default-squash-gid
          api_field: instance.accessRulesOptions.defaultSquashGid
          required: false
          repeated: false
          type: int
          help_text: |-
            The user squash GID for the default access rule.
            This user squash GID applies to all root users connecting from clients
            that are not matched by any of the access rules. If not set, the default
            is 0 (no GID squash).
        - arg_name: default-mountable-subdirectories
          api_field: instance.accessRulesOptions.defaultMountableSubdirectories
          required: false
          repeated: true
          hidden: true
          help_text: |-
            The list of non-root directories that can be mounted from
            clients in the default access rule. Currently, there can be only a single
            directory at most. If no directory is mentioned, then the root directory
            will be accessible.
    - group:
        api_field: instance.maintenancePolicy
        required: false
        hidden: true
        help_text: |-
          The maintenance policy for the instance to determine when to allow or deny
          updates.
        params:
        - arg_name: maintenance-policy-windows
          api_field: instance.maintenancePolicy.maintenanceWindows
          required: true
          repeated: true
          help_text: |-
            The maintenance window for the instance.
          spec:
          - api_field: dayOfWeek
            help_text: |-
              Day of the week for the maintenance window.
          - api_field: startTime
            help_text: |-
              Start time of the maintenance window in UTC time zone.
            spec:
            - api_field: hours
              help_text: |-
                Hours of a day in 24 hour format. Must be greater than or equal to 0 and
                typically must be less than or equal to 23. An API may choose to allow the
                value "24:00:00" for scenarios like business closing time.
            - api_field: minutes
              help_text: |-
                Minutes of an hour. Must be greater than or equal to 0 and less than or
                equal to 59.
            - api_field: seconds
              help_text: |-
                Seconds of a minute. Must be greater than or equal to 0 and typically must
                be less than or equal to 59. An API may allow the value 60 if it allows
                leap-seconds.
            - api_field: nanos
              help_text: |-
                Fractions of seconds, in nanoseconds. Must be greater than or equal to 0
                and less than or equal to 999,999,999.
        - arg_name: maintenance-policy-deny-periods
          api_field: instance.maintenancePolicy.denyPeriods
          required: false
          repeated: true
          help_text: |-
            The deny periods for the instance.
            Currently limited to 4.
          spec:
          - api_field: startDate
            help_text: |-
              Start date of the deny period in UTC time zone.
            spec:
            - api_field: year
              help_text: |-
                Year of the date. Must be from 1 to 9999, or 0 to specify a date without
                a year.
            - api_field: month
              help_text: |-
                Month of a year. Must be from 1 to 12, or 0 to specify a year without a
                month and day.
            - api_field: day
              help_text: |-
                Day of a month. Must be from 1 to 31 and valid for the year and month, or 0
                to specify a year by itself or a year and month where the day isn't
                significant.
          - api_field: endDate
            help_text: |-
              End date of the deny period in UTC time zone.
            spec:
            - api_field: year
              help_text: |-
                Year of the date. Must be from 1 to 9999, or 0 to specify a date without
                a year.
            - api_field: month
              help_text: |-
                Month of a year. Must be from 1 to 12, or 0 to specify a year without a
                month and day.
            - api_field: day
              help_text: |-
                Day of a month. Must be from 1 to 31 and valid for the year and month, or 0
                to specify a year by itself or a year and month where the day isn't
                significant.
          - api_field: time
            help_text: |-
              Time in UTC when the deny period starts on start_date and ends on
              end_date. This can be:
              * Full time OR
              * All zeros for 00:00:00 UTC
            spec:
            - api_field: hours
              help_text: |-
                Hours of a day in 24 hour format. Must be greater than or equal to 0 and
                typically must be less than or equal to 23. An API may choose to allow the
                value "24:00:00" for scenarios like business closing time.
            - api_field: minutes
              help_text: |-
                Minutes of an hour. Must be greater than or equal to 0 and less than or
                equal to 59.
            - api_field: seconds
              help_text: |-
                Seconds of a minute. Must be greater than or equal to 0 and typically must
                be less than or equal to 59. An API may allow the value 60 if it allows
                leap-seconds.
            - api_field: nanos
              help_text: |-
                Fractions of seconds, in nanoseconds. Must be greater than or equal to 0
                and less than or equal to 999,999,999.
    - arg_name: request-id
      api_field: requestId
      required: false
      repeated: false
      help_text: |-
        An optional request ID to identify requests. Specify a unique request ID
        so that if you must retry your request, the server will know to ignore
        the request if it has already been completed. The server will guarantee
        that for at least 60 minutes since the first request.

        For example, consider a situation where you make an initial request and the
        request times out. If you make the request again with the same request
        ID, the server can check if original operation with the same request ID
        was received, and if so, will ignore the second request. This prevents
        clients from accidentally creating duplicate commitments.

        The request ID must be a valid UUID with the exception that zero UUID is
        not supported (00000000-0000-0000-0000-000000000000).
  request:
    api_version: v1alpha
    collection:
    - lustre.projects.locations.instances
  async:
    collection:
    - lustre.projects.locations.operations
