Fix an openshift issue writing the inventory file

Openshift was throwing an error here, though I'm not sure why it makes
a whole lot of difference to call fdopen() vs open(). This was
introduced when this method was unified under the new
ansible-inventory system. This fixes it for all cases. mkstemp(),
while not necessary, is a useful addition to keep from leaking
inventory details unnecessarily.
This commit is contained in:
Matthew Jones 2017-11-15 13:12:54 -05:00
parent 65d01d508b
commit 03eca250d9
No known key found for this signature in database
GPG Key ID: 76A4C17A97590C1C

View File

@ -678,11 +678,12 @@ class BaseTask(LogErrorsTask):
return False
def build_inventory(self, instance, **kwargs):
path = os.path.join(kwargs['private_data_dir'], 'inventory')
with open(path, 'w') as f:
json_data = json.dumps(instance.inventory.get_script_data(hostvars=True))
f.write('#! /usr/bin/env python\n# -*- coding: utf-8 -*-\nprint %r\n' % json_data)
os.chmod(path, stat.S_IRUSR | stat.S_IXUSR)
json_data = json.dumps(instance.inventory.get_script_data(hostvars=True))
handle, path = tempfile.mkstemp(dir=kwargs.get('private_data_dir', None))
f = os.fdopen(handle, 'w')
f.write('#! /usr/bin/env python\n# -*- coding: utf-8 -*-\nprint %r\n' % json_data)
f.close()
os.chmod(path, stat.S_IRUSR | stat.S_IXUSR | stat.S_IWUSR)
return path
def build_args(self, instance, **kwargs):