Example #1
0
def deploy_files(version='master'):
    """
    Ensure that the directory tree exists and has the requested
    version of the site.

    """
    require('code_root', 'project_root', 'repo', 'webuser')

    files.directory(env.project_root, owner=env.webuser, use_sudo=True)
    files.directory(
        os.path.join(env.project_root, 'log'),
        owner=env.webuser,
        use_sudo=True)
    if env.environment != "vagrant" and not ffiles.exists(env.code_root):
        with cd(env.project_root):
            sudo('git clone {} source'.format(env.repo), user=env.webuser)

    # Replace remote secrets file only if we are not using Vagrant (because
    # the secrets file should be automatically synchronized) and the file
    # does not already exist on the remote server.
    if env.environment != "vagrant" and not ffiles.exists(env.remote_secrets):
        files.file(
            env.remote_secrets,
            source=os.path.join(env.deploy_dir, 'secrets.py'),
            use_sudo=True,
            owner=env.webuser)

    if env.environment != "vagrant":
        with cd(env.code_root):
            # discard any local changes to the repo
            sudo('git reset --hard', user=env.webuser)
            sudo('git checkout {}'.format(version), user=env.webuser)
            sudo('git pull', user=env.webuser)
Example #2
0
def install():
    packages([
        'build-essential',
        'php5',
        'php5-mysql',
    ], update=False)

    mysql(password="******")

    apache()
    stopped('apache2')
    site_disabled('default')
    site(
        'mylampvm.dev',
        template_source=full_path + '/templates/apache2/vhost.tpl',
        port=80,
        server_name='mylampvm.dev',
        document_root='/srv',
    )

    template_file(template_source=full_path + '/templates/apache2/envvars.tpl',
                  path='/etc/apache2/envvars',
                  context={
                      'apache_run_user': '******',
                      'apache_run_group': 'vagrant',
                  },
                  owner='root',
                  group='root',
                  use_sudo=True)
    directory('/var/lock/apache2', True, 'vagrant', 'vagrant')

    # site_enabled('mylampvm.dev')
    restarted('apache2')
Example #3
0
def install():
    packages([
        'build-essential',
        'php5',
        'php5-mysql',
    ], update=False)

    mysql(password="******")

    apache()
    stopped('apache2')
    site_disabled('default')
    site(
        'mylampvm.dev',
        template_source=full_path + '/templates/apache2/vhost.tpl',
        port=80,
        server_name='mylampvm.dev',
        document_root='/srv',
    )

    template_file(
        template_source = full_path + '/templates/apache2/envvars.tpl',
        path='/etc/apache2/envvars',
        context = {
            'apache_run_user': '******',
            'apache_run_group': 'vagrant',
        },
        owner = 'root',
        group = 'root',
        use_sudo=True
    )
    directory('/var/lock/apache2', True, 'vagrant', 'vagrant')
    
    # site_enabled('mylampvm.dev')
    restarted('apache2')
Example #4
0
def deploy(artifact_name, remote_path):
    artifact_name = str(artifact_name)
    remote_path = str(remote_path)
    print "deploying artifact: {artifact_name} to {remote_path}"\
        .format(artifact_name=artifact_name, remote_path=remote_path)

    dest_dir = remote_path + "/"

    file_extension = '.tar.gz'
    bare_artifact_name = artifact_name
    if artifact_name.endswith(file_extension):
        bare_artifact_name = artifact_name[:(-1 * len(file_extension))]
        dest_dir = dest_dir + bare_artifact_name
    else:
        dest_dir = dest_dir + artifact_name

    if bare_artifact_name in ['prev', 'current', 'next']:
        raise ValueError("sorry, {artifact_name} is not a legal artifact name because it collides "
                         "with a word reserved for symbolic links used by rainbow".format(artifact_name=artifact_name))

    # note: the request to create the remote_path should be superfluous since dest_dir contains it
    directory(path=remote_path, use_sudo=True)
    directory(path=dest_dir, use_sudo=True, owner=fabric_env.user)

    put(local_path=artifact_name, remote_path=remote_path, use_sudo=True)

    with cd(path=remote_path):
        run("tar -xvf {artifact_name} -C {dest_dir}".format(dest_dir=dest_dir, artifact_name=artifact_name))
        run_as_root("ln -nsf {dest_dir} next".format(dest_dir=dest_dir))
