范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

从0到1开发自动化运维平台Day1

  今天开始抽时间将运维平台怎么从0到1的实现分享给大家.
  后端用的djangorestframework框架,今天先创建一个django项目,实现区域和IDC的管理.
  1、创建目录,初始化虚拟环境,然后安装drf框架➜ ~ mkdir ydevops-backend ➜ ~ cd ydevops-backend ➜ ~ python3.9 -m venv venv ➜ ~ source venv/bin/activate (venv) ➜  pip install djangorestframework (venv) ➜  pip list Package             Version ------------------- -------- asgiref             3.6.0 Django              4.1.7 djangorestframework 3.14.0 pip                 22.0.4 pytz                2022.7.1 setuptools          58.1.0 sqlparse            0.4.3 WARNING: You are using pip version 22.0.4; however, version 23.0.1 is available. You should consider upgrading via the "/home/charles/ydevops-backend/venv/bin/python3.9 -m pip install --upgrade pip" command.
  2、创建工程(venv) ➜ django-admin startproject devops_backend .  # 注意后面有个点 (venv) ➜ ls devops_backend  manage.py  venv
  3、创建第一个模块,cmdb模块(venv) ➜  django-admin startapp cmdb (venv) ➜  ls cmdb  devops_backend  manage.py  venv
  4、重新梳理下代码结构(venv) ➜  mkdir apps (venv) ➜  mv cmdb apps/
  代码结构变化后,我们还需要修改下settings.pyimport os import sys ... sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
  5、生成数据表及创建用户(venv) ➜  python manage.py migrate        Operations to perform:   Apply all migrations: admin, auth, contenttypes, sessions Running migrations:   Applying contenttypes.0001_initial... OK   Applying auth.0001_initial... OK   Applying admin.0001_initial... OK   Applying admin.0002_logentry_remove_auto_add... OK   Applying admin.0003_logentry_add_action_flag_choices... OK   Applying contenttypes.0002_remove_content_type_name... OK   Applying auth.0002_alter_permission_name_max_length... OK   Applying auth.0003_alter_user_email_max_length... OK   Applying auth.0004_alter_user_username_opts... OK   Applying auth.0005_alter_user_last_login_null... OK   Applying auth.0006_require_contenttypes_0002... OK   Applying auth.0007_alter_validators_add_error_messages... OK   Applying auth.0008_alter_user_username_max_length... OK   Applying auth.0009_alter_user_last_name_max_length... OK   Applying auth.0010_alter_group_name_max_length... OK   Applying auth.0011_update_proxy_permissions... OK   Applying auth.0012_alter_user_first_name_max_length... OK   Applying sessions.0001_initial... OK (venv) ➜  python manage.py createsuperuser 用户名 (leave blank to use "charles"): admin 电子邮件地址: admin@localhost Password:  Password (again):  密码长度太短。密码必须包含至少 8 个字符。 这个密码太常见了。 密码只包含数字。 Bypass password validation and create user anyway? [y/N]: y    Superuser created successfully.
  6、运行项目(venv) ➜  python manage.py runserver 0.0.0.0:9000            Watching for file changes with StatReloader Performing system checks...  System check identified no issues (0 silenced). March 21, 2023 - 13:43:54 Django version 4.1.7, using settings "devops_backend.settings" Starting development server at http://0.0.0.0:9000/ Quit the server with CONTROL-C.
  此时打开浏览器,应该可以看到首页,如下图所示:
  7、现在我们开始来编写区域表Region和IDC表Idc# 创建模型、视图和序列化器 (venv) ➜  cd apps/cmdb (venv) ➜  mkdir model serializer view (venv) ➜  touch {model,serializer,view}/__init__.py
  公共模型# model/model_assets.py from django.db import models   class TimeAbstract(models.Model):     update_time = models.DateTimeField(         auto_now=True, null=True, blank=True, verbose_name="更新时间")     created_time = models.DateTimeField(         auto_now_add=True, null=True, blank=True, verbose_name="创建时间")      class ExtMeta:         related = False         dashboard = False      class Meta:         abstract = True         ordering = ["-id"]
  Region模型# model/model_assets.py class Region(TimeAbstract):     name = models.CharField(max_length=100, unique=True, verbose_name="地域")     alias = models.CharField(max_length=128, default="", verbose_name="地域别名")     desc = models.TextField(verbose_name="详情描述", null=True, blank=True)     extra = models.JSONField(default=dict, verbose_name="扩展字段")     # {0: 禁用, 1: 启用}     is_enable = models.SmallIntegerField(         default=1, verbose_name="启用", help_text="状态 {0: 禁用, 1: 启用},默认值为1")      def __str__(self) -> str:         return self.alias      class ExtMeta:         related = True         dashboard = True      class Meta:         verbose_name = "地域"         verbose_name_plural = verbose_name + "管理"
  Idc模型IDC_TYPE = (     (0, "物理机房"), (1, "公有云") )   class Idc(TimeAbstract):     """     Idc模型     """     name = models.CharField(max_length=100, unique=True, verbose_name="名称")     alias = models.CharField(max_length=128, unique=True, verbose_name="别名")     region = models.ForeignKey(         Region, blank=True, null=True, on_delete=models.PROTECT, verbose_name="区域")     type = models.SmallIntegerField(default=0, choices=IDC_TYPE, verbose_name="机房类型",                                     help_text=f"可选: {IDC_TYPE}")     supplier = models.CharField(         max_length=128, default=None, null=True, blank=True, verbose_name="服务商")     config = models.JSONField(default=dict, verbose_name="配置信息",                               help_text="阿里云:{"key":"key","secret":"secret","region":["cn-south-1"],"project":[]} 华为云:{"domain":"domain","user":"user","password":password","project":[{"region":"region","project_id":"project_id"}]}")     forward = models.BooleanField(default=False, verbose_name="是否中转")     ops = models.CharField(max_length=100, blank=True,                            null=True, verbose_name="运维机器")     repo = models.SmallIntegerField(default=0, verbose_name="镜像仓库")     contact = models.JSONField(default=list, verbose_name="联系人")     desc = models.TextField(default="", null=True,                             blank=True, verbose_name="备注")      def __str__(self):         return self.name      class ExtMeta:         related = True         dashboard = True         icon = "international"      class Meta:         verbose_name = "IDC机房"         verbose_name_plural = verbose_name + "管理"
  8、创建区域和IDC表(venv) ➜ cd ../.. (venv) ➜ python manage.py makemigrations Migrations for "cmdb":   apps/cmdb/migrations/0001_initial.py     - Create model Region     - Create model Idc (venv) ➜ python manage.py migrate        Operations to perform:   Apply all migrations: admin, auth, cmdb, contenttypes, sessions Running migrations:   Applying cmdb.0001_initial... OK
  9、编写序列化器#!/usr/bin/env python # -*- encoding: utf-8 -*- """ @author  :   Charles Lai @file    :   serializer_assets.py @time    :   2023/03/21 22:18 @contact :   qqing_lai@hotmail.com """  # here put the import lib from rest_framework import serializers  from cmdb.models import Region, Idc   class RegionSerializers(serializers.ModelSerializer):      class Meta:         model = Region         fields = "__all__"   class IdcSerializers(serializers.ModelSerializer):      class Meta:         model = Idc         fields = "__all__"
  10、编写视图#!/usr/bin/env python # -*- encoding: utf-8 -*- """ @author  :   Charles Lai @file    :   view_assets.py @time    :   2023/03/21 22:21 @contact :   qqing_lai@hotmail.com """  # here put the import lib from rest_framework import viewsets  from cmdb.models import Region, Idc from cmdb.serializer import RegionSerializers, IdcSerializers   class RegionViewSet(viewsets.ModelViewSet):     """     区域视图      ### 区域权限         {"*": ("env_all", "区域环境管理")},         {"get": ("env_list", "查看区域环境")},         {"post": ("env_create", "创建区域环境")},         {"put": ("env_edit", "编辑区域环境")},         {"patch": ("env_edit", "编辑区域环境")},         {"delete": ("env_delete", "删除区域环境")}     """     perms_map = (         {"*": ("admin", "管理员")},         {"*": ("env_all", "区域环境管理")},         {"get": ("env_list", "查看区域环境")},         {"post": ("env_create", "创建区域环境")},         {"put": ("env_edit", "编辑区域环境")},         {"patch": ("env_edit", "编辑区域环境")},         {"delete": ("env_delete", "删除区域环境")}     )     queryset = Region.objects.all()     serializer_class = RegionSerializers   class IdcViewSet(viewsets.ModelViewSet):     """     IT资产 - IDC视图      ### IDC权限         {"*": ("itasset_all", "IT资产管理")},         {"get": ("itasset_list", "查看IT资产")},         {"post": ("itasset_create", "创建IT资产")},         {"put": ("itasset_edit", "编辑IT资产")},         {"delete": ("itasset_delete", "删除IT资产")}     """     perms_map = (         {"*": ("admin", "管理员")},         {"*": ("itasset_all", "IT资产管理")},         {"get": ("itasset_list", "查看IT资产")},         {"post": ("itasset_create", "创建IT资产")},         {"put": ("itasset_edit", "编辑IT资产")},         {"delete": ("itasset_delete", "删除IT资产")}     )     queryset = Idc.objects.all()     serializer_class = IdcSerializers
  11、添加路由,修改devops_backend/urls.py"""devops_backend URL Configuration """ from django.contrib import admin from django.urls import path, include  from rest_framework.routers import DefaultRouter  from cmdb.views import RegionViewSet, IdcViewSet  router = DefaultRouter() router.register("region", RegionViewSet) router.register("asset/idc", IdcViewSet)  urlpatterns = [     path("admin/", admin.site.urls),     path("api/", include(router.urls)), ]
  12、这样我们就实现了区域和IDC的管理了,此时打开http://localhost:9000/api/?format=api,应看到下图所示:
  点击进入每个路由都可以进行get和post请求操作.
  好了,今天就实现region和idc的管理接口,暂时先这样吧

