Giter Site home page Giter Site logo

fabric-bolt / fabric-bolt Goto Github PK

View Code? Open in Web Editor NEW
414.0 414.0 113.0 5.36 MB

Fabric deployments via a web interface

Home Page: http://fabric-bolt.readthedocs.org/en/latest/

License: MIT License

Python 56.15% HTML 17.33% CSS 0.77% JavaScript 25.75%
deployment fabric python

fabric-bolt's Introduction

FabricBolt

image

image

tl;dr
A web interface for fabric deployments.

Fabric Bolt is a Python/Django project that allows you to deploy code stored in source control (a project) to a target server (host). Fabric Bolt provides convenient web interfaces to configure both the projects and the hosts. Additionally, deployment history and logs are stored so that you know who, what, where, when, and why something was deployed.

Documentation found at http://fabric-bolt.readthedocs.org/en/latest/

image

Quickstart

These steps are designed to get you rolling quickly, but more complete install/setup information is provided in our documentation.

  1. Install:

    pip install fabric-bolt
  2. Initialize settings file. (To specify file location, enter as the second argument.):

    fabric-bolt init [~/.fabric-bolt/settings.py]
  3. Modify generated settings file to enter database settings.
  4. Migrate db:

    fabric-bolt migrate
  5. Create admin user, then follow the prompts to create an email and password:

    fabric-bolt [--config=~/.fabric-bolt/settings.py] createsuperuser
  6. Run:

    fabric-bolt runserver

Note:

If you have created a settings file at a different location than the default, you can use the --config option on any command (besides the init command) to specify the custom file path. Alternatively, you can set an env variable: FABRIC_BOLT_CONF.

Authors

  • Dan Dietz (paperreduction)
  • Jared Proffitt (jproffitt)
  • Nathaniel Pardington (npardington)

Bolting web applications to servers since 2013 :: Deploy Happy!

fabric-bolt's People

Contributors

christophervalles avatar danilochilene avatar ewokcillo avatar gvangool avatar hedde avatar jproffitt avatar lethe3000 avatar m-mix avatar msurdi avatar mx-mad avatar npardington avatar paperreduction avatar rbalazs avatar scytlautomation avatar slok avatar viable-hartman avatar yourilima avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fabric-bolt's Issues

migrate not working

