Upload logs to Google Cloud Storage

Before using this role, create at least one bucket and set up
appropriate access controls or lifecycle events.  This role will not
automatically create buckets (though it will configure CORS policies).

This role requires the ``google-cloud-storage`` Python package to be
installed in the Ansible environment on the Zuul executor.  It uses
Google Cloud Application Default Credentials.

**Role Variables**

.. zuul:rolevar:: zuul_site_upload_logs
   :default: true

   Controls when logs are uploaded. true, the default, means always
   upload logs. false means never upload logs. 'failure' means to only
   upload logs when the job has failed.

   .. note:: Intended to be set by admins via site-variables.

.. zuul:rolevar:: zuul_log_partition
   :default: false

   If set to true, then the first component of the log path will be
   removed from the object name and added to the bucket name, so that
   logs for different changes are distributed across a large number of
   buckets.

.. zuul:rolevar:: zuul_log_container

   This role *will not* create buckets which do not already exist.  If
   partitioning is not enabled, this is the name of the bucket which
   will be used.  If partitioning is enabled, then this will be used
   as the prefix for the bucket name which will be separated from the
   partition name by an underscore.  For example, "logs_42" would be
   the bucket name for partition 42.

   Note that you will want to set this to a value that uniquely
   identifies your Zuul installation.

.. zuul:rolevar:: zuul_log_path
   :default: Generated by the role `set-zuul-log-path-fact`

   Prepend this path to the object names when uploading.

.. zuul:rolevar:: zuul_log_create_indexes
   :default: true

   Whether to create `index.html` files with directory indexes.  If set
   to false, Swift containers can be marked with a `Web-Listings=true`
   property to activate Swift's own directory indexing.

.. zuul:rolevar:: zuul_log_path_shard_build
   :default: false

   This var is consumed by set-zuul-log-path-fact which
   upload-logs-gcs calls into. If you set this you will get log paths
   prefixed with the first three characters of the build uuid. This
   will improve log file sharding.

   More details can be found at
   :zuul:rolevar:`set-zuul-log-path-fact.zuul_log_path_shard_build`.