曾被赞冻龄男神的何炅,仅仅两年就老太多?素颜近照显沧桑何炅素颜显老导读网友偶遇何炅陪领导喝茶聊天,坐姿端正,与相邻而坐的汪涵反差大要问湖南卫视的主持一哥是谁?绝对非主持快乐大本营长达24年之久的何炅莫属。可随着快乐大本营的停播被取代,15岁辍学泡吧,21岁吸毒卖淫,7年的冰妹堕落史面部有些苍老皮肤已不再光滑头发随意地挽起,当坐在对面的女子说出她的年龄时,有些令人惊讶。冯玲(化名),28岁,13年前跟随父母从巴彦县来到哈尔滨经营火锅店。从小父母过于放任的管教方信仰与爱情某天,无意间听到一个电视预告片中主人公的一句话在这个世界上,能让我付出生命的只有两个,那就是信仰与爱情。看到这,心中莫名涌出了感动。对于信仰,我一直心怀崇敬,不敢妄谈。战争年代,仁于正新剧有诚意?那是你没看对点5月19日,由秦岚吴谨言韩庚聂远张楠苗圃等众多演员加盟的年代商业大剧传家终于等到了它的播出。于正新剧再现家国格局,质感和滤镜精致,不失民国时期商业大亨世家的雍容华丽,剧本创造更是将叶倩文嫁二婚林子祥相携到白头,61岁无儿无女亦无悔文醒醒编辑小情书1992年十大劲歌金曲颁奖礼上,叶倩文击败了王菲林忆莲一举拿下了最佳女歌手奖。当晚的叶倩文可谓是风光无限,这已经是她第二次拿到了最佳女歌手奖,但令人惊讶的是,站在颁油价上涨金额已公布,尿素一袋涨了25元左右,看看多少钱了5月16日零时,国内成品油迎来了今年第八次价格上调。调整后,国内92号汽油,平均每升涨价0。21元。95号汽油,平均每升涨价0。23元。98号汽油,平均每升涨价0。24元。零号柴油腿粗的女生,请不必自卑!(漫画)这些好处,小细腿羡慕不来导语现在的社会,颜值高,身材好,身材好,所以很多人都觉得,大长腿,小脸蛋,才能引起别人的注意。一般腿细的女孩子,不管是裙子还是裤子,都会特别的漂亮,而那些腿很粗的女孩子,更喜欢穿着女人身上的这些小秘密,了解后更懂女人,漫画揭晓人间真实导语在大多数男人看来,女人总是很古怪,做着别人看不懂的事情。男人和女人有着不同的想法,面对同样的事情,他们的反应也是不一样的,而且每个人都有自己的秘密。不知道大家对女孩子的一些小秘漫画揭秘生完孩子的你,是否也经历了这些?导语每当一个家庭迎来一个小生命时,会让整个家庭每天沉浸在欢声笑语当中,在这个过程当中孩子的妈妈是最遭罪的一个。女性十月怀胎还要承受生孩子的痛楚,老人常说女人生孩子如同在鬼门关走了一河南巨匪王三祝,横行豫北十余年,四野42军消灭他,仅用了一天河南一大匪头王三祝,作恶多端,罪行累累,一生贪图权力冥顽不灵,最终罪有应得落得枪决人人称快。这个横行豫北十余年的巨匪恶徒,最终由四野给予了最后一击,消灭他,仅用了一天。趋利避害走上河南霸气钉子户,曾扬言给100亿也不拆,专家到场后万万拆不得1hr随着社会的不断发展,拆迁已经成为了众多人心中共同的夙愿。因为这样不仅能搬到更加明亮的新房子里,还能获得一笔巨额的拆迁款。有些人甚至在拆迁过程中一夜暴富,成为了名副其实的拆二代
花木兰玩法详解,边路花木兰进阶攻略花木兰作为峡谷老将中的一员,早在王者荣耀s3赛季之时,便已经是存在了,期间虽然经历了多次改革,但是其本身强度还是属于T0级别的。就如花木兰四级之时,只要熟用轻剑配合重剑,便能够做到坏消息!原神外服热度直线下降,流量损失惨重!关服危机来临?众所周知,原神是一款国际手游,不仅在国内受到玩家欢迎在国外同样人气高涨。尤其是在日本韩国等国家,成为年度最受欢迎手游。很多人以为原神在国外发展得很好,其实最近确实遭遇了变故,尤其是雷霆咆哮3暗夜级不二作战平台MC暗夜级不二作战平台是ICC为暗夜四位突防系统,打造专属的远程输送,运输装载的海上移动作战平台。该平台为四位突防系统,提供远程的信息交互和远程的战机运载。更为重要的是能够提供充足鏖战48分钟!彩色重振暗夜精灵雄风,Happy这小伙子可以!鏖战48分钟,暗夜精灵选手彩色最终战胜堪称人工智能的亡灵选手Happy!双方拼团不下数十次,各种的极限操作团战运营让人拍案叫绝!面对暗夜精灵,Happy赢下比赛并不是什么难事,只是华为鸿蒙再次发力多款老机型出现升级预告!荣耀手机排队中有一说一,如今的华为鸿蒙系统在市场中的影响力还是蛮高的,尽管有很多用户觉得失去了5G网络之后很难在市场中真正的立足。但从市场表现的情况来看,华为鸿蒙OS还是取得了不错的成绩,无论是小米13Lite海外发布搭载高通骁龙7Gen1,499欧元起IT之家2月27日消息,随着小米13系列正式登陆海外市场,小米同时还在海外推出了一款小米13Lite,相比12Lite带来了性能和影像方面的改进。这款机型类似国内的小米Civi2,继北美后,拼多多砍向加拿大!大国风起北大放牛娃把酒馆开到海外自拼多多海外版Team正式在北美上线后,凭借低于1美元的超高性价比,在北美一路高歌!继北美后,拼多多进军加拿大!据相关数据显示,截至1月底,Team的下载量已经高达2000万次,其绿联私有云DX4600体验现在是入手NAS的好时候吗?稍早前,爱范儿在微博上也发起了一次围绕NAS痛点的话题讨论,有很多读者都在评论区留言指出了他们对NAS的一些印象,以及现存的多方面痛点。可见,对于大多数用户来说,尽管许多定位家用的MySQL排查篇该如何定位并解决线上突发的Bug与疑难杂症?前面MySQL优化篇SQL优化篇两章中,聊到了关于数据库性能优化的话题,而本文则再来聊一聊关于MySQL线上排查方面的话题。线上排查性能优化等内容是面试过程中的常客,而对于线上遇到TCL推出采用第二代显示技术的NXTPAPER11,更实惠的Tab11平板TCL在MWC2023上推出了其第二代NXTPAPER显示技术和第一款使用该技术的平板电脑,以及一款价格更实惠的标准显示屏平板电脑。TCLNXTPAPER11TCLNXTPAPER盘点屏幕采用2K分辨率的vivo手机,共14款1vivoXplay3S搭载高通骁龙801处理器,采用台积电28nm的工艺制程,内嵌Adreno330GPU,频率高达550MHz,提供强劲视觉引擎,给你更流畅顺滑视觉体验正面是一