Is it just me or is migrate stopped working ("fabric-bolt migrate" throws unknown command and it doesn't show on help).
Migrate is still documented ...

Docs: Location settings file confusing on install instructions

Nice talk today at Djangocon!

Reading the docs....
Section: Initializing the Configuration
Two locations are shown for the settings.py file one default and one optional. Location of default should be shown before showing how to generate the optional one.

Section: Running Migrations
In creating the superuser the command shows using the optional settings.py location. Think it would make more sense to show the default location here.

Let me know if this is not clear.

Error during user creation

I encountered the following error after the creation of a user

  • Create a user
    error1
  • Error page
    error
  • The user is created
    error2

Roadmap

Here's some thoughts on what I think we need to add. If anyone has more ideas, leave a comment.

First of all, here's some features we're already working on:

  • Download fabfile from a repo. This will allow you to have a specific, custom fabfile in each project rather than a global fabfile for every project.
  • Deploy time windows. This will allow you to set specific time frames that deployments are allowed.
  • Socket IO when running fabfile. This will allow you to send input to the fab script as it is running from your browser. (asking input for passwords, etc.)

All of these are in the works right no, but not quite ready.

Some more ideas that I think we need to add:

  • Better user management. Need control on what types of users can do what operations. Possibly be able to dynamically create user groups, and assign groups and or users to project/stages/(tasks?).
  • Running multiple tasks. Need a way to run more than one task at a time. Maybe be able to setup "task groups" where you can group multiple tasks together, then run them all with one click.
  • Passing arguments to tasks. In fabric, you can pass arguments to a task. (like fab task:'hello') We should probably make a way to do that, similar to the configurations.
  • Creating tasks in the web interface? I don't know how I feel about that one. Evaling code is going to be interesting. I might just say you should just create that task in the fabfile.

Any more thoughts? Any help would be much appreciated.

Update to django 1.7

I think we should update the project to support the upcoming Django 1.7. The question is, do we need to make it backwards compatible? If someone pip installs fabric-bolt, it will have django 1.7. Theres no easy way to use it on an older version of django.

The big problem is the migrations. We will have to make an upgrade doc which tells to fake the initial migrations I believe.

Extend fabric-bolt by adding new models

Hi there,

I'm trying to extend the default fabric-bolt functionality by adding few more models and views. However when I sync and migrate either using fabric-bolt syncdb --migrate it show my application under Migrated: group however no table created in my fabric-bolt.db file. Is there some magic somewhere in between?

Migration not working

I'm using fabric-bolt migrate
django.db.utils.ProgrammingError: (1146, "Table 'fabric-bolt.south_migrationhistory' doesn't exist")

Usage Tracking

We need a setting in the project, that when turned on, will collect user usage data and dump it to a keen.io account. The logging should be anonymized and it should be opt-in (off by default). We can prompt the user to turn it on somewhere in the setup.

'init' command --conf is not accepted

When attempting to run the command as follows: fabric-bolt init --conf=./conf/.fabric-bold/settings.py "--conf" option is not accepted. Instead, the following error is presented:

Usage: fabric-bolt [options]

fabric-bolt: error: no such option: --conf

Attribute error when using sensitive value

When I try use a sensitive attribute value I got the error below:
I will try investigate this further tomorrow, if I disable the password as sensitive value it works.

AttributeError at /projects/stage/1/deployment/argument/
type object 'PasswordInput' has no attribute 'attrs'
Request Method: GET
Request URL: http://127.0.0.1:8000/projects/stage/1/deployment/argument/
Django Version: 1.7
Exception Type: AttributeError
Exception Value:
type object 'PasswordInput' has no attribute 'attrs'
Exception Location: /home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/django/forms/forms.py in as_widget, line 550
Python Executable: /home/danilochilene/.envs/fabricbolt/bin/python
Python Version: 2.7.6
Python Path:
['/home/danilochilene/.envs/fabricbolt/bin',
'/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/fabric_bolt-0.1b1-py2.7.egg',
'/home/danilochilene/.envs/fabricbolt/lib/python2.7',
'/home/danilochilene/.envs/fabricbolt/lib/python2.7/plat-x86_64-linux-gnu',
'/home/danilochilene/.envs/fabricbolt/lib/python2.7/lib-tk',
'/home/danilochilene/.envs/fabricbolt/lib/python2.7/lib-old',
'/home/danilochilene/.envs/fabricbolt/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages']
Server time: Wed, 10 Sep 2014 21:04:38 +0000
Error during template rendering

In template /home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 4
type object 'PasswordInput' has no attribute 'attrs'
1 {% load crispy_forms_field %}
2
3 {% if field.is_hidden %}
4 {{ field }}
5 {% else %}
6 {% if field|is_checkbox %}
7


8 {% endif %}
9 <{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id }}" {% if not field|is_checkbox %}class="form-group{% else %}class="checkbox{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if form_show_errors%}{% if field.errors %} has-error{% endif %}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}">
10 {% if field.label and not field|is_checkbox and form_show_labels %}
11
12 {{ field.label|safe }}{% if field.field.required %}*{% endif %}
13
14 {% endif %}

A server error occurred. Please contact the administrator.

Hi,
I get this strange error on web browser when i url "A server error occurred. Please contact the administrator".

I followed the below link configuring on CentOs 6.
https://pypi.python.org/pypi/fabric-bolt/0.0.3

[root@chef-server .fabric-bolt]# fabric-bolt runserver 10.10.1.152:2000
Validating models...

