Fix directory creation for blueprints
Depending on how lorax-composer is run setting up an empty blueprints directory can fail. So this moves checking/creation until after the other directories are created and uses make_owned_dir to make sure ownership is correct.
This commit is contained in:
parent
1a7b6c74b4
commit
9c758c7c4b
@ -37,7 +37,7 @@ from gevent.pywsgi import WSGIServer
|
|||||||
|
|
||||||
from pylorax import vernum
|
from pylorax import vernum
|
||||||
from pylorax.api.cmdline import lorax_composer_parser
|
from pylorax.api.cmdline import lorax_composer_parser
|
||||||
from pylorax.api.config import configure, make_dnf_dirs, make_queue_dirs
|
from pylorax.api.config import configure, make_dnf_dirs, make_queue_dirs, make_owned_dir
|
||||||
from pylorax.api.compose import test_templates
|
from pylorax.api.compose import test_templates
|
||||||
from pylorax.api.dnfbase import DNFLock
|
from pylorax.api.dnfbase import DNFLock
|
||||||
from pylorax.api.queue import start_queue_monitor
|
from pylorax.api.queue import start_queue_monitor
|
||||||
@ -185,12 +185,6 @@ if __name__ == '__main__':
|
|||||||
server.config["COMPOSER_CFG"] = configure(conf_file=opts.config)
|
server.config["COMPOSER_CFG"] = configure(conf_file=opts.config)
|
||||||
server.config["COMPOSER_CFG"].set("composer", "tmp", opts.tmp)
|
server.config["COMPOSER_CFG"].set("composer", "tmp", opts.tmp)
|
||||||
|
|
||||||
# Make sure the git repo can be accessed by the API uid/gid
|
|
||||||
if os.path.exists(opts.BLUEPRINTS):
|
|
||||||
repodir_stat = os.stat(opts.BLUEPRINTS)
|
|
||||||
if repodir_stat.st_gid != gid or repodir_stat.st_uid != uid:
|
|
||||||
subprocess.call(["chown", "-R", "%s:%s" % (opts.user, opts.group), opts.BLUEPRINTS])
|
|
||||||
|
|
||||||
# If the user passed in a releasever set it in the configuration
|
# If the user passed in a releasever set it in the configuration
|
||||||
if opts.releasever:
|
if opts.releasever:
|
||||||
server.config["COMPOSER_CFG"].set("composer", "releasever", opts.releasever)
|
server.config["COMPOSER_CFG"].set("composer", "releasever", opts.releasever)
|
||||||
@ -213,6 +207,14 @@ if __name__ == '__main__':
|
|||||||
# Make sure dnf directories are created (owned by user:group)
|
# Make sure dnf directories are created (owned by user:group)
|
||||||
make_dnf_dirs(server.config["COMPOSER_CFG"], uid, gid)
|
make_dnf_dirs(server.config["COMPOSER_CFG"], uid, gid)
|
||||||
|
|
||||||
|
# Make sure the git repo can be accessed by the API uid/gid
|
||||||
|
if os.path.exists(opts.BLUEPRINTS):
|
||||||
|
repodir_stat = os.stat(opts.BLUEPRINTS)
|
||||||
|
if repodir_stat.st_gid != gid or repodir_stat.st_uid != uid:
|
||||||
|
subprocess.call(["chown", "-R", "%s:%s" % (opts.user, opts.group), opts.BLUEPRINTS])
|
||||||
|
else:
|
||||||
|
make_owned_dir(opts.BLUEPRINTS, uid, gid)
|
||||||
|
|
||||||
# Did systemd pass any extra fds (for socket activation)?
|
# Did systemd pass any extra fds (for socket activation)?
|
||||||
try:
|
try:
|
||||||
fds = int(os.environ['LISTEN_FDS'])
|
fds = int(os.environ['LISTEN_FDS'])
|
||||||
@ -244,6 +246,14 @@ if __name__ == '__main__':
|
|||||||
# Switch to a home directory we can access (libgit2 uses this to look for .gitconfig)
|
# Switch to a home directory we can access (libgit2 uses this to look for .gitconfig)
|
||||||
os.environ["HOME"] = server.config["COMPOSER_CFG"].get("composer", "lib_dir")
|
os.environ["HOME"] = server.config["COMPOSER_CFG"].get("composer", "lib_dir")
|
||||||
|
|
||||||
|
# Setup access to the git repo
|
||||||
|
server.config["REPO_DIR"] = opts.BLUEPRINTS
|
||||||
|
repo = open_or_create_repo(server.config["REPO_DIR"])
|
||||||
|
server.config["GITLOCK"] = GitLock(repo=repo, lock=Lock(), dir=opts.BLUEPRINTS)
|
||||||
|
|
||||||
|
# Import example blueprints
|
||||||
|
commit_recipe_directory(server.config["GITLOCK"].repo, "master", opts.BLUEPRINTS)
|
||||||
|
|
||||||
# Get a dnf.Base to share with the requests
|
# Get a dnf.Base to share with the requests
|
||||||
try:
|
try:
|
||||||
server.config["DNFLOCK"] = DNFLock(server.config["COMPOSER_CFG"])
|
server.config["DNFLOCK"] = DNFLock(server.config["COMPOSER_CFG"])
|
||||||
@ -255,14 +265,6 @@ if __name__ == '__main__':
|
|||||||
with server.config["DNFLOCK"].lock:
|
with server.config["DNFLOCK"].lock:
|
||||||
server.config["TEMPLATE_ERRORS"] = test_templates(server.config["DNFLOCK"].dbo, server.config["COMPOSER_CFG"].get("composer", "share_dir"))
|
server.config["TEMPLATE_ERRORS"] = test_templates(server.config["DNFLOCK"].dbo, server.config["COMPOSER_CFG"].get("composer", "share_dir"))
|
||||||
|
|
||||||
# Setup access to the git repo
|
|
||||||
server.config["REPO_DIR"] = opts.BLUEPRINTS
|
|
||||||
repo = open_or_create_repo(server.config["REPO_DIR"])
|
|
||||||
server.config["GITLOCK"] = GitLock(repo=repo, lock=Lock(), dir=opts.BLUEPRINTS)
|
|
||||||
|
|
||||||
# Import example blueprints
|
|
||||||
commit_recipe_directory(server.config["GITLOCK"].repo, "master", opts.BLUEPRINTS)
|
|
||||||
|
|
||||||
log.info("Starting %s on %s with blueprints from %s", VERSION, opts.socket, opts.BLUEPRINTS)
|
log.info("Starting %s on %s with blueprints from %s", VERSION, opts.socket, opts.BLUEPRINTS)
|
||||||
http_server = WSGIServer(listener, server, log=LogWrapper(server_log))
|
http_server = WSGIServer(listener, server, log=LogWrapper(server_log))
|
||||||
# The server writes directly to a file object, so point to our log directory
|
# The server writes directly to a file object, so point to our log directory
|
||||||
|
Loading…
Reference in New Issue
Block a user