def create(venv=None, pyver=None):
    deb.packages(['libjpeg8', 'libjpeg8-dev', 'libfreetype6', 'libfreetype6-dev', 'zlib1g-dev'])
    validate = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
    if not env.get("new_user"):
        if env.no_input_mode:
            env.new_user = env.new_user_default
        else:
            prompt("User: "******"new_user", env.get('new_user_default', ''), validate=validate)

    if not fabtools.user.exists(env.new_user):
        prompt("Password for {0}: ".format(env.new_user), "new_passwd", '', validate=validate)
        env.home_dir = '{0}/{1}'.format(env.home_user, env.new_user)
        fabtools.user.create(env.new_user, home=env.home_dir, group=env.new_user, create_home=True, system=False,
                             shell='/bin/bash', create_group=True, password=env.new_passwd)

    if not env.get("project"):
        if env.no_input_mode:
            env.project = env.project_default
        else:
            prompt("Project name: ", "project", env.get('project_default', ''))

    if not env.get("repository"):
        if env.no_input_mode:
            env.repository = env.repository_default
        else:
            prompt("Deploy from: ", "repository", env.get('repository_default', ''))

    if not env.get("domain"):
        if env.no_input_mode:
            abort("Need set env.domain !")
        else:
            prompt("Project DNS url: ", "domain", env.get('domain_default', ''), validate=validate)
    else:
        if not re.findall(validate, env.domain):
            abort("Invalid env.domain !")

    require('repository', 'domain', 'project')
    if venv is not None:
        env.venv = venv
    else:
        prompt("Virtual ENV: ", "venv", env.get('venv_default', ''), validate=validate)
    if pyver is not None:
        env.pyver = pyver
    else:
        prompt("Python VERSION: ", "pyver", env.get('pyver_default', ''), validate=validate)
    env.virt = '{0}/{1}/{2}'.format(env.home_user, env.new_user, env.virt_home)
    pyver_dir = '{0}{1}/{2}-{3}'.format(env.python_dir, env.pyver, env.new_user, env.venv)
    files.directory(env.virt, mode='750', owner=env.new_user, group=env.new_user, use_sudo=True)
    if not is_dir(posixpath.join(env.virt, env.venv)):
        with prefix('pythonbrew use {0}'.format(env.pyver)):
            if not is_dir(pyver_dir):
                sudo('pythonbrew venv create {0}-{1}'.format(env.new_user, env.venv))
                sudo('ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so {0}/lib/'.format(pyver_dir))
                sudo('ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so {0}/lib/'.format(pyver_dir))
                sudo('ln -s /usr/lib/x86_64-linux-gnu/libz.so {0}/lib/'.format(pyver_dir))
            sudo("find {2}/venvs/ -type d -iname '{1}-{0}' -print0 | xargs -I{3} -0 chown -R --preserve-root --no-dereference {1}:pythonbrew '{3}'".format(env.venv, env.new_user, '${PYTHONBREW_ROOT}', '{}'))
            sudo('ln -s {0} {1}/'.format(pyver_dir, env.virt))
            sudo('chown -R {0}:{0} {1}'.format(env.new_user, env.virt))
Example #6
0
def mount_device(device="/dev/datavg01/datavol01",
                 mountpoint="/data/brick1",
                 fstype="ext4"):
    directory(mountpoint, use_sudo=True)
    append("/etc/fstab",
           "{0}    {1}    {2}    defaults,nosuid,nodev    1 2".format(
               device, mountpoint, fstype),
           use_sudo=True)
    mount(device, mountpoint)
    sudo("mount")