0 errors found
March 11, 2014 - 14:10:34
Django version 1.6.2, using settings 'fabric-bolt_config'
Starting development server at http://10.10.1.152:2000/
Quit the server with CONTROL-C.
Traceback (most recent call last):
File "/usr/lib64/python2.6/wsgiref/handlers.py", line 93, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python2.6/site-packages/django/contrib/staticfiles/handlers.py", line 67, in call
return self.application(environ, start_response)
File "/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 187, in call
self.load_middleware()
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 47, in load_middleware
mw_class = import_by_path(middleware_path)
File "/usr/lib/python2.6/site-packages/django/utils/module_loading.py", line 21, in import_by_path
module = import_module(module_path)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 40, in import_module
import(name)
File "/usr/lib/python2.6/site-packages/stronghold/middleware.py", line 2, in
from stronghold import conf, utils
File "/usr/lib/python2.6/site-packages/stronghold/conf.py", line 33, in
url = reverse(named_url)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 509, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, _args, *_kwargs))
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 387, in _reverse_with_prefix
possibilities = self.reverse_dict.getlist(lookup_view)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 296, in reverse_dict
self._populate()
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 262, in _populate
for pattern in reversed(self.url_patterns):
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 346, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 341, in urlconf_module
self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 40, in import_module
import(name)
File "/usr/lib/python2.6/site-packages/fabric_bolt/core/urls.py", line 14, in
url(r'^projects/', include('fabric_bolt.projects.urls')),
File "/usr/lib/python2.6/site-packages/django/conf/urls/init.py", line 26, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 40, in import_module
import(name)
File "/usr/lib/python2.6/site-packages/fabric_bolt/projects/urls.py", line 3, in
import views
File "/usr/lib/python2.6/site-packages/fabric_bolt/projects/views.py", line 39
dict_with_docs = {task: callables[task].doc for task in all_tasks}
^
SyntaxError: invalid syntax
[11/Mar/2014 14:10:40] "GET / HTTP/1.1" 500 59
Traceback (most recent call last):
File "/usr/lib64/python2.6/wsgiref/handlers.py", line 93, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python2.6/site-packages/django/contrib/staticfiles/handlers.py", line 67, in call
return self.application(environ, start_response)
File "/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 187, in call
self.load_middleware()
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 47, in load_middleware
mw_class = import_by_path(middleware_path)
File "/usr/lib/python2.6/site-packages/django/utils/module_loading.py", line 21, in import_by_path
module = import_module(module_path)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 40, in import_module
import(name)
File "/usr/lib/python2.6/site-packages/stronghold/middleware.py", line 2, in
from stronghold import conf, utils
File "/usr/lib/python2.6/site-packages/stronghold/conf.py", line 33, in
url = reverse(named_url)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 509, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, _args, *_kwargs))
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 387, in _reverse_with_prefix
possibilities = self.reverse_dict.getlist(lookup_view)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 296, in reverse_dict
self._populate()
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 262, in _populate
for pattern in reversed(self.url_patterns):
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 346, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 341, in urlconf_module
self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 40, in import_module
import(name)
File "/usr/lib/python2.6/site-packages/fabric_bolt/core/urls.py", line 14, in
url(r'^projects/', include('fabric_bolt.projects.urls')),
File "/usr/lib/python2.6/site-packages/django/conf/urls/init.py", line 26, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 40, in import_module
import(name)
File "/usr/lib/python2.6/site-packages/fabric_bolt/projects/urls.py", line 3, in
import views
File "/usr/lib/python2.6/site-packages/fabric_bolt/projects/views.py", line 39
dict_with_docs = {task: callables[task].doc for task in all_tasks}
^
SyntaxError: invalid syntax
[11/Mar/2014 14:10:41] "GET / HTTP/1.1" 500 59

Thanks,
Swaroop

UTF-8 not working on project name

Hello,

I got a error when using accent on project names, below the error:
I also checked on models.py and looks fine for me.

'ascii' codec can't encode character u'\xe1' in position 1: ordinal not in range(128)
Request Method: GET
Request URL: http://deployhom.cvc.com.br/projects/view/2/
Django Version: 1.6
Exception Type: UnicodeEncodeError
Exception Value:
'ascii' codec can't encode character u'\xe1' in position 1: ordinal not in range(128)
Exception Location: /opt/fabric-bolt/projects/models.py in unicode, line 40
Python Executable: /envs/2.7/bin/python
Python Version: 2.7.0
Python Path:
['/opt/fabric-bolt',
'/envs/2.7/lib/python27.zip',
'/envs/2.7/lib/python2.7',
'/envs/2.7/lib/python2.7/plat-linux2',
'/envs/2.7/lib/python2.7/lib-tk',
'/envs/2.7/lib/python2.7/lib-old',
'/envs/2.7/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7',
'/usr/local/lib/python2.7/plat-linux2',
'/usr/local/lib/python2.7/lib-tk',
'/envs/2.7/lib/python2.7/site-packages',
'/envs/2.7/lib/python2.7/site-packages/PIL']
Server time: Wed, 27 Nov 2013 19:38:44 +0000

Error during template rendering

In template /opt/fabric-bolt/core/templates/base.html, error at line 17

{{ project }}

SSH Key Creation

We need a UI that allows you to generate an SSH key for the FabricBolt user to connect to remote machines.

fabric runserver problem

