Fix permissions for jsonfile cache plugin
By default jsonfile uses mkstemp to create temporary file and it gets 0700 permissions. Explicitly run chmod to fix permissions.
This commit is contained in:
parent
2036276402
commit
f1dce581c3
3 changed files with 65 additions and 1 deletions
61
plugins/cache/jsonfile_fix.py
vendored
Normal file
61
plugins/cache/jsonfile_fix.py
vendored
Normal file
|
@ -0,0 +1,61 @@
|
|||
__metaclass__ = type
|
||||
|
||||
DOCUMENTATION = '''
|
||||
options:
|
||||
_uri:
|
||||
required: True
|
||||
description:
|
||||
- Path in which the cache plugin will save the JSON files
|
||||
env:
|
||||
- name: ANSIBLE_CACHE_PLUGIN_CONNECTION
|
||||
ini:
|
||||
- key: fact_caching_connection
|
||||
section: defaults
|
||||
type: path
|
||||
_prefix:
|
||||
description: User defined prefix to use when creating the JSON files
|
||||
env:
|
||||
- name: ANSIBLE_CACHE_PLUGIN_PREFIX
|
||||
ini:
|
||||
- key: fact_caching_prefix
|
||||
section: defaults
|
||||
_timeout:
|
||||
default: 86400
|
||||
description: Expiration timeout for the cache plugin data
|
||||
env:
|
||||
- name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
|
||||
ini:
|
||||
- key: fact_caching_timeout
|
||||
section: defaults
|
||||
type: integer
|
||||
'''
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
from ansible.plugins.cache.jsonfile import CacheModule as JsonCacheModule
|
||||
|
||||
|
||||
class CacheModule(JsonCacheModule):
|
||||
|
||||
def set(self, key, value):
|
||||
|
||||
self._cache[key] = value
|
||||
|
||||
cachefile = self._get_cache_file_name(key)
|
||||
tmpfile_handle, tmpfile_path = tempfile.mkstemp(dir=os.path.dirname(cachefile))
|
||||
try:
|
||||
try:
|
||||
self._dump(value, tmpfile_path)
|
||||
except (OSError, IOError) as e:
|
||||
display.warning("error in '%s' cache plugin while trying to write to '%s' : %s" % (self.plugin_name, tmpfile_path, to_bytes(e)))
|
||||
try:
|
||||
os.chmod(tmpfile_path, 0o644)
|
||||
os.rename(tmpfile_path, cachefile)
|
||||
except (OSError, IOError) as e:
|
||||
display.warning("error in '%s' cache plugin while trying to move '%s' to '%s' : %s" % (self.plugin_name, tmpfile_path, cachefile, to_bytes(e)))
|
||||
finally:
|
||||
try:
|
||||
os.unlink(tmpfile_path)
|
||||
except OSError:
|
||||
pass
|
Loading…
Add table
Add a link
Reference in a new issue