:py:mod:`airflow.providers.microsoft.azure.hooks.container_volume`
==================================================================

.. py:module:: airflow.providers.microsoft.azure.hooks.container_volume


Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.microsoft.azure.hooks.container_volume.AzureContainerVolumeHook




.. py:class:: AzureContainerVolumeHook(azure_container_volume_conn_id = 'azure_container_volume_default')

   Bases: :py:obj:`airflow.hooks.base.BaseHook`

   A hook which wraps an Azure Volume.

   :param azure_container_volume_conn_id: Reference to the
       :ref:`Azure Container Volume connection id <howto/connection:azure_container_volume>`
       of an Azure account of which container volumes should be used.

   .. py:attribute:: conn_name_attr
      :annotation: = azure_container_volume_conn_id

      

   .. py:attribute:: default_conn_name
      :annotation: = azure_container_volume_default

      

   .. py:attribute:: conn_type
      :annotation: = azure_container_volume

      

   .. py:attribute:: hook_name
      :annotation: = Azure Container Volume

      

   .. py:method:: get_connection_form_widgets()
      :staticmethod:

      Returns connection widgets to add to connection form


   .. py:method:: get_ui_field_behaviour()
      :staticmethod:

      Returns custom field behaviour


   .. py:method:: get_storagekey(self)

      Get Azure File Volume storage key


   .. py:method:: get_file_volume(self, mount_name, share_name, storage_account_name, read_only = False)

      Get Azure File Volume