ssh login : fabric-bolt runserver ip:port
test Status: Success!
but ssh login: nohup fabric-bolt runserver ip:port no problem &
test Status: Fail

the same configure

Config creation/updation inconsistency

While creating a project configuration variable. one cannot create ssh-config-filename.
However, create one with a dummy name and update it with ssh-config-filename and it will work!!

Documentation Details

I just got around to re-installing fabric-bolt again after seeing some updates had been done.
I finally got it successfully installed but have a couple questions/suggestions:

  1. in the installation instructions it would be helpful to point out which commands require use of "sudo"
  2. when Adding a new Configuration - what is the format or requirements to specify the "Key" field ?
  3. in the documentation web page it shows a snippet of the definition for Postgresql. It tells you to modify the settings.py file but doesn't indicate which fields should be modified and which will be filled in auto-magically by the included tool mentioned that creates the settings.py file.
  4. no where did it mention or describe the Postgresql database that needs to be created?
  5. the default settings.py file looks to be configured for sqlite ? Is that default usable or not?

Maybe I've just missed some documentation somewhere but I thought I'd ask here.
thanks
brian

Refactor for pip install

We need to refactor this into a python package for easy installing with pip. We need to figure out how to do that.

Should we put the requirements in setup.py or keep them in requirements.txt files? If we do put them in setup.py, what should we include? wsgi? Not all people will use wsgi.

Also, how should we handle settings? It should be easy to change database settings since everyone installing this will need to do that. Should we include any db settings at all?

And what about the fabfile? That should also be customizable by users. Should we even include it in the repo? Or maybe include a sample fabfile, like fabfile.py.sample or just _fabfile.py. That way when users create their own fabfile, updating fabric-bolt will not wipe their custom file. Or maybe it will anyway... I don't know how pip handles that.

Command 'createsuperuser' adds user to both 'admin' and 'historian' group

The left side panels (host, users, ..) are hidden, becouse they are behind an
{% if not user.user_is_historian %}
statement.
I can not decide, whether the statement or the command is wrong, but this way, the line must be deleted via hand, to acces these panels. I would gladly fix it, but don not know, where to go with this one.

Explanation how to use task argument

Hello,

I have the task below on fabfile.py

def argument(dir):
'''Testing'''
run('/bin/ls {0}'.format(dir))

Example if I have the argument name dir and value /tmp, the task should run ls /tmp

But when I run the task it asks for the argument value, as image below:

image

If I check the argument as a task argument the behavior is the same:

image

First things first. What is the idea of a task argument and a argument alone? What's the difference? I don't think you need to setup a argument as a task one, you just need a argument that matches on the task, if not just ignore it.

I hope I made myself clear, it's a little confusing. :)

"Add hook" button leads to errorpage

After a fresh install from master the "Add hook" button leads to this error:

TemplateDoesNotExist at /web-hooks/create/
web_hooks/hook_create.html
Request Method: GET
Request URL: http://10.0.2.2:7777/web-hooks/create/
Django Version: 1.6.6
Exception Type: TemplateDoesNotExist
Exception Value: web_hooks/hook_create.html

My pip freeze:
Django==1.6.6
Fabric==1.9.1
GitPython==0.3.2.RC1
Pillow==2.5.3
South==0.8.4
argparse==1.2.1
async==0.6.1
croniter==0.3.4
django-authtools==0.2.2
django-bootstrap-form==3.1
django-braces==1.4.0
django-classy-tags==0.5.1
django-crispy-forms==1.4.0
django-custom-user==0.4
django-grappelli==2.5.3
django-sekizai==0.7
django-stronghold==0.2.6
django-tables2==0.15.0
ecdsa==0.11
fabric-bolt==0.1b1
gevent==1.0.1
gevent-socketio==0.3.6
gevent-websocket==0.9.3
gitdb==0.5.4
greenlet==0.4.3
logan==0.5.10
paramiko==1.14.1
pycrypto==2.6.1
python-dateutil==2.2
requests==2.3.0
six==1.7.3
smmap==0.8.2
virtualenv==1.11.6
wsgiref==0.1.2

Could not resolve form field 'user_level'.

I encountered the following error after the creation of a user

WARNING:root:Could not resolve form field 'user_level'.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/crispy_forms/utils.py", line 74, in render_field
field_instance = form.fields[field]
KeyError: u'user_level'
WARNING:root:Could not resolve form field 'is_active'.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/crispy_forms/utils.py", line 74, in render_field
field_instance = form.fields[field]
KeyError: u'is_active'