Example #7
0
def deploy_vagrant_files():
    """ ensure that the directory tree resembles production

    The Vagrantfile mounts the current working directory where
    the source directory will be in production.
    """
    require('project_root', 'webuser')
    files.directory(env.project_root, owner=env.webuser, use_sudo=True)
    files.directory(os.path.join(env.project_root, 'log'),
                    owner=env.webuser,
                    use_sudo=True)
    files.file(os.path.join(env.code_root, 'conf_site/settings/secrets.py'),
               source=os.path.join(env.deploy_dir, 'secrets.py'),
               use_sudo=True,
               owner=env.webuser)
def u(c_param='prod'):
    if c_param == 'local':
        with lcd(env.lcwd):
            if not is_dir('{0}/public/static'.format(env.lcwd)):
                #files.directory('{0}/public/static'.format(env.lcwd), mode='755')
                files.directory('public/static'.format(env.lcwd))

            for mcom in conf.get('MANAGER_COMMAND_RUN'):
                virt_comm('python ./manage.py {0}'.format(mcom).replace('/', os.path.sep))
    else:
        with cd(env.root):
            # if not is_dir('{0}/public/static'.format(env.project_dir_name)):
            #     files.directory('{0}/public/static'.format(env.project_dir_name), use_sudo=True, owner=env.project_user,
            #                     group=env.project_group, mode='755')
            #     sudo(
            #         'chown -R ' + env.project_user + ':' + env.project_group + ' db* log* public/static* public/media*')
            
            env.virt = posixpath.join(env.home_dir, env.virt_home, conf[lookup_param]['venv'])
            with prefix('pythonbrew use {0}'.format(env.pyver)):
                # django comands
                with fabtools.python.virtualenv(env.virt):
                    for mcom in conf.get('MANAGER_COMMAND_RUN'):
                        run('python ./manage.py {0}'.format(mcom))
Example #9
0
def deploy_files(version='master'):
    """ ensure that the directory tree exists and has the requested version of the site """
    require('code_root', 'project_root', 'repo', 'webuser')

    if env.environment == "vagrant":
        deploy_vagrant_files()
        return

    files.directory(env.project_root, owner=env.webuser, use_sudo=True)
    files.directory(os.path.join(env.project_root, 'log'),
                    owner=env.webuser,
                    use_sudo=True)
    if not ffiles.exists(env.code_root):
        with cd(env.project_root):
            sudo('git clone {} source'.format(env.repo), user=env.webuser)
    files.file(os.path.join(env.code_root, 'conf_site/settings/secrets.py'),
               source=os.path.join(env.deploy_dir, 'secrets.py'),
               use_sudo=True,
               owner=env.webuser)
    with cd(env.code_root):
        # discard any local changes to the repo
        sudo('git reset --hard', user=env.webuser)
        sudo('git checkout {}'.format(version), user=env.webuser)
        sudo('git pull', user=env.webuser)
