diff options
| author | Jenkins <jenkins@review.openstack.org> | 2015-07-07 18:16:56 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2015-07-07 18:16:56 +0000 |
| commit | 6998aaf891cb5cda414efc3f3771e1e0b34e6c51 (patch) | |
| tree | 1693a3c692fad179b7c95d185370144c381d0f5f | |
| parent | 75e01a2fb2f635f208ede80608a4c811c15a47ad (diff) | |
| parent | 39e6075f2902a56ce133d5f80703ce0e486d7446 (diff) | |
| download | kolla-6998aaf891cb5cda414efc3f3771e1e0b34e6c51.tar.gz kolla-6998aaf891cb5cda414efc3f3771e1e0b34e6c51.zip | |
Merge "make merge_configs idempotent"
| -rw-r--r-- | ansible/library/merge_configs | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/ansible/library/merge_configs b/ansible/library/merge_configs index b1baeb3d1..61d667be7 100644 --- a/ansible/library/merge_configs +++ b/ansible/library/merge_configs @@ -14,9 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# TODO(SamYaple): Provide idempotency for module (Note to self: pull logic from -# pervious bslurp module in yaodu) - DOCUMENTATION = ''' --- module: merge_configs @@ -54,6 +51,8 @@ Merge multiple configs: ''' import ConfigParser +from hashlib import sha1 +from StringIO import StringIO def main(): module = AnsibleModule( @@ -67,17 +66,27 @@ def main(): sources = module.params.pop('sources') dest = module.params.pop('dest') + changed = False + dest_digest = None + fakedest = StringIO() + config = ConfigParser.ConfigParser() for source_file in sources: config.read(source_file) - with open(dest, 'wb') as dest_file: - config.write(dest_file) + if os.path.exists(dest) and os.access(dest, os.R_OK): + config.write(fakedest) + with open(dest, 'rb') as f: + dest_digest = sha1(f.read()).hexdigest() + + if dest_digest != sha1(fakedest.getvalue()).hexdigest(): + changed = True + with open(dest, 'wb') as f: + config.write(f) - module.exit_json(changed=True) + module.exit_json(changed=changed) except Exception, e: - changed = True module.exit_json(failed=True, changed=changed, msg=repr(e)) |
