diff --git a/charts/shipyard/values.yaml b/charts/shipyard/values.yaml index 3f74f12e..765a463d 100644 --- a/charts/shipyard/values.yaml +++ b/charts/shipyard/values.yaml @@ -423,6 +423,10 @@ conf: notes_read_timeout: 10 drydock_client_connect_timeout: 20 drydock_client_read_timeout: 300 + promenade_client_connect_timeout: 20 + promenade_client_read_timeout: 300 + shipyard_client_connect_timeout: 5 + shipyard_client_read_timeout: 300 airflow: worker_endpoint_scheme: 'http' worker_port: 8793 diff --git a/src/bin/shipyard_airflow/etc/shipyard/shipyard.conf.sample b/src/bin/shipyard_airflow/etc/shipyard/shipyard.conf.sample index a822dead..317d3591 100644 --- a/src/bin/shipyard_airflow/etc/shipyard/shipyard.conf.sample +++ b/src/bin/shipyard_airflow/etc/shipyard/shipyard.conf.sample @@ -404,6 +404,14 @@ # seconds) (integer value) #drydock_client_read_timeout = 300 +# Connect timeout used for connecting to Promenade using the Promenade client (in +# seconds) (integer value) +#promenade_client_connect_timeout = 20 + +# Read timeout used for responses from Promenade using the Promenade client (in +# seconds) (integer value) +#promenade_client_read_timeout = 300 + [shipyard] diff --git a/src/bin/shipyard_airflow/shipyard_airflow/conf/config.py b/src/bin/shipyard_airflow/shipyard_airflow/conf/config.py index 8699ff2a..e4f2e1bf 100644 --- a/src/bin/shipyard_airflow/shipyard_airflow/conf/config.py +++ b/src/bin/shipyard_airflow/shipyard_airflow/conf/config.py @@ -257,6 +257,18 @@ SECTIONS = [ help=('Read timeout used for responses from Drydock using ' 'the Drydock client (in seconds)') ), + cfg.IntOpt( + 'promenade_client_connect_timeout', + default=20, + help=('Connect timeout used for connecting to Drydock using ' + 'the Drydock client (in seconds)') + ), + cfg.IntOpt( + 'promenade_client_read_timeout', + default=300, + help=('Read timeout used for responses from Drydock using ' + 'the Promenade client (in seconds)') + ), ] ), ConfigSection( diff --git a/src/bin/shipyard_airflow/shipyard_airflow/plugins/drydock_validate_design.py b/src/bin/shipyard_airflow/shipyard_airflow/plugins/drydock_validate_design.py index 77f4a56e..59505526 100644 --- a/src/bin/shipyard_airflow/shipyard_airflow/plugins/drydock_validate_design.py +++ b/src/bin/shipyard_airflow/shipyard_airflow/plugins/drydock_validate_design.py @@ -18,13 +18,17 @@ import requests from airflow.plugins_manager import AirflowPlugin from airflow.exceptions import AirflowException +from oslo_config import cfg +from shipyard_airflow.shipyard_const import CustomHeaders + +CONF = cfg.CONF try: from drydock_base_operator import DrydockBaseOperator except ImportError: from shipyard_airflow.plugins.drydock_base_operator import \ DrydockBaseOperator -from shipyard_airflow.shipyard_const import CustomHeaders + LOG = logging.getLogger(__name__) @@ -64,10 +68,13 @@ class DrydockValidateDesignOperator(DrydockBaseOperator): LOG.info("Waiting for DryDock to validate site design...") try: - design_validate_response = requests.post(validation_endpoint, - headers=headers, - data=json.dumps(payload), - timeout=5) + design_validate_response = requests.post( + validation_endpoint, + headers=headers, + data=json.dumps(payload), + timeout=( + CONF.requests_config.drydock_client_connect_timeout, + CONF.requests_config.drydock_client_read_timeout)) except requests.exceptions.RequestException as e: raise AirflowException(e) diff --git a/src/bin/shipyard_airflow/shipyard_airflow/plugins/promenade_validate_site_design.py b/src/bin/shipyard_airflow/shipyard_airflow/plugins/promenade_validate_site_design.py index 213b3573..1daf03f5 100644 --- a/src/bin/shipyard_airflow/shipyard_airflow/plugins/promenade_validate_site_design.py +++ b/src/bin/shipyard_airflow/shipyard_airflow/plugins/promenade_validate_site_design.py @@ -18,13 +18,17 @@ import requests from airflow.exceptions import AirflowException from airflow.plugins_manager import AirflowPlugin +from oslo_config import cfg +from shipyard_airflow.shipyard_const import CustomHeaders + +CONF = cfg.CONF try: from promenade_base_operator import PromenadeBaseOperator except ImportError: from shipyard_airflow.plugins.promenade_base_operator import \ PromenadeBaseOperator -from shipyard_airflow.shipyard_const import CustomHeaders + LOG = logging.getLogger(__name__) @@ -64,10 +68,13 @@ class PromenadeValidateSiteDesignOperator(PromenadeBaseOperator): LOG.info("Waiting for Promenade to validate site design...") try: - design_validate_response = requests.post(validation_endpoint, - headers=headers, - data=json.dumps(payload), - timeout=5) + design_validate_response = requests.post( + validation_endpoint, + headers=headers, + data=json.dumps(payload), + timeout=( + CONF.requests_config.drydock_client_connect_timeout, + CONF.requests_config.drydock_client_read_timeout)) except requests.exceptions.RequestException as e: raise AirflowException(e) diff --git a/src/bin/shipyard_client/shipyard_client/api_client/base_client.py b/src/bin/shipyard_client/shipyard_client/api_client/base_client.py index 5e64d871..38332c43 100644 --- a/src/bin/shipyard_client/shipyard_client/api_client/base_client.py +++ b/src/bin/shipyard_client/shipyard_client/api_client/base_client.py @@ -14,12 +14,12 @@ import abc import os import logging +import requests from keystoneauth1.exceptions.auth import AuthorizationFailure from keystoneauth1.exceptions.catalog import EndpointNotFound from keystoneauth1.identity import v3 from keystoneauth1 import session -import requests from shipyard_client.api_client.client_error import ClientError from shipyard_client.api_client.client_error import UnauthenticatedClientError @@ -95,7 +95,11 @@ class BaseClient(metaclass=abc.ABCMeta): # This could use keystoneauth1 session, but that library handles # responses strangely (wraps all 400/500 in a keystone exception) response = requests.post( - url, data=data, params=query_params, headers=headers) + url, + data=data, + params=query_params, + headers=headers, + timeout=None) # handle some cases where the response code is sufficient to know # what needs to be done if response.status_code == 401: