From ab62bfca7efdf743d1b248186f349585a3e96d42 Mon Sep 17 00:00:00 2001 From: ibuler Date: Sat, 4 Mar 2017 16:38:26 +0800 Subject: [PATCH] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E6=94=B9=E4=B8=80=E4=BA=9B?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 99 +++++++++++-------- apps/assets/forms.py | 3 + .../templates/assets/idc_create_update.html | 6 +- apps/assets/templates/assets/idc_list.html | 2 +- .../templates/assets/system_user_list.html | 2 +- apps/ops/models/task.py | 4 +- apps/ops/tasks/_celery_tasks.py | 6 +- apps/ops/utils/ansible_api.py | 17 ++-- apps/templates/_nav.html | 2 - apps/users/models/group.py | 12 ++- config_example.py | 4 +- run_server.py | 2 +- utils/make_migrations.sh | 4 +- 13 files changed, 92 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index 9ec85a624..2154da785 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,59 @@ - // Jumpserver // - - - ~ Jumpserver是什么? - - Jumpserver是一款开源的跳板机(堡垒机)产品, 主要使用Python,Django开发 - 他实现了跳板机(堡垒机)的主要功能,删减、优化了传统堡垒机,致力于为互联网 - 运维提供服务 - - ~ 版本依赖 - - * Python 2.7 - +## Jumpserver +Jumpserver是一款开源的跳板机产品,主要使用Python,Django开发 + +### 开发环境 + * Python 2.7 # 开发时需考虑兼容Python3 * Django 1.10 - - - ~ 快速开始 - - ``` - pip install -r requirements.txt # Install pip module - - yum -y install `cat rpm_requirements.txt` # Install rpm package - - cp config_example.py config.py # Prepaire config from example config - - cd apps && python manage.py makemigrations # Make migrations for django - - python manage.py migrate # Migrate ORM to database - - python manage.py loaddata init # Init some data - - python manage.py loaddata fake # Generake some fake data - - yum -y install redis && service redis start # Or install redis docker - - python manage.py runserver 0.0.0.0:80 # Run it - - ``` - - ~ 文档 - * [项目结构描述](https://code.jumpserver.org/jumpserver/jumpserver/blob/master/docs/project_structure.md) - * [Python代码规范](https://code.jumpserver.org/jumpserver/jumpserver/blob/master/docs/python_style_guide.md) - * [API设计规范](https://code.jumpserver.org/jumpserver/jumpserver/blob/master/docs/api_style_guide.md) - * [表结构](https://code.jumpserver.org/Jumpserver/jumpserver/wikis/table-structure) +### 安装 +1. 安装依赖库 +``` + $ cd requirements + $ sudo yum -y install `cat rpm_requirements.txt` # CentOS/RedHat + $ sudo apt-get install `cat deb_requirements.txt` # Ubuntu/Debian +``` +2. 安装Python依赖包 + +``` +# 请自行安装 Python2.7 和 pip, 以下运行是以python2.7和pip2.7开始 +$ pip2.7 install -r requirements.txt -i https://pypi.doubanio.com/simple + +# MacOS +$ pip2.7 install -r requirements.txt -i https://pypi.doubanio.com/simple --user +``` + +3. 配置文件 + +``` +$ cd .. +$ cp config_example.py config.py +``` + +配置项 参考 config.py + +4. 初始化数据库 +``` +# cd utils +# sh make_migrations.sh +# sh init_db.sh +``` + +5. 依赖redis +``` +$ yum -y install redis +$ service redis start # Run docker or redis-server & +``` + +6. 启动 + +``` +$ python2.7 run_server.py +``` + +### 开发者文档 + + + * [项目结构描述](https://github.com/jumpserver/jumpserver/blob/dev/docs/project_structure.md) + * [Python代码规范](https://github.com/jumpserver/jumpserver/blob/dev/docs/python_style_guide.md) + * [API设计规范](https://github.com/jumpserver/jumpserver/blob/dev/docs/api_style_guide.md) diff --git a/apps/assets/forms.py b/apps/assets/forms.py index c8f846f15..ec95f0e1d 100644 --- a/apps/assets/forms.py +++ b/apps/assets/forms.py @@ -121,6 +121,9 @@ class IDCForm(forms.ModelForm): 'extranet': forms.Textarea( attrs={'placeholder': 'IP段之间用逗号隔开,如:201.1.32.1/24,202.2.32.1/24'}) } + help_texts = { + 'name': '* required' + } class AdminUserForm(forms.ModelForm): diff --git a/apps/assets/templates/assets/idc_create_update.html b/apps/assets/templates/assets/idc_create_update.html index 67c7f4c55..b811a2b27 100644 --- a/apps/assets/templates/assets/idc_create_update.html +++ b/apps/assets/templates/assets/idc_create_update.html @@ -47,9 +47,9 @@
-
- - +
+ +
diff --git a/apps/assets/templates/assets/idc_list.html b/apps/assets/templates/assets/idc_list.html index 8663e5009..a3471adc8 100644 --- a/apps/assets/templates/assets/idc_list.html +++ b/apps/assets/templates/assets/idc_list.html @@ -32,7 +32,7 @@
-
diff --git a/apps/assets/templates/assets/system_user_list.html b/apps/assets/templates/assets/system_user_list.html index 51b6456b4..6a1a85884 100644 --- a/apps/assets/templates/assets/system_user_list.html +++ b/apps/assets/templates/assets/system_user_list.html @@ -32,7 +32,7 @@
-
diff --git a/apps/ops/models/task.py b/apps/ops/models/task.py index babfbefa5..979d36479 100644 --- a/apps/ops/models/task.py +++ b/apps/ops/models/task.py @@ -30,8 +30,8 @@ class Task(models.Model): return [] def run(self): - from ops.utils.ansible_api import ADHocRunner, Config - conf = Config() + from ops.utils.ansible_api import ADHocRunner, Options + conf = Options() gather_facts = "yes" if self.is_gather_facts else "no" play_source = { "name": "Ansible Play", diff --git a/apps/ops/tasks/_celery_tasks.py b/apps/ops/tasks/_celery_tasks.py index 13fe8d0c1..9c76fdc84 100644 --- a/apps/ops/tasks/_celery_tasks.py +++ b/apps/ops/tasks/_celery_tasks.py @@ -3,12 +3,12 @@ from __future__ import absolute_import, unicode_literals from celery import shared_task from common import celery_app -from ops.utils.ansible_api import Config, ADHocRunner +from ops.utils.ansible_api import Options, ADHocRunner @shared_task(name="get_asset_hardware_info") def get_asset_hardware_info(task_name, task_uuid, *assets): - conf = Config() + conf = Options() play_source = { "name": "Get host hardware information", "hosts": "default", @@ -24,7 +24,7 @@ def get_asset_hardware_info(task_name, task_uuid, *assets): @shared_task(name="asset_test_ping_check") def asset_test_ping_check(task_name, task_uuid, *assets): - conf = Config() + conf = Options() play_source = { "name": "Test host connection use ping", "hosts": "default", diff --git a/apps/ops/utils/ansible_api.py b/apps/ops/utils/ansible_api.py index 3f3345c5f..09af3a37c 100644 --- a/apps/ops/utils/ansible_api.py +++ b/apps/ops/utils/ansible_api.py @@ -20,7 +20,7 @@ from ansible.plugins.callback import CallbackBase from ops.models import TaskRecord, AnsiblePlay, AnsibleTask, AnsibleHostResult -__all__ = ["ADHocRunner", "Config"] +__all__ = ["ADHocRunner", "Options"] logger = logging.getLogger(__name__) @@ -30,7 +30,7 @@ class AnsibleError(StandardError): pass -class Config(object): +class Options(object): """Ansible运行时配置类, 用于初始化Ansible的一些默认配置. """ def __init__(self, verbosity=None, inventory=None, listhosts=None, subset=None, module_paths=None, extra_vars=None, @@ -93,7 +93,8 @@ class Config(object): class InventoryMixin(object): - """提供生成Ansible inventory对象的方法 + """ + 提供生成Ansible inventory对象的方法 """ def gen_inventory(self): @@ -313,7 +314,8 @@ class PlayBookRunner(InventoryMixin): """用于执行AnsiblePlaybook的接口.简化Playbook对象的使用. """ - def __init__(self, config, palybook_path, playbook_var, become_pass, *hosts, **group_vars): + def __init__(self, config, palybook_path, playbook_var, + become_pass, *hosts, **group_vars): """ :param config: Config实例 @@ -392,7 +394,8 @@ class PlayBookRunner(InventoryMixin): class ADHocRunner(InventoryMixin): - """ADHoc接口 + """ + ADHoc接口 """ def __init__(self, play_data, config=None, *hosts, **group_vars): """ @@ -408,7 +411,7 @@ class ADHocRunner(InventoryMixin): tasks=[dict(action=dict(module='service', args={'name': 'vsftpd', 'state': 'restarted'}), async=async, poll=poll)] ) """ - self.options = config if config != None else Config() + self.options = config if config != None else Options() # 设置verbosity级别, 及命令行的--verbose选项 self.display = Display() @@ -482,7 +485,7 @@ class ADHocRunner(InventoryMixin): def test_run(): - conf = Config() + conf = Options() assets = [ { "name": "192.168.1.119", diff --git a/apps/templates/_nav.html b/apps/templates/_nav.html index 92b9c5894..25ecf136d 100644 --- a/apps/templates/_nav.html +++ b/apps/templates/_nav.html @@ -50,8 +50,6 @@ diff --git a/apps/users/models/group.py b/apps/users/models/group.py index 939ddeaf8..d24d05553 100644 --- a/apps/users/models/group.py +++ b/apps/users/models/group.py @@ -14,7 +14,8 @@ from common.mixins import NoDeleteModelMixin __all__ = ['UserGroup'] -class UserGroup(NoDeleteModelMixin, Group): +class UserGroup(NoDeleteModelMixin): + name = models.CharField(max_length=128, verbose_name=_('Name')) comment = models.TextField(blank=True, verbose_name=_('Comment')) date_created = models.DateTimeField(auto_now_add=True, null=True) created_by = models.CharField(max_length=100) @@ -34,9 +35,12 @@ class UserGroup(NoDeleteModelMixin, Group): @classmethod def initial(cls): - group, created = cls.objects.get_or_create( - name='Default', created_by='System', - comment='Default user group for all user') + default_group = cls.objects.filter(name='Default') + if not default_group: + group = cls(name='Default', created_by='System', comment='Default user group') + group.save() + else: + group = default_group[0] return group @classmethod diff --git a/config_example.py b/config_example.py index 71b9ab8bc..d600832f0 100644 --- a/config_example.py +++ b/config_example.py @@ -99,8 +99,8 @@ class DevelopmentConfig(Config): EMAIL_PORT = 465 EMAIL_HOST_USER = 'ask@jumpserver.org' EMAIL_HOST_PASSWORD = 'xfDf4x1n' - EMAIL_USE_SSL = True # If port is 465, set True - EMAIL_USE_TLS = False # If port is 587, set True + EMAIL_USE_SSL = True + EMAIL_USE_TLS = False EMAIL_SUBJECT_PREFIX = '[Jumpserver] ' SITE_URL = 'http://localhost:8080' diff --git a/run_server.py b/run_server.py index fc730ae51..384db3282 100644 --- a/run_server.py +++ b/run_server.py @@ -23,7 +23,7 @@ def start_django(): http_port = CONFIG.HTTP_LISTEN_PORT or '8080' os.chdir(apps_dir) print('start django') - subprocess.call('python ./manage.py runserver %s:%s' % (http_host, http_port), shell=True) + subprocess.call('python2.7 ./manage.py runserver %s:%s' % (http_host, http_port), shell=True) def start_celery(): diff --git a/utils/make_migrations.sh b/utils/make_migrations.sh index 0704b9cc9..3da8a20b1 100755 --- a/utils/make_migrations.sh +++ b/utils/make_migrations.sh @@ -1,6 +1,6 @@ #!/bin/bash # -python ../apps/manage.py makemigrations +python2.7 ../apps/manage.py makemigrations -python ../apps/manage.py migrate +python2.7 ../apps/manage.py migrate