Added win_deploy_auth_retries and win_deploy_auth_retry_delay for ec2 cloud

This commit is contained in:
Fred Reimer 2015-02-28 17:08:44 -05:00
parent c2ca579906
commit 883e4d1d1a
No known key found for this signature in database
GPG Key ID: CC615E6AD6D88E5E
4 changed files with 43 additions and 3 deletions

View File

@ -46,6 +46,12 @@ parameters are discussed in more detail below.
#
ssh_interface: public_ips
# Optionally configure the Windows credential validation number of
# retries and delay between retries. This defaults to 10 retries
# with a one second delay betwee retries
win_deploy_auth_retries: 10
win_deploy_auth_retry_delay: 1
# Set the EC2 access credentials (see below)
#
id: HJGRYCILJLKJYG
@ -95,6 +101,12 @@ parameters are discussed in more detail below.
#
ssh_interface: private_ips
# Optionally configure the Windows credential validation number of
# retries and delay between retries. This defaults to 10 retries
# with a one second delay betwee retries
win_deploy_auth_retries: 10
win_deploy_auth_retry_delay: 1
# Set the EC2 access credentials (see below)
#
id: HJGRYCILJLKJYG
@ -141,6 +153,16 @@ Keys tab. The ``id`` setting is labeled Access Key ID, and the ``key`` setting
is labeled Secret Access Key.
Windows Deploy Timeouts
=======================
For Windows instances, it may take longer than normal for the instance to be
ready. In these circumstances, the provider configuration can be configured
with a ``win_deploy_auth_retries`` and/or a ``win_deploy_auth_retry_delay``
setting, which default to 10 retries and a one second delay between retries.
These retries and timeouts relate to validating the Administrator password
once AWS provides the credentials via the AWS API.
Key Pairs
=========
In order to create an instance with Salt installed and configured, a key pair

View File

@ -116,6 +116,15 @@ deploy script (bootstrap-salt.sh, by default) will be run, which will
auto-detect the operating system, and install Salt using its native package
manager. These do not need to be handled by the developer in the cloud module.
The ``salt.utils.cloud.validate_windows_cred()`` function has been extended to
take the number of retries and retry_delay parameters in case a specific cloud
provider has a delay between providing the Windows credentials and the
credentials being available for use. In their ``create()`` function, or as a
a sub-function called during the creation process, developers should use the
``win_deploy_auth_retries`` and ``win_deploy_auth_retry_delay`` parameters from
the provider configuration to allow the end-user the ability to customize the
number of tries and delay between tries for their particular provider.
After the appropriate deploy function completes, a final event is fired
which describes the virtual machine that has just been created. This event is
tagged ``salt/cloud/<vm name>/created``. The payload contains the names of the

View File

@ -1918,6 +1918,12 @@ def wait_for_instance(
win_passwd = config.get_cloud_config_value(
'win_password', vm_, __opts__, default=''
)
win_deploy_auth_retries = config.get_cloud_config_value(
'win_deploy_auth_retries', vm_, __opts__, default='10'
)
win_deploy_auth_retry_delay = config.get_cloud_config_value(
'win_deploy_auth_retry_delay', vm_, __opts__, default='1'
)
if win_passwd and win_passwd == 'auto':
log.debug('Waiting for auto-generated Windows EC2 password')
while True:
@ -1946,7 +1952,9 @@ def wait_for_instance(
)
if not salt.utils.cloud.validate_windows_cred(ip_address,
username,
win_passwd):
win_passwd,
retries=win_deploy_auth_retries,
retry_delay=win_deploy_auth_retry_delay):
raise SaltCloudSystemExit(
'Failed to authenticate against remote windows host'
)

View File

@ -700,7 +700,8 @@ def wait_for_winexesvc(host, port, username, password, timeout=900):
)
def validate_windows_cred(host, username='Administrator', password=None, retries=10):
def validate_windows_cred(host, username='Administrator', password=None, retries=10,
retry_delay=1):
'''
Check if the windows credentials are valid
'''
@ -710,7 +711,7 @@ def validate_windows_cred(host, username='Administrator', password=None, retries
))
if retcode == 0:
break
time.sleep(1)
time.sleep(delay)
return retcode == 0