Trying use version 0.1b1 - TemplateDoesNotExist

I'm trying use version 0.1b1 because of task argument support.
It's safe to use version 0.1b1?

Below my pip freeze:

(fabricbolt)~ ❯❯❯ pip freeze
Django==1.6.6
Fabric==1.9.1
GitPython==0.3.2.RC1
Pillow==2.5.3
South==0.8.4
argparse==1.2.1
async==0.6.1
certifi==14.05.14
croniter==0.3.4
django-authtools==1.0.0
django-bootstrap-form==3.1
django-braces==1.4.0
django-classy-tags==0.5.1
django-crispy-forms==1.4.0
django-custom-user==0.4
django-grappelli==2.5.3
django-sekizai==0.7
django-stronghold==0.2.6
django-tables2==0.15.0
ecdsa==0.11
fabric-bolt==0.1b1
gevent==1.0.1
gevent-socketio==0.3.6
gevent-websocket==0.9.3
gitdb==0.5.4
greenlet==0.4.3
logan==0.5.10
paramiko==1.14.1
psycopg2==2.5.4
pycrypto==2.6.1
python-dateutil==2.2
requests==2.4.0
six==1.7.3
smmap==0.8.2
virtualenv==1.11.6
wsgiref==0.1.2

The errors:

Traceback (most recent call last):
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/core/handlers/base.py", line 137, in get_response
response = response.render()
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/response.py", line 105, in render
self.content = self.rendered_content
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/response.py", line 82, in rendered_content
content = template.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 140, in render
return self._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 123, in render
return compiled_parent._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 123, in render
return compiled_parent._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/django_tables2-0.15.0-py2.7.egg/django_tables2/templatetags/django_tables2.py", line 206, in render
return template.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 140, in render
return self._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 101, in render
compiled_parent = self.get_parent(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 98, in get_parent
return get_template(parent)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader.py", line 138, in get_template
template, origin = find_template(template_name)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader.py", line 131, in find_template
raise TemplateDoesNotExist(name)
TemplateDoesNotExist: django_tables2/table.html

Internal Server Error: /projects/view/15/
Traceback (most recent call last):
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/core/handlers/base.py", line 137, in get_response
response = response.render()
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/response.py", line 105, in render
self.content = self.rendered_content
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/response.py", line 82, in rendered_content
content = template.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 140, in render
return self._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 123, in render
return compiled_parent._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 123, in render
return compiled_parent._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/django_tables2-0.15.0-py2.7.egg/django_tables2/templatetags/django_tables2.py", line 206, in render
return template.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 140, in render
return self._render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/base.py", line 840, in render
bit = self.render_node(node, context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/debug.py", line 78, in render_node
return node.render(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 101, in render
compiled_parent = self.get_parent(context)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader_tags.py", line 98, in get_parent
return get_template(parent)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader.py", line 138, in get_template
template, origin = find_template(template_name)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/template/loader.py", line 131, in find_template
raise TemplateDoesNotExist(name)
TemplateDoesNotExist: django_tables2/table.html
[02/Sep/2014 19:07:16] "GET /projects/view/15/ HTTP/1.1" 500 930778
[02/Sep/2014 19:07:36] "GET / HTTP/1.1" 200 196741
Traceback (most recent call last):
File "/usr/lib/python2.7/wsgiref/handlers.py", line 86, in run
self.finish_response()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 128, in finish_response
self.write(data)
File "/usr/lib/python2.7/wsgiref/handlers.py", line 212, in write
self.send_headers()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 270, in send_headers
self.send_preamble()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 194, in send_preamble
'Date: %s\r\n' % format_date_time(time.time())
File "/usr/lib/python2.7/socket.py", line 324, in write
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

[02/Sep/2014 19:07:37] "GET / HTTP/1.1" 500 59

Exception happened during processing of request from ('127.0.0.1', 54574)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 593, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/home/danilochilene/.envs/fabricbolt/local/lib/python2.7/site-packages/Django-1.6.6-py2.7.egg/django/core/servers/basehttp.py", line 126, in init
super(WSGIRequestHandler, self).init(_args, *_kwargs)
File "/usr/lib/python2.7/SocketServer.py", line 651, in init
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 279, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])

error: [Errno 32] Broken pipe

Branch Management

Anybody have good ideas/articles on good project branch management? We need to nail down how we're going to accept pull requests, and release version, and how we're going to make changes ourselves.

Internationalization?

Do we need to add better support for i18n? We pretty much didn't do anything for that. I have never done it before, so I have no idea how difficult it is. Anybody know what needs to be done?

django-grappelli is not installed during fabric-bolt setup

When attempting to run fabric-bolt syncdb --migrate after a fresh install, the following error is thrown:

File "venv/local/lib/python2.7/site-packages/south/management/commands/__init__.py", line 10, in <module>
    import django.template.loaders.app_directories
  File "venv/local/lib/python2.7/site-packages/django/template/loaders/app_directories.py", line 25, in <module>
    raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
django.core.exceptions.ImproperlyConfigured: ImportError grappelli: No module named grappelli

It seems that django-grappelli did not get installed during the initial pip install. Running pip install django-grappelli solves the issue.

Lack of documentation

Hello,

I didn't find any doc concerning the config file or what is the default user and password to enter in.

Can you help ?

Configuration data type "dropdown"

It would be nice to see a select input as a data type for configuration with both static and dynamic options.
Currently, the data types are "string", "number" or "boolean" ...

injection bug

After some digging for #69 i found that the way the parameters are set for fab it is possible to set a configuration as follows

key: "foo=bar -i /path/to/keyfile --set foo2"
value: "bar"

and the -i flag will be taken into account

In progress deploy is restarted when navigating

I've noticed that after a deployment is in progress, if you navigate back to any other part of the UI, when you come back to watch the progress, the deployment is restarted from scratch, leaving the previous one unfinished.

It seems that the problem is that the DeploymentOutputStream view, which is used by the iframe showing the output is creating a new deployment process each time.

can't set key_filename

So we are not able to set this option as the fab command sets it in a special way. (using -i) and this is not taken into account in the code.

fabfile per project?

Is there a option to define fabfile per project?

Sharing same tasks between different projects seems silly.

Tasks should take parameters and be on the project level

Shouldn't tasks be configured per project ?
They should ideally be different for different projects. And should also take parameters. GUI should have the ability to add different fabfiles (for different tasks) for different projects.

Projects remain after deleted

Hi,
I don't find any information on this, but after deleting a project it goes away when selecting "All Projects" but stay on the left table where it says "Projects".
I don't know if it is a bug or something I'm missing.

Reuse Virtualenv

Add a project level setting that allows you to persist the virtualenv (keep from doing a rebuild each time).

See pull #120 for more comments.

Upgrade 0.3 to 0.1b1

I'm trying upgrade fabric-bolt==0.0.3 to fabric-bolt==0.1b1

(fabric-boltNEW-ENV)[fabricbolt@cvcdeploy01 ~]$ fabric-bolt runserver
Validating models...

Unhandled exception in thread started by <function wrapper at 0x1cc1140>
Traceback (most recent call last):
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/utils/autoreload.py", line 93, in wrapper
fn(_args, *_kwargs)
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/core/management/commands/runserver.py", line 101, in inner_run
self.validate(display_num_errors=True)
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/core/management/base.py", line 310, in validate
num_errors = get_validation_errors(s, app)
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/core/management/validation.py", line 34, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/db/models/loading.py", line 196, in get_app_errors
self._populate()
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/db/models/loading.py", line 75, in _populate
self.load_app(app_name, True)
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/db/models/loading.py", line 99, in load_app
models = import_module('%s.models' % app_name)
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/utils/importlib.py", line 40, in import_module
import(name)
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/fabric_bolt-0.1b1-py2.7.egg/fabric_bolt/projects/models.py", line 207, in
class Deployment(TrackingFields):
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/fabric_bolt-0.1b1-py2.7.egg/fabric_bolt/projects/models.py", line 225, in Deployment
user = models.ForeignKey(get_user_model())
File "/home/fabricbolt/fabric-boltNEW-ENV/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/contrib/auth/init.py", line 129, in get_user_model
raise ImproperlyConfigured("AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL)
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'accounts.DeployUser' that has not been installed

Should I run something on database? I'm using postgresql.

"Update Profile" page doesn't preserve superuser status

Steps

  1. Create a superuser mysuperuser
  2. Login to the admin with mysuperuser and you'll be able to login
  3. Login to Fabric-bolt using mysuperuser
  4. Click "Update Profile"
  5. Change the "Template" field & submit
  6. Try to login to the admin with mysuperuser and you will get rejected

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.