Example #10
0
def push():
    """
    This function for create django site project work flow on remote server.
    Django site source cloning from remote git repository.

    NOTE: This function may be used in other fab file.
    For this need setup global `env` dict.

    **`env` settings**
    env.user - deploy user name (use for ssh)
    env.password - deploy user password (use for ssh)
    env.hosts - list deploy hosts (use for ssh)

    env.domain - django site domain (DNS) use for:
        - nginx settings
        - uWSGI start user
        - project dir name

    env.repository - remote git repository url, use for git clone site source

    env.no_input_mode - in this variable True use no input deploy mode.
        If no_input_mode==True using follow strategy:
            Abort if env.domain (env.repository) value not set or invalid.
            And using default confirm() value if needed.

    """
    # cwd => ./deploy
    env.lcwd = os.path.abspath(os.path.dirname(__file__))

    require('no_input_mode')

    #env.no_input_mode = False
    if env.no_input_mode:
        def confirm_local(question, default=True):
            puts(question)
            puts("Use no_input_mode [default: {0}]".format("Y" if default else "N"))
            return default

        confirm = confirm_local
    else:
        confirm = confirm_global

    validate = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
    if not env.get("domain"):
        if env.no_input_mode:
            abort("Need set env.domain !")
        else:
            prompt("Project DNS url: ", "domain", env.get('domain_default', ''), validate=validate)
    else:
        if not re.findall(validate, env.domain):
            abort("Invalid env.domain !")

    if not env.get("repository"):
        if env.no_input_mode:
            env.repository = env.repository_default
        else:
            prompt("Deploy from: ", "repository", env.get('repository_default', ''))

    require('repository', 'domain')

    puts("Deploy site: {0} \nFrom: {1}".format(env.domain, env.repository))
    DOMAIN_WITHOUT_DOT = env.domain.replace('.', '_')

    env.project_user = DOMAIN_WITHOUT_DOT
    env.project_group = DOMAIN_WITHOUT_DOT
    env.project_dir_name = DOMAIN_WITHOUT_DOT
    env.root = posixpath.join(PROJECTS_ROOT, env.project_dir_name)

    env.debug = True

    deb.packages(['git'])

    files.directory(PROJECTS_ROOT, use_sudo=True, owner='root', group='root', mode='755')
    with cd(PROJECTS_ROOT):
        # pip cache
        files.directory('.pip.cache', use_sudo=True, owner='deploy', group='deploy', mode='755')
        pip_cache_dir = posixpath.join(PROJECTS_ROOT, '.pip.cache')

        # proj dir create
        if is_dir(env.project_dir_name) and confirm("proj dir exist! abort ?", default=False):
            return

        files.directory(env.project_dir_name, use_sudo=True, owner='root', group='root', mode='755')

        # proj user create
        if not fabtools.user.exists(env.project_user):
            fabtools.user.create(env.project_user, home=env.root, group=env.project_group, create_home=False,
                                 system=True, shell='/bin/false', create_group=True)

        # proj infrastructure
        with cd(env.project_dir_name):
            # proj source
            if not is_dir('src') or confirm("proj src exist! [rm all and re clone / git pull]?", default=False):
                files.directory('src', use_sudo=True, owner='deploy', group='deploy', mode='755')
                with cd('src'):
                    sudo('rm -Rf .??* *')
                    sudo('git clone {repository:s} .'.format(env), user='******')
            else:
                with cd('src'):
                    sudo('git pull', user='******')

            # proj virtual env
            if not is_dir('.virtualenvs') or confirm("proj venv dir exist! [rm all and recreate / repeat install]?",
                                                     default=False):
                files.directory('.virtualenvs', use_sudo=True, owner='deploy', group='deploy', mode='755')
                with cd('.virtualenvs'):
                    sudo('rm -Rf .??* *')

            python.virtualenv('.virtualenvs', use_sudo=True, user='******', clear=True)
            with fabtools.python.virtualenv('.virtualenvs'):
                python.install_requirements('src/requirements.txt', use_mirrors=False, use_sudo=True, user='******',
                                            download_cache=pip_cache_dir)

            # ------------------- #
            # WEB SERVER SETTINGS #
            # ------------------- #

            # I`m use nginx <-> uWSGI <-> Django

            nginx.server()
            deb.packages(['uwsgi', 'uwsgi-plugin-python'])

            # proj conf!
            if not is_dir('conf') or confirm("proj conf dir exist! [backup and update? / skip]", default=False):
                files.directory('conf', use_sudo=True, owner='root', group='root', mode='755')
                with cd('conf'):
                    local_conf_templates = os.path.join(os.path.dirname(__file__), 'template', 'conf')
                    uwsgi_conf = os.path.join(local_conf_templates, 'uwsgi.ini')
                    nginx_conf = os.path.join(local_conf_templates, 'nginx.conf')

                    sudo("rm -Rf *.back")
                    sudo("ls -d *{.conf,.ini} | sed 's/.*$/mv -fu \"&\" \"\\0.back\"/' | sh")
                    files.template_file('uwsgi.ini', template_source=uwsgi_conf, context=env,
                                        use_sudo=True, owner='root', group='root', mode='644')
                    files.file('reload', use_sudo=True, owner='root', group='root')
                    sudo('ln -sf $(pwd)/uwsgi.ini /etc/uwsgi/apps-enabled/' + env.project_dir_name + '.ini')

                    files.template_file('nginx.conf', template_source=nginx_conf, context=env,
                                        use_sudo=True, owner='root', group='root', mode='644')
                    sudo('ln -sf $(pwd)/nginx.conf /etc/nginx/sites-enabled/' + env.project_dir_name)

            sudo('service nginx restart')
            sudo('service uwsgi restart')
