私は夏の間、会社でインターンをしています。Django で行う必要のあるプロジェクトが割り当てられました。大まかなセットアップが進んでおり、さらにセットアップする方法についてフィードバックが必要です。Techops チームのメンバーは、開発者が何かを壊したときに VM を再起動するのに多くの時間を費やしています。解決策は、ユーザーが自分でこれを行えるようにすることです。
プロジェクト概要
- ユーザーは LDAP 資格情報を使用してログインします
- サーバーは、個人が属する LDAP グループを取得します ['techops', 'staff']
- これらの LDAP グループに属さないサーバーのみが表示されます
- その後、ユーザーはこれらの VM を再起動できます
- サーバーは、SSH キーを介して指定された VM ドメインに SSH で接続し、VM の再起動をトリガーします
現在、ユーザーは LDAP 経由で管理パネルにサインインできますが、Web サイトの別の認証ページではできません。ユーザーの 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 %}