HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //snap/google-cloud-cli/394/lib/googlecloudsdk/command_lib/data_fusion/maintenance_utils.py
# -*- coding: utf-8 -*- #
# Copyright 2024 Google Inc. 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.
"""Command utilities for maintenance."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

from googlecloudsdk.api_lib.data_fusion import datafusion as df
from googlecloudsdk.calliope import arg_parsers
from googlecloudsdk.calliope import base
from googlecloudsdk.calliope import exceptions

CLEAR_MAINTENANCE_WINDOW_FLAG = base.Argument(
    '--clear-maintenance-window',
    action='store_true',
    help="""\
    Clear the maintenance window for this Data Fusion instance.
    """)

MAINTENANCE_WINDOW_START = base.Argument(
    '--maintenance-window-start',
    type=arg_parsers.Datetime.Parse,
    help="""\
    The start time of the maintenance window. Only the time of the day is
    used as a reference for a starting time of the window with a provided
    recurrence. This flag must be specified if any of the other arguments in
    this group are specified. For example:
      --maintenance_window_start=2024-01-01T01:00:00Z.
    See $ gcloud topic datetimes for information on time formats.
    """)

MAINTENANCE_WINDOW_END = base.Argument(
    '--maintenance-window-end',
    type=arg_parsers.Datetime.Parse,
    help="""\
    The end time of the maintenance window. Only the time of the day is
    used as a reference for an ending time of the window with a provided
    recurrence. This will be used in conjunction with start time, and
    the difference will determine the length of a single maintenance
    window. This flag must be specified if any of the other arguments in this
    group are specified. For example:
      --maintenance_window_end=2024-01-02T01:00:00Z.
    See $ gcloud topic datetimes for information on time formats.
    """)

MAINTENANCE_WINDOW_RECURRENCE = base.Argument(
    '--maintenance-window-recurrence',
    type=str,
    help="""\
    An RFC 5545 RRULE, specifying how the maintenance window will recur.
    Only FREQ=WEEKLY format is supported. This flag must be specified if
    any of the other arguments in this group are specified. For example:
      --maintenance_window_recurrence="FREQ=WEEKLY;BYDAY=FR,SA,SU".
    """)

MAINTENANCE_WINDOW_GROUP_DESCRIPTION = (
    'Group of arguments for setting the maintenance window value.')


def CreateArgumentsGroup(parser):
  """Adds argument group for creating maintenance window.

  Args:
    parser: parser to which the group of flags should be added.
  """
  group = parser.add_group(MAINTENANCE_WINDOW_GROUP_DESCRIPTION)
  MAINTENANCE_WINDOW_START.AddToParser(group)
  MAINTENANCE_WINDOW_END.AddToParser(group)
  MAINTENANCE_WINDOW_RECURRENCE.AddToParser(group)


def UpdateArgumentsGroup(parser):
  """Adds argument group for updating maintenance window.

  Args:
    parser: parser to which the group of flags should be added.
  """
  update_group = parser.add_mutually_exclusive_group()
  maintenance_window_group = update_group.add_group(
      MAINTENANCE_WINDOW_GROUP_DESCRIPTION)
  MAINTENANCE_WINDOW_START.AddToParser(maintenance_window_group)
  MAINTENANCE_WINDOW_END.AddToParser(maintenance_window_group)
  MAINTENANCE_WINDOW_RECURRENCE.AddToParser(maintenance_window_group)
  CLEAR_MAINTENANCE_WINDOW_FLAG.AddToParser(update_group)


def SetMaintenanceWindow(args, instance):
  """Validates maintenance window flags and sets the maintenance window value.
  """
  maintenance_window_start = args.maintenance_window_start
  maintenance_window_end = args.maintenance_window_end
  maintenance_window_recurrence = args.maintenance_window_recurrence
  if (maintenance_window_start or
      maintenance_window_end or
      maintenance_window_recurrence):
    if not maintenance_window_start:
      raise exceptions.RequiredArgumentException(
          '--maintenance-window-start',
          'must be specified.')
    if not maintenance_window_end:
      raise exceptions.RequiredArgumentException(
          '--maintenance-window-end',
          'must be specified.')
    if not maintenance_window_recurrence:
      raise exceptions.RequiredArgumentException(
          '--maintenance-window-recurrence',
          'must be specified.')

    datafusion = df.Datafusion()
    instance.maintenancePolicy = datafusion.messages.MaintenancePolicy(
        maintenanceWindow=datafusion.messages.MaintenanceWindow(
            recurringTimeWindow=datafusion.messages.RecurringTimeWindow(
                window=datafusion.messages.TimeWindow(
                    startTime=maintenance_window_start.isoformat().
                    replace('+00:00', 'Z'),
                    endTime=maintenance_window_end.isoformat().
                    replace('+00:00', 'Z'),
                ),
                recurrence=maintenance_window_recurrence,
            ),
        )
    )


def UpdateMaintenanceWindow(args, instance):
  """Validates maintenance window flags and sets the maintenance window value.
  """
  if args.clear_maintenance_window:
    instance.maintenancePolicy = None
  else:
    SetMaintenanceWindow(args, instance)