Example #11
0
def deploy(lookup_param='prod', pip='install'):
    with cd(env.home_dir):
        files.directory(env.project_root, mode='750')
        files.directory(env.shared, mode='750')
        with cd(env.shared):
            files.directory('.pip.cache', mode='750')
            files.directory('db', mode='750')
            files.directory('log', mode='750')
            files.directory('pids', mode='750')
            files.directory('system', mode='750')
            files.directory('media', mode='750')
    with cd(env.project_root):
        git.working_copy(env.repository, env.root, branch=env.config['www']['branch'])
        with cd(env.root):
            if not exists('db'):
                run('ln -s {0}/{1} {2}/'.format(env.shared, 'db', env.root))
            if not exists('log'):
                run('ln -s {0}/{1} {2}/'.format(env.shared, 'log', env.root))
            if not exists('public/media'):
                run('ln -s {0}/{1} {2}/public/'.format(env.shared, 'media', env.root))
            execute(libs, lookup_param=lookup_param, pip=pip)
Example #12
0
def ensure_exists(path, use_sudo=False, owner=None, group=None, mode=None):
    files.directory(path, use_sudo, owner, group, mode)
Example #13
0
def ensure_exists(path, use_sudo=False, owner=None, group=None, mode=None):
    files.directory(path, use_sudo, owner, group, mode)
Example #14
0
def test():
    with cd(PROJECTS_ROOT):#     
        with settings(warn_only=True):
            run("ls -ltX")
            run('python manage.py syncdb --noinput')
            if not is_dir('src') or confirm("proj src exist!?", default=True):
                files.directory('src', mode='755')
#             


# def deploy():
#     """
#     This function for create django site project work flow on remote server.
#     Django site source cloning from remote git repository.

#     NOTE: This function may be used in other fab file.
#     For this need setup global `env` dict.

#     **`env` settings**
#     env.user - deploy user name (use for ssh)
#     env.password - deploy user password (use for ssh)
#     env.hosts - list deploy hosts (use for ssh)

#     env.domain - django site domain (DNS) use for:
#         - nginx settings
#         - uWSGI start user
#         - project dir name

#     env.repository - remote git repository url, use for git clone site source

#     env.no_input_mode - in this variable True use no input deploy mode.
#         If no_input_mode==True using follow strategy:
#             Abort if env.domain (env.repository) value not set or invalid.
#             And using default confirm() value if needed.

#     """
#     # cwd => ./deploy
#     env.lcwd = os.path.abspath(os.path.dirname(__file__))

#     require('no_input_mode')

#     #env.no_input_mode = False
#     if env.no_input_mode:
#         def confirm_local(question, default=True):
#             puts(question)
#             puts("Use no_input_mode [default: {0}]".format("Y" if default else "N"))
#             return default

#         confirm = confirm_local
#     else:
#         confirm = confirm_global

#     validate="^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
#     if not env.get("domain"):
#         if env.no_input_mode:
#             abort("Need set env.domain !")
#         else:
#             prompt("Project DNS url: ", "domain", env.get('domain_default', ''), validate=validate)
#     else:
#         if not re.findall(validate, env.domain):
#             abort("Invalid env.domain !")

#     if not env.get("repository"):
#         if env.no_input_mode:
#             env.repository = env.repository_default
#         else:
#             prompt("Deploy from: ", "repository", env.get('repository_default', ''))

#     require('repository', 'domain')

