Example #1
0
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]))
Example #2
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")
Example #3
0
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]))
Example #4
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")
Example #5
0
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]))
Example #6
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")
Example #7
0
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")
Example #8
0
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
Example #9
0
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")