LINUX.ORG.RU

Спи спокойно дорогой товарищ

 , ,


2

1

Наверное у всех админов витает в воздухе мысль написать свою собственную вэб-мордочку для централизованного поднятия сервисов и заливки конфигов на сервера. Кому интересна данная тема прошу присоединяйтесь...

https://github.com/dcopm999/ssdt.git

Описание модели deploy:

Service: Перечень сервисов которые используются в вашем проекте

  • name - Название сервиса (nginx, apache2, php-fpm, memcached...)
  • image - Логотип сервиса
  • desc - Описание (реверсивный прокси, ... ) необязательное поле

Address: перечень серверов которые используются в вашем проекте

  • addr - ip адрес сервера
  • auth_type - Тип авторизации (user, ssh-key, ...)
  • username - логин необязательное поле
  • password - пароль необязательное поле

DeployGroup: разделение серверов на логические группы, с одинаковым набором сервисов

  • name - Произвольное название группы серверов
  • servicegroup - Перечень сервисов которые необходимо развернуть в группе серверов
  • addressgroup - Перечень серверов на которых будут развернуты сервисы, указанные в группе сервисов

предполагается два типа авторизации на сверверах:

  • 1) user - авторизация через пользователя имеющего права sudo
  • 2) ssh-key - авторизация рутом через ssh ключ


Последнее исправление: dcopm999 (всего исправлений: 5)

И сразу первый вопрос...

Меню формируется при помощи django-mptt, можно менять порядок отображения пунктов меню в админке итд.... но как правильно брать урлы из urls.py и заносить в mptt чтобы ручками не заносить?

dcopm999
() автор топика
Ответ на: комментарий от bookman900

Чуть уже нацарапано, в частности архивирование на удаленной машине определенной папки и копирование на локалку архива по расписанию...

В дальнейшем предполагаю разворачивание серверов при помощи либы fabric

dcopm999
() автор топика

Статику и закомментированный код в репу класть не надо, а вот requirements — надо
Ну и codestyle у тебя — говно и не существует

Миграции советую исключать вот так:

**/migrations/**
!**/migrations
!**/migrations/__init__.py

А стринги надо через i18n, а не просто текстом пихать

https://github.com/dcopm999/ssdt/blob/master/tarilka/views.py — былинный говнокод

Goury ★★★★★
()
Последнее исправление: Goury (всего исправлений: 3)
Ответ на: комментарий от Goury

Ну и codestyle у тебя — говно и не существует

Спасибо, вы вероятнее всего правы, потому как я и не прогер, делаю первые шаги ))

Ваши советы учту обязательно!

dcopm999
() автор топика
Ответ на: комментарий от redixin

Чтобы были красивые кнопочки. Люди, ценящие свое время, делают это с помощью ci-систем (gitlab-ci, jenkins, bamboo,etc.)

leave ★★★★★
()
Ответ на: комментарий от redixin

Зачем деплою вебня?

Эта рюшечка для людей не любящих приятное мерцание терминала

Чем ansible не угодил?

ansible всем хорош, но у каждого своя отвертка

dcopm999
() автор топика
Ответ на: комментарий от Turbid

Может он из тех чуваков, которые на информатике при решении задачи с подстановкой чаосов в предложение (там еще падеж меняется) каждый час if-ом расписывали, ну еще спали на том занятии в 8м классе где про циклы рассказывали

Dred ★★★★★
()
Ответ на: комментарий от Turbid

иногда, ради таких людей надо добавлять один месяц или 8-й день недели, чиста поржать

Deleted
()
Ответ на: комментарий от dcopm999