#     puts("Deploy site: {0} \nFrom: {1}".format(env.domain, env.repository))
#     DOMAIN_WITHOUT_DOT = env.domain.replace('.', '_')

#     env.project_user = DOMAIN_WITHOUT_DOT
#     env.project_group = DOMAIN_WITHOUT_DOT
#     env.project_dir_name = DOMAIN_WITHOUT_DOT
#     env.root = posixpath.join(PROJECTS_ROOT, env.project_dir_name)

#     env.debug = True

#     deb.packages(['git'])

#     if not fabtools.user.exists('deploy'):
#         fabtools.user.create('deploy', home=PROJECTS_ROOT, group='deploy', create_home=False, system=True, 
#             shell='/bin/false', create_group=True)

#     files.directory(PROJECTS_ROOT, use_sudo=True, owner='root', group='root', mode='755')
#     with cd(PROJECTS_ROOT):
#         # pip cache
#         files.directory('.pip.cache', use_sudo=True, owner='deploy', group='deploy', mode='755')
#         pip_cache_dir = posixpath.join(PROJECTS_ROOT, '.pip.cache')

#         # proj dir create
#         if is_dir(env.project_dir_name) and confirm("proj dir exist! abort ?", default=False):
#             return

#         files.directory(env.project_dir_name, use_sudo=True, owner='root', group='root', mode='755')

#         # proj user create
#         if not fabtools.user.exists(env.project_user):
#             fabtools.user.create(env.project_user, home=env.root, group=env.project_group, create_home=False, system=True, shell='/bin/false', create_group=True)

#         # proj infrastructure
#         with cd(env.project_dir_name):
#             # proj source
#             if not is_dir('src') or confirm("proj src exist! [rm all and re clone / git pull]?", default=False):
#                 files.directory('src', use_sudo=True, owner='deploy', group='deploy', mode='755')
#                 with cd('src'):
#                     sudo('rm -Rf .??* *')
#                     sudo('git clone %(repository)s .' % env, user='******')
#             else:
#                 with cd('src'):
#                     sudo('git pull', user='******')

#             # proj virtual env
#             if not is_dir('venv') or confirm("proj venv dir exist! [rm all and recreate / repeat install]?", default=False):
#                 files.directory('venv', use_sudo=True, owner='deploy', group='deploy', mode='755')
#                 with cd('venv'):
#                     sudo('rm -Rf .??* *')

#             python.virtualenv('venv', use_sudo=True, user='******', clear=True)
#             with fabtools.python.virtualenv('venv'):
#                 python.install_requirements('src/requirements.txt', use_mirrors=False, use_sudo=True, user='******', download_cache=pip_cache_dir)

#             # proj dirs
#             files.directory('log', use_sudo=True, owner='root', group='root', mode='755')
#             files.directory('db', use_sudo=True, owner=env.project_user, group=env.project_group, mode='755')
#             files.directory('media', use_sudo=True, owner=env.project_user, group=env.project_group, mode='755')
#             files.directory('static', use_sudo=True, owner=env.project_user, group=env.project_group, mode='755')
#             sudo('chown -R ' + env.project_user + ':' + env.project_group + ' db* static* media*')

#             # django comands
#             with fabtools.python.virtualenv('venv'):
#                 sudo('python src/manage.py collectstatic --noinput', user=env.project_user)
#                 sudo('python src/manage.py syncdb --noinput', user=env.project_user)
#                 sudo('python src/manage.py migrate --noinput', user=env.project_user)
#                 #sudo('python src/manage.py loaddata fixtures.json', user=env.project_user)

#             # ------------------- #
#             # WEB SERVER SETTINGS #
#             # ------------------- #

#             # I`m use nginx <-> uWSGI <-> Django

#             nginx.server()
#             deb.packages(['uwsgi', 'uwsgi-plugin-python'])

