make merge_configs idempotent
merge_configs can now check if the destination file has the same content will be written. This information is used to inform ansible no change has occured Closes-Bug: 1471514 Change-Id: I78bce04505349d5aafbb027fd3f7d76ab6eccf6a
This commit is contained in:
parent
1c5988e642
commit
39e6075f29
@ -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()
|
||||
|
||||
module.exit_json(changed=True)
|
||||
if dest_digest != sha1(fakedest.getvalue()).hexdigest():
|
||||
changed = True
|
||||
with open(dest, 'wb') as f:
|
||||
config.write(f)
|
||||
|
||||
module.exit_json(changed=changed)
|
||||
except Exception, e:
|
||||
changed = True
|
||||
module.exit_json(failed=True, changed=changed, msg=repr(e))
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user