2013-08-23 38 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合作。我也會考慮卸載。 –