2013-08-23 34 views
0

我是夏季公司的实习生。我已经被分配了一个必须在Django中完成的项目。我有一个粗略的设置,我需要一些关于如何进一步设置的反馈。 techops团队的员工在分手时会花费太多时间为开发人员重新启动虚拟机。解决方案是让用户自己做到这一点。自定义Django虚拟机控制面板 - 需要LDAP Questions/Insight

项目大纲

  • 与LDAP凭证用户登录
  • Server获取LDAP组,个人在[ 'techops', '工作人员']
  • 只有服务器是分开的这些ldap组将被显示
  • 用户将有能力重新启动这些虚拟机
  • 服务器将通过SSH密钥ssh进入指定的VM域并触发虚拟机重启

我目前有能力让用户通过ldap登录管理面板,但不能在网站的单独验证页面上登录。有没有办法自动填充用户的LDAP组?

# Populate the Django user from the LDAP directory. 
AUTH_LDAP_USER_ATTR_MAP = { 
    "first_name": "givenName", 
    "last_name": "sn", 
    "email": "mail" 
} 

我需要帮助了解如何LDAP作品(Django的),我怎么可以检索记录在当前用户,运行我get_Ldapgroups功能,这些群体比较服务器LDAP组,然后只显示那些服务器在/ reboot页面上。

请随时提问或索取任何其他文件。我感谢你的所有时间,并帮助你们提供给我。

这里是我的文件截至目前:

服务器的models.py

class Team(models.Model): 
    name = models.CharField(max_length=64) 
    email = models.EmailField(max_length=254, default='@business.com') 
    ldap_group = models.CharField(max_length=64) 

    def __unicode__(self): 
     return '"' + self.name + '" <' + self.email + '>' 

class Site(models.Model): 
    name = models.CharField(max_length=254) 

    def __unicode__(self): 
     return self.name 

class Server(models.Model): 
    hostname = models.CharField(max_length=254) 
    fqdn = models.CharField(max_length=254) 
    owner = models.ForeignKey(Team) 
    site = models.ForeignKey(Site) 

    def __unicode__(self): 
     return self.hostname 

重启views.py 列出的服务器,当你点击一个服务器就可以让你知道,如果它是“活着”

from django.template import Context, loader 
from django.http import HttpResponse 
from servers.models import Server 
import paramiko 
import socket 

def index(request): 
    t = loader.get_template('reboot/index.html') 
    servers = Server.objects.all() 
    c = Context({ 
    'servers': servers, 
    }) 
    return HttpResponse(t.render(c)) 

def test_ssh_liveness(ssh, name): 
    try: 
    ssh.connect(name, timeout='1') 
    return True 
    except socket.timeout: 
    # server is down 
    return False 
    except socket.gaierror: 
    # invalid server name 
    return False 
    except paramiko.SSHException: 
    # unknown host key 
    return True 

def server(request, name): 
    ssh = paramiko.SSHClient() 
    is_alive = test_ssh_liveness(ssh, name) 
    return HttpResponse("You selected server "+name+" and it is "+str(is_alive)) 

重启模板

{% block title %}Server{% endblock %} 

{% block content %} 
<h1>Server</h1> 
<ul> 
    {% for server in servers %} 
    <li><a href="{% url 'server' server.hostname %}">{{ server.hostname }} 
    {% endfor %} 
</ul> 
{% endblock %} 

回答

1

django拥有一个带有不同后端概念的可插入身份验证系统。 django带有两个后端;一个使用数据库,另一个使用外部用户系统。

利用这种灵活性是django-auth-ldap,这是一个设计用于LDAP目录的自定义后端。它是一个直接替代品。

您设置它,然后它会自动填充用户组,并且还可以执行其他操作(有关更多信息,请参阅documentation)。

example configuration详细介绍了大部分配置和设置细节。

作为最后的提示,考虑卸载重新启动服务器。否则,如果出现网络问题或其他延迟,您的应用程序将不会被阻止。要从django离线安排任务,请使用celery

+0

感谢您的帮助。我对django_authentication有一个体面的把握,并希望能尽快与ldap合作。我也会考虑卸载。 –