Make lock path snap specific

As snaps only write out to snap specific locations, create locks
scoped to the individual snap, not globally for all snaps.

Change-Id: Ife03fb66eb97b89040495ffa51e867adca10a3a1
This commit is contained in:
James Page 2017-05-18 14:08:04 +01:00
parent ba1ecfee7b
commit acdfc97bda

View File

@ -53,8 +53,6 @@ class OpenStackSnap(object):
with open(config_file, 'r') as config:
self.configuration = yaml.load(config)
@lockutils.synchronized('setup.lock', external=True,
lock_path="/var/lock/snap-openstack")
def setup(self):
'''Perform any pre-execution snap setup
@ -64,69 +62,77 @@ class OpenStackSnap(object):
renderer = SnapFileRenderer()
utils = SnapUtils()
LOG.debug(setup)
lock_file = "{snap_data}/snap-openstack".format(**utils.snap_env)
if 'users' in setup.keys():
for user, groups in setup['users'].items():
home = os.path.join("{snap_common}".format(**utils.snap_env),
"lib", user)
utils.add_user(user, groups, home)
with lockutils.lock('setup.lock', external=True,
lock_path=lock_file):
if 'users' in setup.keys():
for user, groups in setup['users'].items():
home = os.path.join(
"{snap_common}".format(**utils.snap_env),
"lib", user
)
utils.add_user(user, groups, home)
default_owner = setup.get('default-owner', DEFAULT_OWNER)
default_user, default_group = default_owner.split(':')
default_dir_mode = setup.get('default-dir-mode', DEFAULT_DIR_MODE)
default_file_mode = setup.get('default-file-mode', DEFAULT_FILE_MODE)
default_owner = setup.get('default-owner', DEFAULT_OWNER)
default_user, default_group = default_owner.split(':')
default_dir_mode = setup.get('default-dir-mode',
DEFAULT_DIR_MODE)
default_file_mode = setup.get('default-file-mode',
DEFAULT_FILE_MODE)
for directory in setup.get('dirs', []):
dir_name = directory.format(**utils.snap_env)
utils.ensure_dir(dir_name, perms=default_dir_mode)
utils.rchmod(dir_name, default_dir_mode, default_file_mode)
utils.rchown(dir_name, default_user, default_group)
for directory in setup.get('dirs', []):
dir_name = directory.format(**utils.snap_env)
utils.ensure_dir(dir_name, perms=default_dir_mode)
utils.rchmod(dir_name, default_dir_mode, default_file_mode)
utils.rchown(dir_name, default_user, default_group)
if 'copyfiles' in setup.keys():
for source, target in setup['copyfiles'].items():
source_dir = source.format(**utils.snap_env)
dest_dir = target.format(**utils.snap_env)
for source_name in os.listdir(source_dir):
s_file = os.path.join(source_dir, source_name)
d_file = os.path.join(dest_dir, source_name)
if not os.path.isfile(s_file):
continue
LOG.debug('Copying file {} to {}'.format(s_file, d_file))
shutil.copy2(s_file, d_file)
utils.chmod(d_file, default_file_mode)
utils.chown(d_file, default_user, default_group)
if 'copyfiles' in setup.keys():
for source, target in setup['copyfiles'].items():
source_dir = source.format(**utils.snap_env)
dest_dir = target.format(**utils.snap_env)
for source_name in os.listdir(source_dir):
s_file = os.path.join(source_dir, source_name)
d_file = os.path.join(dest_dir, source_name)
if not os.path.isfile(s_file):
continue
LOG.debug('Copying file {} to {}'.format(s_file,
d_file))
shutil.copy2(s_file, d_file)
utils.chmod(d_file, default_file_mode)
utils.chown(d_file, default_user, default_group)
for template in setup.get('templates', []):
target = setup['templates'][template]
target_file = target.format(**utils.snap_env)
utils.ensure_dir(target_file, is_file=True)
LOG.debug('Rendering {} to {}'.format(template,
target_file))
with open(target_file, 'w') as tf:
tf.write(renderer.render(template, utils.snap_env))
utils.chmod(target_file, default_file_mode)
utils.chown(target_file, default_user, default_group)
for template in setup.get('templates', []):
target = setup['templates'][template]
target_file = target.format(**utils.snap_env)
utils.ensure_dir(target_file, is_file=True)
LOG.debug('Rendering {} to {}'.format(template,
target_file))
with open(target_file, 'w') as tf:
tf.write(renderer.render(template, utils.snap_env))
utils.chmod(target_file, default_file_mode)
utils.chown(target_file, default_user, default_group)
for target in setup.get('rchown', []):
target_path = target.format(**utils.snap_env)
user, group = setup['rchown'][target].split(':')
utils.rchown(target_path, user, group)
for target in setup.get('rchown', []):
target_path = target.format(**utils.snap_env)
user, group = setup['rchown'][target].split(':')
utils.rchown(target_path, user, group)
for target in setup.get('chmod', []):
target_path = target.format(**utils.snap_env)
if os.path.exists(target_path):
mode = setup['chmod'][target]
utils.chmod(target_path, mode)
else:
LOG.debug('Path not found: {}'.format(target_path))
for target in setup.get('chmod', []):
target_path = target.format(**utils.snap_env)
if os.path.exists(target_path):
mode = setup['chmod'][target]
utils.chmod(target_path, mode)
else:
LOG.debug('Path not found: {}'.format(target_path))
for target in setup.get('chown', []):
target_path = target.format(**utils.snap_env)
if os.path.exists(target_path):
user, group = setup['chown'][target].split(':')
utils.chown(target_path, user, group)
else:
LOG.debug('Path not found: {}'.format(target_path))
for target in setup.get('chown', []):
target_path = target.format(**utils.snap_env)
if os.path.exists(target_path):
user, group = setup['chown'][target].split(':')
utils.chown(target_path, user, group)
else:
LOG.debug('Path not found: {}'.format(target_path))
def execute(self, argv):
'''Execute snap command building out configuration and log options'''