Поправил

    if cd['id']==None:
        p=job(description=cd['desc'], servername=cd['servername'], source=cd['source'], destination=cd['destination'], login=cd['username'], passwd=cd['password'],
              job_type=cd['job_type'], time=cd['time'], day=cd['date'], port=cd['port'], yan=cd['yan'], fev=cd['fev'], mrt=cd['mrt'], apr=cd['apr'], may=cd['may'],
              iyn=cd['iyn'], iyl=cd['iyl'], avg=cd['avg'], sen=cd['sen'], okt=cd['okt'], nov=cd['nov'], dec=cd['dec'], pnd=cd['pnd'], vtr=cd['vtr'], srd=cd['srd'],
              cht=cd['cht'], ptn=cd['ptn'], sbb=cd['sbb'], vsk=cd['vsk'],)
        p.save()
    else:
        p=job(id=cd['id'], description=cd['desc'], servername=cd['servername'], source=cd['source'], destination=cd['destination'], login=cd['username'],
              passwd=cd['password'], job_type=cd['job_type'], time=cd['time'], day=cd['date'], port=cd['port'], yan=cd['yan'], fev=cd['fev'], mrt=cd['mrt'],
              apr=cd['apr'], may=cd['may'], iyn=cd['iyn'], iyl=cd['iyl'], avg=cd['avg'], sen=cd['sen'], okt=cd['okt'], nov=cd['nov'], dec=cd['dec'], pnd=cd['pnd'],
              vtr=cd['vtr'], srd=cd['srd'], cht=cd['cht'], ptn=cd['ptn'], sbb=cd['sbb'], vsk=cd['vsk'],)
        p.save()

ты серьезно?

Turbid ★★★★★
()
Ответ на: комментарий от dcopm999

Ты красивый говнокод заменил на нечитаемый говнокод
Это не поправил, это вагиноздец

Goury ★★★★★
()
Ответ на: комментарий от Turbid

Так лучше?

def addrowdb(cd):
    p=job(id=cd['id'], description=cd['desc'], servername=cd['servername'], source=cd['source'], destination=cd['destination'], login=cd['username'],
          passwd=cd['password'], job_type=cd['job_type'], time=cd['time'], day=cd['date'], port=cd['port'], yan=cd['yan'], fev=cd['fev'], mrt=cd['mrt'],
          apr=cd['apr'], may=cd['may'], iyn=cd['iyn'], iyl=cd['iyl'], avg=cd['avg'], sen=cd['sen'], okt=cd['okt'], nov=cd['nov'], dec=cd['dec'], pnd=cd['pnd'],
          vtr=cd['vtr'], srd=cd['srd'], cht=cd['cht'], ptn=cd['ptn'], sbb=cd['sbb'], vsk=cd['vsk'],)
    p.save()
dcopm999
() автор топика

Если хочешь, чтобы кто-то присоединился, то рекомендую оформить README. Что это вообще такое, какие фичи, roadmap. А так, «Спи спокойно дорогой товарищ».

Kilte ★★★★★
()
Ответ на: комментарий от dcopm999

Эта рюшечка для людей не любящих приятное мерцание терминала

У нормальных людей стоит дженкинс, который, собственно, и дёргает ансибл.

Miguel ★★★★★
()

Оо а зачем для этого целую джангу тащить? spa и rpc-api и всего делов то...
ну и присоединяюсь в комментатору выше, без ридми и роадмапа даже смотреть нет смысла... у всех свое представление о деплое и свои задачи, опиши что именно хочешь сделать ты..

genryRar ★★
()
Ответ на: комментарий от Miguel

У нормальных людей стоит дженкинс, который, собственно, и дёргает ансибл.

Каждый выбирает то решение которое ему удобно, я дженкинс использую для проведения тестов селениумом и при удачном завершении тестов пушит код на боевые сервера, а поднятие серверов и заливку конфигов сервисов выполняю при помощи либы fabric/fabtools, а кто-то делает это по другому и все мы нормальные

dcopm999
() автор топика
Ответ на: комментарий от dcopm999

Вот это лишнее:
https://github.com/dcopm999/ssdt/blob/master/tarilka/views.py#L11

И если у тебя везде @login_required, то не проще ли через middleware его проверять?

https://github.com/dcopm999/ssdt/blob/master/tarilka/views.py#L27
What if form is not valid?

https://github.com/dcopm999/ssdt/blob/master/tarilka/views.py#L40
Неправильный код ошибки
И логика выше тоже сомнительная

https://github.com/dcopm999/ssdt/blob/master/tarilka/views.py#L42
Серьёзные дядьки рекомендуют отвечать на POST запрос редиректом

И это только про этот один файл
В общем работы там тебе ещё много

Goury ★★★★★
()
Ответ на: комментарий от dcopm999

Советую выработать для себя кодстайл и начать писать тесты пока кода мало.
Покрывать тестами и стилизовать большой проект может быть очень геморройно.