#             # proj conf!
#             if not is_dir('conf') or confirm("proj conf dir exist! [backup and update? / skip]", default=False):
#                 files.directory('conf', use_sudo=True, owner='root', group='root', mode='755')
#                 with cd('conf'):
#                     local_conf_templates = os.path.join(os.path.dirname(__file__), 'template', 'conf')
#                     uwsgi_conf = os.path.join(local_conf_templates, 'uwsgi.ini')
#                     nginx_conf = os.path.join(local_conf_templates, 'nginx.conf')

#                     sudo("rm -Rf *.back")
#                     sudo("ls -d *{.conf,.ini} | sed 's/.*$/mv -fu \"&\" \"\\0.back\"/' | sh")
#                     files.template_file('uwsgi.ini', template_source=uwsgi_conf, context=env,
#                         use_sudo=True, owner='root', group='root', mode='644')
#                     files.file('reload', use_sudo=True, owner='root', group='root')
#                     sudo('ln -sf $(pwd)/uwsgi.ini /etc/uwsgi/apps-enabled/' + env.project_dir_name + '.ini')

#                     files.template_file('nginx.conf', template_source=nginx_conf, context=env,
#                         use_sudo=True, owner='root', group='root', mode='644')
#                     sudo('ln -sf $(pwd)/nginx.conf /etc/nginx/sites-enabled/' + env.project_dir_name)

#             sudo('service nginx restart')
#             sudo('service uwsgi restart')

# #def is_git():
# #    with settings(hide('running', 'warnings', 'stderr', 'stdout'), warn_only=True):
# #        res = run('git status')
# #    return res.succeeded



# def local_template_render(local_template, dict, local_target):
#     local_file_template = os.path.join(os.path.dirname(__file__), 'template', local_template)
#     local_out = os.path.join(env.lcwd, local_target)
#     with open(local_file_template, 'r') as f:
#         rendered = f.read().format(**dict)
#         with open(local_out, 'w') as out:
#             out.write(rendered)

# BITBUCKET_AUTH=(BITBUCKET_USER, BITBUCKET_PASSWORD )

# def init():
#     # cwd => ./deploy
#     env.lcwd = os.path.abspath(os.path.dirname(__file__))

#     env.debug = True
#     prompt("project domain: ", "project", validate="^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$")
#     puts("create project: {0}".format(env.project))

#     with lcd('..'):
#         local('mkdir ' + env.project)
#         with lcd(env.project):
#             local('mkdir db src venv static media')
#             with lcd('src'):
#                 # copy proj infrastructure
#                 local('cp -r ../../deploy/project/* .'.replace('/', os.path.sep))
#                 local_template_render('gitignore.txt', env, '.gitignore')

#                 # init git
#                 local('git init')
#                 local('git add *')
#                 local('git commit -am "init"')

#             # init virtual env
#             local('virtualenv --clear venv')
#             local('./venv/Scripts/activate && pip install --download-cache=../deploy/.pip.cache -r ./src/requirements.txt'.replace('/', os.path.sep))

#             # init Django
#             local('./venv/Scripts/activate && python ./src/manage.py syncdb --noinput && python ./src/manage.py migrate --noinput'.replace('/', os.path.sep))

#         if BITBUCKET_USER and BITBUCKET_PASSWORD and confirm_global('create private bitbucket repository?'):
#             env.bit_user=BITBUCKET_USER
#             env.bit_password=BITBUCKET_PASSWORD

#             import requests as r
#             rez = r.post('https://api.bitbucket.org/1.0/repositories/',
#                 data=dict(name=env.project, is_private=True),
#                 auth=BITBUCKET_AUTH,
#             )
#             puts('request status ok: {0}'.format(rez.ok))

#             if rez.ok:
#                 with lcd(env.project):
#                     local_template_render('fabfile.txt', env, 'fabs.py')
#                     with lcd('src'):
#                         local('git remote add origin https://{0}:{2}@bitbucket.org/{0}/{1}.git'.format(env.bit_user, env.project, env.bit_password))
#                         local('git push -u origin --all')   # to push changes for the first time


# if __name__ == '__main__':
#     # hack for pycharm run configuration.
#     import subprocess, sys
#     subprocess.call(['fab', '-f', __file__] + sys.argv[1:])