Skip to content

Commit

Permalink
basic check mode support
Browse files Browse the repository at this point in the history
this adds basic check mode support by skipping all API calls that could
trigger changes. it does *NOT* update the service object that is
returned, so while the changed flag will be correct, the service object
will still reflect the state *before* the changes.

Fixes: Jimdo#1
  • Loading branch information
evgeni committed Apr 24, 2019
1 parent 3971e09 commit 008d4ef
Showing 1 changed file with 23 additions and 12 deletions.
35 changes: 23 additions & 12 deletions library/fastly_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -1076,15 +1076,19 @@ def __init__(self, changed, actions, service):


class FastlyStateEnforcer(object):
def __init__(self, client):
def __init__(self, client, check_mode=False):
self.client = client
self.check_mode = check_mode

def apply_configuration(self, service_name, fastly_configuration, activate_new_version=True):
actions = []
service = self.client.get_service_by_name(service_name)

if service is None:
service = self.client.create_service(service_name)
if not self.check_mode:
service = self.client.create_service(service_name)
else:
service = FastlyService({'id': service_name, 'name': service_name, 'active_version': None, 'version': None})
actions.append("Created new service %s" % service_name)

if service.active_version is not None:
Expand All @@ -1097,20 +1101,24 @@ def apply_configuration(self, service_name, fastly_configuration, activate_new_v

if hasNoVersion or hasChanged:
if hasNoVersion:
version_number = self.create_new_version(service.id)
if not self.check_mode:
version_number = self.create_new_version(service.id)
actions.append("Created a new version because service has no active version")
elif hasChanged:
version_number = self.clone_version(service.id, current_version.number)
if not self.check_mode:
version_number = self.clone_version(service.id, current_version.number)
self.reset_version(service.id, version_number)
actions.append("Cloned an old version because service configuration was not up to date")
self.reset_version(service.id, version_number)

self.configure_version(service.id, fastly_configuration, version_number)
if not self.check_mode:
self.configure_version(service.id, fastly_configuration, version_number)

if activate_new_version:
self.client.activate_version(service.id, version_number)
if activate_new_version:
self.client.activate_version(service.id, version_number)

changed = len(actions) > 0
service = self.client.get_service(service.id)
if not self.check_mode:
service = self.client.get_service(service.id)
return FastlyStateEnforcerResult(actions=actions, changed=changed, service=service)

def create_new_version(self, service_id):
Expand Down Expand Up @@ -1230,7 +1238,10 @@ def delete_service(self, service_name):

actions = []

changed = self.client.delete_service(service_name)
if not self.check_mode:
changed = self.client.delete_service(service_name)
else:
changed = True

if changed:
actions.append('Deleted service %s' % service_name)
Expand Down Expand Up @@ -1261,7 +1272,7 @@ def __init__(self):
syslogs=dict(default=None, required=False, type='list'),
settings=dict(default=None, required=False, type='dict'),
),
supports_check_mode=False
supports_check_mode=True
)

def enforcer(self):
Expand All @@ -1271,7 +1282,7 @@ def enforcer(self):
fastly_api_key = os.environ['FASTLY_API_KEY']
else:
self.module.fail_json(msg="A Fastly API key is required for this module. Please set it and try again")
return FastlyStateEnforcer(FastlyClient(fastly_api_key))
return FastlyStateEnforcer(FastlyClient(fastly_api_key), self.module.check_mode)

def configuration(self):
try:
Expand Down

0 comments on commit 008d4ef

Please sign in to comment.