Главное — не ведись на культы самолётников.
Использовать пробелы или табы или двойные отступы или тройные решать должен ты сам исходя из здравого смысла, удобства и эффективности, а не потому что кто-то в интернетах так сказал.
Но если уж решил — придерживаться стоит строго. За исключением исключений, которые тоже надо бы определить в кодстайле.

Главное в главном — не лезь в пеп8. Он не для тебя. Он для самого питона. Он разрабатывался с учётом особенностей криворукости тамошних говнокодеров.

Goury ★★★★★
()
Ответ на: комментарий от Goury

И если у тебя везде @login_required, то не проще ли через middleware его проверять?

@login_required оставил на формах ввода и редактирования

What if form is not valid?

Если я не ошибаюсь метод формы сам проверяет введенные данные и если они не корректные возвращает код ошибки, потому отслеживается то когда форма валид и необходимо записать данные в базу

Неправильный код ошибки, И логика выше тоже сомнительная

Поправил, взгляните пожалуйста

Серьёзные дядьки рекомендуют отвечать на POST запрос редиректом

Вернул на место редиректы, спасибо

dcopm999
() автор топика
Ответ на: комментарий от dcopm999

оставил на формах ввода

Чтобы без авторизации можно было просто зайти и забрать все секретные данные?

возвращает код ошибки

Ок, оставим этот момент до подготовки тестов

Поправил

Плохо поправил, не годится так
И прочитай однажды https://httpstatuses.com/

Goury ★★★★★
()
Ответ на: комментарий от dcopm999

Нет, 404 это когда треда в форуме толи пока ещё нет, то ли модератор снёс. И однажды он может снова появиться на этом месте.

Про тестирование читать https://docs.djangoproject.com/en/1.11/topics/testing/

И научись в i18n

Goury ★★★★★
()
Ответ на: комментарий от Goury

Пробел добавь

угу

https://github.com/dcopm999/ssdt/blob/master/tarilka/forms.py#L58 А это ещё что за говнокод?

Как лучше, создать еще одну таблицу в которой хранить и подтягивать BooleanField?:

item = forms.ModelChoiceField(queryset=Item.objects.all())

dcopm999
() автор топика

Наверное у всех админов витает в воздухе мысль написать свою собственную вэб-мордочку для централизованного поднятия сервисов и заливки конфигов на сервера.

Нет. Такие глупые мысли у админов бывают очень редко.

anonymous
()
Ответ на: комментарий от anonymous

Нет. Такие глупые мысли у админов бывают очень редко.

Вывод основан на Вашем субъективном мнении?

dcopm999
() автор топика
Ответ на: комментарий от Goury

Переписал https://github.com/dcopm999/ssdt/blob/master/tarilka/views.py.

В модель добавлены два поля month, wday https://github.com/dcopm999/ssdt/blob/master/tarilka/models.py#L23 они будут использоваться в дальнейшем вместо BooleanField'ов

Соответственно в forms также они добавлены https://github.com/dcopm999/ssdt/blob/master/tarilka/forms.py#L81

dcopm999
() автор топика
Ответ на: комментарий от dcopm999

А это зачем нужно в репозитариуме?
https://github.com/dcopm999/ssdt/blob/master/tarilka/views.py#L21
Не умеешь историю каммитов смотреть?

https://github.com/dcopm999/ssdt/blob/master/tarilka/models.py#L26
Говнокод переехал из одного файла в другой

https://github.com/dcopm999/ssdt/blob/master/tarilka/forms.py
Это даже комментировать страшно

Goury ★★★★★
()
Ответ на: комментарий от Goury

Это даже комментировать страшно

Допилил вроде, хотя я уже ни в чем не уверен )

dcopm999
() автор топика
Ответ на: комментарий от StReLoK

Ты уверен, что его не потрут методом «клац и 388 сообщений нет»?

awesomebuntu
()

Наверное у всех админов витает в воздухе мысль написать свою собственную вэб-мордочку для централизованного поднятия сервисов и заливки конфигов на сервера.

Даже мысли не возникало. Нафига это надо, когда есть Ansible?!

Хотя не, вру. Помню как-то с похмелья мне приснился сервер администрируемый исключительно через Webmin, причем бэкэнд там работал на node.js. Вот где ужас-то! Проснулся с криком и в холодном поту.

ShizuShidou
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.