def add_remote(gitrepo,name): with settings(warn_only=True): assert len(env.hosts)==1 user = run("whoami") if user != "deploy": print "Error, try running as deploy user" return import os.path print 'env',env gitrepo = os.path.expanduser(gitrepo) gitrepo = os.path.abspath(gitrepo) bname = run("basename {GITREPO}".format(GITREPO=gitrepo))+"-"+name print "bname is",bname namepath = "~/deploy/{NAME}".format(NAME=bname) run("rm -rf {NAMEPATH}".format(NAMEPATH=namepath)) run("mkdir ~/deploy") run("mkdir {NAMEPATH}".format(NAMEPATH=namepath)) run("mkdir {NAMEPATH}/bare".format(NAMEPATH=namepath)) run("mkdir {NAMEPATH}/work".format(NAMEPATH=namepath)) with cd("{NAMEPATH}/bare".format(NAMEPATH=namepath)): run("git init --bare") import os.path scissors_drop = os.path.join(os.path.dirname(__file__),"scissors.drop") drop = open(scissors_drop).read() util.putstring(drop,"{NAMEPATH}/bare/hooks/post-receive".format(NAMEPATH=namepath)) run("chmod +x {NAMEPATH}/bare/hooks/post-receive".format(NAMEPATH=namepath)) print "host is",env.hosts[0] local("cd {GITREPO} && git remote add {NAME} deploy@{SERVER}:{NAMEPATH}/bare".format(GITREPO=gitrepo,NAME=name,NAMEPATH=namepath,SERVER=env.hosts[0]))
def autoupgrade(): util.debian_install("unattended-upgrades") util.putstring( """APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::AutocleanInterval "7"; APT::Periodic::Unattended-Upgrade "1";""", "/etc/apt/apt.conf.d/10periodic")
def add_remote(gitrepo, name): with settings(warn_only=True): assert len(env.hosts) == 1 user = run("whoami") if user != "deploy": print "Error, try running as deploy user" return import os.path print 'env', env gitrepo = os.path.expanduser(gitrepo) gitrepo = os.path.abspath(gitrepo) bname = run("basename {GITREPO}".format(GITREPO=gitrepo)) + "-" + name print "bname is", bname namepath = "~/deploy/{NAME}".format(NAME=bname) run("rm -rf {NAMEPATH}".format(NAMEPATH=namepath)) run("mkdir ~/deploy") run("mkdir {NAMEPATH}".format(NAMEPATH=namepath)) run("mkdir {NAMEPATH}/bare".format(NAMEPATH=namepath)) run("mkdir {NAMEPATH}/work".format(NAMEPATH=namepath)) with cd("{NAMEPATH}/bare".format(NAMEPATH=namepath)): run("git init --bare") import os.path scissors_drop = os.path.join(os.path.dirname(__file__), "scissors.drop") drop = open(scissors_drop).read() util.putstring( drop, "{NAMEPATH}/bare/hooks/post-receive".format(NAMEPATH=namepath)) run("chmod +x {NAMEPATH}/bare/hooks/post-receive".format( NAMEPATH=namepath)) print "host is", env.hosts[0] local( "cd {GITREPO} && git remote add {NAME} deploy@{SERVER}:{NAMEPATH}/bare" .format(GITREPO=gitrepo, NAME=name, NAMEPATH=namepath, SERVER=env.hosts[0]))
def code_drop(WORKING_TREE): GIT_REPO=WORKING_TREE+"/git" with settings(warn_only=True): run("mkdir " + WORKING_TREE) run("mkdir "+GIT_REPO) run("mkdir " + WORKING_TREE+"/log") drop = open("code.drop").read() with cd(GIT_REPO): run("git init --bare") drop = drop.format(GIT_REPO=GIT_REPO,WORKING_TREE=WORKING_TREE) putstring(drop,GIT_REPO+"/hooks/post-receive") run("chmod +x " + GIT_REPO + "/hooks/post-receive")
def add_remote(gitrepo, name,rm=False): with settings(warn_only=True): assert len(env.hosts) == 1 user = run("whoami") if user != "deploy": print "Error, try running as deploy user" return import os.path print 'env', env gitrepo = os.path.expanduser(gitrepo) gitrepo = os.path.abspath(gitrepo) bname = run("basename {GITREPO}".format(GITREPO=gitrepo)) + "-" + name bname = bname.lower() import re match = re.match("[a-z0-9\-\_\.]+", bname) if not match: print("Name %s contains some invalid characters" % bname) sys.exit(1) if match.endpos != len(bname): print("Name %s contains some invalid characters" & bname) sys.exit(1) print "bname is", bname namepath = "~/deploy/{NAME}".format(NAME=bname) if rm: run("rm -rf {NAMEPATH}".format(NAMEPATH=namepath)) run("mkdir ~/deploy") run("mkdir {NAMEPATH}".format(NAMEPATH=namepath)) run("mkdir {NAMEPATH}/bare".format(NAMEPATH=namepath)) run("mkdir {NAMEPATH}/work".format(NAMEPATH=namepath)) with cd("{NAMEPATH}/bare".format(NAMEPATH=namepath)): run("git init --bare") import os.path scissors_drop = os.path.join(os.path.dirname(__file__), "scissors.drop") drop = open(scissors_drop).read() util.putstring( drop, "{NAMEPATH}/bare/hooks/post-receive".format(NAMEPATH=namepath)) run("chmod +x {NAMEPATH}/bare/hooks/post-receive".format(NAMEPATH=namepath)) print "host is", env.hosts[0] local("cd {GITREPO} && git remote add {NAME} {SERVER}:{NAMEPATH}/bare".format( GITREPO=gitrepo, NAME=name, NAMEPATH=namepath, SERVER=env.hosts[0]))
def autoupgrade(): util.debian_install("unattended-upgrades") util.putstring("""APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::AutocleanInterval "7"; APT::Periodic::Unattended-Upgrade "1";""","/etc/apt/apt.conf.d/10periodic")
def init_setup(): util.putstring( """#!/bin/sh # https://launchpad.net/~dotcloud/+archive/lxc-docker/+packages ### BEGIN INIT INFO # Provides: docker # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: autofs $network $named alsa-utils pulseaudio # Should-Stop: autofs $network $named alsa-utils pulseaudio # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Music Player Daemon # Description: Start the docker daemon ### END INIT INFO . /lib/lsb/init-functions PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=docker DESC="docker daemon" DAEMON=/usr/local/bin/docker PIDFILE=/var/run/docker.pid DOCKER_OPTS="-d=true" docker_start () { log_action_msg "Starting $DESC" "$NAME" set -e start-stop-daemon --background --start --quiet --oknodo --pidfile "$PIDFILE" \ --exec "$DAEMON" -- $DOCKER_OPTS echo $? log_end_msg $? } docker_stop () { log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --quiet --oknodo --retry 5 --pidfile "$PIDFILE" \ --exec $DAEMON log_end_msg $? } case "$1" in start) docker_start ;; stop) docker_stop ;; status) status_of_proc -p $PIDFILE $DAEMON $NAME ;; restart|force-reload) docker_stop docker_start ;; force-start) docker_start ;; force-restart) docker_stop docker_start ;; force-reload) docker_stop docker_start ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 2 ;; esac""", "/etc/init.d/docker") run("chmod +x /etc/init.d/docker") run("insserv docker")
def install_teamcity_agent(url="https://teamcity.drewcrawfordapps.com:8111", port=9091,user="******"): if util.what_system() != util.DARWIN: raise Exception("Not implemented") run("curl -O http://teamcity.drewcrawfordapps.com:8111/update/buildAgent.zip") run("unzip -d buildAgent buildAgent.zip") util.putstring(what="""## TeamCity build agent configuration file ###################################### # Required Agent Properties # ###################################### ## The address of the TeamCity server. The same as is used to open TeamCity web interface in the browser. serverUrl={URL} ## The unique name of the agent used to identify this agent on the TeamCity server ## Use blank name to let server generate it. By default, this name would be created from the build agent's host name name= ## Container directory to create default checkout directories for the build configurations. workDir=../work ## Container directory for the temporary directories. ## Please note that the directory may be cleaned between the builds. tempDir=../temp ## Container directory for agent system files systemDir=../system ###################################### # Optional Agent Properties # ###################################### ## The IP address which will be used by TeamCity server to connect to the build agent. ## If not specified, it is detected by build agent automatically, ## but if the machine has several network interfaces, automatic detection may fail. #ownAddress=<own IP address or server-accessible domain name> ## Optional ## A port that TeamCity server will use to connect to the agent. ## Please make sure that incoming connections for this port ## are allowed on the agent computer (e.g. not blocked by a firewall) ownPort={PORT} ## A token which is used to identify this agent on the TeamCity server. ## It is automatically generated and saved on the first agent connection to the server. authorizationToken= ###################################### # Default Build Properties # ###################################### ## All properties starting with "system.name" will be passed to the build script as "name" ## All properties starting with "env.name" will be set as environment variable "name" for the build process ## Note that value should be properly escaped. (use "\\" to represent single backslash ("\")) ## More on file structure: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html#load(java.io.InputStream) # Build Script Properties #system.exampleProperty=example Value # Environment Variables #env.exampleEnvVar=example Env Value""".format(URL=url, PORT=port), where="buildAgent/conf/buildAgent.properties") util.putstring(what="""<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.dca.teamcity-agent</string> <key>OnDemand</key> <false/> <key>UserName</key> <string>{USER}</string> <key>WorkingDirectory</key> <string>/Users/{USER}/buildAgent</string> <key>KeepAlive</key> <true/> <key>ProgramArguments</key> <array> <string>bin/agent.sh</string> <string>run</string> </array> <key>StandardErrorPath</key> <string>logs/launchd.err.log</string> <key>StandardOutPath</key> <string>logs/launchd.out.log</string> <key>RunAtLoad</key> <true/> <key>SessionCreate</key> <true/> </dict> </plist>""".format(USER=user), where="plist") sudo("mv plist /Library/LaunchAgents/com.dca.teamcity-agent.plist") run("chmod +x buildAgent/bin/agent.sh") sudo("chown root:admin /Library/LaunchAgents/com.dca.teamcity-agent.plist") sudo("launchctl load /Library/LaunchAgents/com.dca.teamcity-agent.plist") print "You may need to manually punch a hole that forwards port %s" % port
def init_setup(): util.putstring("""#!/bin/sh # https://launchpad.net/~dotcloud/+archive/lxc-docker/+packages ### BEGIN INIT INFO # Provides: docker # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: autofs $network $named alsa-utils pulseaudio # Should-Stop: autofs $network $named alsa-utils pulseaudio # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Music Player Daemon # Description: Start the docker daemon ### END INIT INFO . /lib/lsb/init-functions PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=docker DESC="docker daemon" DAEMON=/usr/bin/docker PIDFILE=/var/run/docker.pid DOCKER_OPTS="-d=true" docker_start () { log_action_msg "Starting $DESC" "$NAME" set -e start-stop-daemon --background --start --quiet --oknodo --pidfile "$PIDFILE" \ --exec "$DAEMON" -- $DOCKER_OPTS echo $? log_end_msg $? } docker_stop () { log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --quiet --oknodo --retry 5 --pidfile "$PIDFILE" \ --exec $DAEMON log_end_msg $? } case "$1" in start) docker_start ;; stop) docker_stop ;; status) status_of_proc -p $PIDFILE $DAEMON $NAME ;; restart|force-reload) docker_stop docker_start ;; force-start) docker_start ;; force-restart) docker_stop docker_start ;; force-reload) docker_stop docker_start ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 2 ;; esac""", "/etc/init.d/docker") run("chmod +x /etc/init.d/docker") run("insserv docker")