aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-07-07 18:16:56 +0000
committerGerrit Code Review <review@openstack.org>2015-07-07 18:16:56 +0000
commit6998aaf891cb5cda414efc3f3771e1e0b34e6c51 (patch)
tree1693a3c692fad179b7c95d185370144c381d0f5f
parent75e01a2fb2f635f208ede80608a4c811c15a47ad (diff)
parent39e6075f2902a56ce133d5f80703ce0e486d7446 (diff)
downloadkolla-6998aaf891cb5cda414efc3f3771e1e0b34e6c51.tar.gz
kolla-6998aaf891cb5cda414efc3f3771e1e0b34e6c51.zip
Merge "make merge_configs idempotent"
-rw-r--r--ansible/library/merge_configs23
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))