1) Modified error handling to work with Python 2.4. 2) Fixed octal codes to fall in line with the ansible guide, "Porting Modules to Python 3" 3) updated the requirements. All changes have been verified against Python 2.4, 2.6, & 3.5.
This commit is contained in:
parent
570defc6d8
commit
7af767f435
1 changed files with 27 additions and 16 deletions
|
@ -64,7 +64,7 @@ options:
|
|||
notes:
|
||||
- See the advanced playbooks chapter for more about using accelerated mode.
|
||||
requirements:
|
||||
- "python >= 2.6"
|
||||
- "python >= 2.4"
|
||||
- "python-keyczar"
|
||||
author: "James Cammarata (@jimi-c)"
|
||||
'''
|
||||
|
@ -168,9 +168,10 @@ def daemonize_self(module, password, port, minutes, pid_file):
|
|||
vvv("exiting pid %s" % pid)
|
||||
# exit first parent
|
||||
module.exit_json(msg="daemonized accelerate on port %s for %s minutes with pid %s" % (port, minutes, str(pid)))
|
||||
except OSError as e:
|
||||
log("fork #1 failed: %d (%s)" % (e.errno, e.strerror))
|
||||
sys.exit(1)
|
||||
except OSError:
|
||||
e = get_exception()
|
||||
message = "fork #2 failed: {} ({})".format(e.errno, e.strerror)
|
||||
module.fail_json(message)
|
||||
|
||||
# decouple from parent environment
|
||||
os.chdir("/")
|
||||
|
@ -187,9 +188,10 @@ def daemonize_self(module, password, port, minutes, pid_file):
|
|||
pid_file.close()
|
||||
vvv("pid file written")
|
||||
sys.exit(0)
|
||||
except OSError as e:
|
||||
log("fork #2 failed: %d (%s)" % (e.errno, e.strerror))
|
||||
sys.exit(1)
|
||||
except OSError:
|
||||
e = get_exception()
|
||||
message = 'fork #2 failed: {} ({})'.format(e.errno, e.strerror)
|
||||
module.fail_json(message)
|
||||
|
||||
dev_null = file('/dev/null','rw')
|
||||
os.dup2(dev_null.fileno(), sys.stdin.fileno())
|
||||
|
@ -219,9 +221,9 @@ class LocalSocketThread(Thread):
|
|||
# make sure the directory is accessible only to this
|
||||
# user, as socket files derive their permissions from
|
||||
# the directory that contains them
|
||||
os.chmod(dir, Oo700)
|
||||
os.chmod(dir, int('0700', 8))
|
||||
elif not os.path.exists(dir):
|
||||
os.makedirs(dir, Oo700)
|
||||
os.makedirs(dir, int('O700', 8))
|
||||
except OSError:
|
||||
pass
|
||||
self.s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
|
@ -260,7 +262,8 @@ class LocalSocketThread(Thread):
|
|||
self.server.last_event = datetime.datetime.now()
|
||||
finally:
|
||||
self.server.last_event_lock.release()
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
e = get_exception()
|
||||
vv("key loaded locally was invalid, ignoring (%s)" % e)
|
||||
conn.sendall("BADKEY\n")
|
||||
finally:
|
||||
|
@ -520,7 +523,8 @@ class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
|
|||
if response.get('failed',False):
|
||||
log("got a failed response from the master")
|
||||
return dict(failed=True, stderr="Master reported failure, aborting transfer")
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
e = get_exception()
|
||||
fd.close()
|
||||
tb = traceback.format_exc()
|
||||
log("failed to fetch the file: %s" % tb)
|
||||
|
@ -541,7 +545,7 @@ class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
|
|||
tmp_path = os.path.expanduser('~/.ansible/tmp/')
|
||||
if not os.path.exists(tmp_path):
|
||||
try:
|
||||
os.makedirs(tmp_path, Oo700)
|
||||
os.makedirs(tmp_path, int('O700', 8))
|
||||
except:
|
||||
return dict(failed=True, msg='could not create a temporary directory at %s' % tmp_path)
|
||||
(fd,out_path) = tempfile.mkstemp(prefix='ansible.', dir=tmp_path)
|
||||
|
@ -618,7 +622,8 @@ def daemonize(module, password, port, timeout, minutes, use_ipv6, pid_file):
|
|||
server = ThreadedTCPServer(address, ThreadedTCPRequestHandler, module, password, timeout, use_ipv6=use_ipv6)
|
||||
server.allow_reuse_address = True
|
||||
break
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
e = get_exception()
|
||||
vv("Failed to create the TCP server (tries left = %d) (error: %s) " % (tries,e))
|
||||
tries -= 1
|
||||
time.sleep(0.2)
|
||||
|
@ -641,7 +646,8 @@ def daemonize(module, password, port, timeout, minutes, use_ipv6, pid_file):
|
|||
|
||||
v("server thread terminated, exiting!")
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
e = get_exception()
|
||||
tb = traceback.format_exc()
|
||||
log("exception caught, exiting accelerated mode: %s\n%s" % (e, tb))
|
||||
sys.exit(0)
|
||||
|
@ -685,11 +691,16 @@ def main():
|
|||
# process, other than tell the calling program
|
||||
# whether other signals can be sent
|
||||
os.kill(daemon_pid, 0)
|
||||
except OSError as e:
|
||||
except OSError:
|
||||
e = get_exception()
|
||||
message = 'the accelerate daemon appears to be running'
|
||||
message += 'as a different user that this user cannot access'
|
||||
message += 'pid={}'.format(daemon_pid)
|
||||
|
||||
if e.errno == errno.EPERM:
|
||||
# no permissions means the pid is probably
|
||||
# running, but as a different user, so fail
|
||||
module.fail_json(msg="the accelerate daemon appears to be running as a different user that this user cannot access (pid=%d)" % daemon_pid)
|
||||
module.fail_json(msg=message)
|
||||
else:
|
||||
daemon_running = True
|
||||
except ValueError:
|
||||
|
|
Loading…
Reference in a new issue