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

从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的管理接口,暂时先这样吧

智能AI走入普通人生活智能AI走入普通人生活!国外ChatGPT4爆火,国内百度文心一言发布,未来AI智能将会给生活带来哪些便利?看完这篇文章,您一定会深深地感受到,未来已经来临!随着人工智能技术的不断普通人买iPhone14Pro,期待三年不换机有钱的人买iPhone14Pro,轻而易举,甚至部分人还会一年换一次新机。普通人买iPhone14Pro的想法就不一样了,多数普通用户期待入手的iPhone14Pro能用好几年,比想只用带身份证就出国吗在最新公布的第二批试点国家里,中国游客最关注的是越南和欧洲国家不过目前去越南阻力最大的不是机票,而是签证。现在越南落地签的材料需要出示当地旅行社或者公司发出邀请的电子批文由于批文无中国的富豪们到底有多少钱,他们为何执迷于向国外转移资产和移民马云卸任阿里董事长套现1000多以亿后,携全家远赴日本定居如今的马云早已携带全家去了日本,在东京最豪华的银座购置了豪宅,有传言这间豪宅是日本软银创始人孙正义转卖给马云的。据日本媒体47岁赵薇久违露面现身机场,手拿身份证击破移民传闻,消瘦了不少3月20日,有博主晒出了小燕子赵薇现身机场的照片,当天赵薇内穿深色毛衫,外搭浅色外套,下搭一条颇具时尚感的漏洞牛仔裤,脚蹬一双帅气逼人的黑色马丁鞋。或许是怕被路人认出,赵薇在机场刻期待中国女排佳绩!2023年排球亚锦赛分组揭晓北京时间3月17日,2023年男女排亚锦赛分组抽签揭晓。女排亚锦赛将于9月3日至10日在泰国呵叻举行,中国女排与哈萨克斯坦中国香港和菲律宾同处D组。男排亚锦赛将于8月19日至26日金星的妈妈韩颖儿子变女儿,扛过流言蜚语后,如今一家其乐融融亲眼看着儿子成为女儿,是一种什么感受?1994年,金星刚动完第一次变性手术,回到家就遭父亲手持扫帚狠劲鞭打,妈妈韩颖心疼,扑过去将他紧紧抱在怀中。俩人抱头痛哭过后,韩颖仔细抚摸孩子莱万没来巴萨时也会期待国家德比在诺坎普踢球会有额外力量直播吧3月18日讯莱万日前在采访中谈到了西甲的国家德比对手皇马,波兰人表示国家德比是世界上最重要的俱乐部赛事。皇马拥有很多出色且让人难以置信的球员,他们经验十足并且已经取得了很多成安徽启动江淮净网清朗从严整治自媒体乱象专项行动为依法加强自媒体管理,坚决打击自媒体造谣传谣假冒仿冒违规营利等突出问题,营造清朗网络空间。根据中央网信办统一部署,安徽省委网信办近日启动江淮净网清朗从严整治自媒体乱象专项行动。此次2023年安徽三支一扶考试培训定义判断(3。22)1。删失数据是指在观察或试验中,由于人力或其他原因未能观察到所感兴趣的事件发生,因而停止观察后得到的数据。如果删失发生的时刻是事先知道的,称之为第一类删失如果删失发生的数量是事先预安徽ampampquot大老虎ampampquot落马掌掴副局贪污1000万,和多名女警花有染,判17年在阅读此文前,诚邀您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。警察,在老百姓的眼中是一个保卫一方平安,守护百姓的英勇将士。无论遇到什么危险,只要
高松代表培养高水平人才,服务高质量发展政府工作报告提出,接续推进世界一流大学和一流学科建设。我们备受鼓舞。首次参加全国人大会议,全国人大代表,中国科学院院士中山大学校长高松现场聆听报告,更加深刻感受到国家对教育工作的高全英羽毛球公开赛石宇奇晋级男单16强冯彦哲黄东萍首轮出局全英羽毛球公开赛15日进入第二天争夺,上周德国公开赛遭遇一轮游的中国队男单好手石宇奇顺利闯过首关,德国公开赛上问鼎的混双组合冯彦哲黄东萍则首轮告负。27岁的石宇奇全英赛首战迎来日本字母哥恭喜雄鹿率先锁定季后赛席位,能够夺冠的球队仅以下三支雄鹿队50胜19负,率先锁定季后赛席位,字母哥在接受记者采访时,表达了对球队的祝贺,并且明确提出来本赛季有机会争夺总冠军的球队仅有以下三支,其中雄鹿队机会最大,上赛季的失利是因为米NBA恩比德哈登交相辉映76人直逼东部第二打到赛季后半段,76人逐渐显出两位巨星联手的威力。北京时间3月16日上午,客场作战的费城76人队以118比109击败骑士,豪取一波六连胜。比赛中费城两位巨星级别的球员大帝恩比德和大晚间公告丨3月16日这些公告有看头品大事久日新材终止投建年产32300吨光固化材料及净水剂建设项目久日新材公告,终止投资建设年产32300吨光固化材料及净水剂建设项目投资建设18340吨年光固化材料及光刻胶中间体建新华全媒走,去看青藏高原春耕现场新华社拉萨3月16日电(记者格桑边觉刘洲鹏)16日早晨,随着初春的阳光照耀山顶,西藏拉萨市林周县强嘎乡强嘎村的村民开始了农业生产。西藏林周县强嘎村的春耕仪式(无人机照片)(3月16上海天文馆有限空间里的无垠宇宙中国小康网独家专稿文小康中国小康网苏枫从纷繁都市到广袤太空,感受星空之美,自规划设计之初,上海天文馆就在以建设国际顶级天文馆为目标,秉持精心设计匠心打造用心管理的理念,努力探索一条强生出租升级女性深夜叫车热线奥迪在问题车展现场劝退维权车主武汉一新能源车街头突发自燃捷豹XFL有望3月24日正式上市美国同意欧盟汽车制造商享受美国的税收优惠内蒙收费公路实施新能源车通行费2折日本国内首次由飞行员乘坐并操纵空中汽车试飞关键词疯狂星期四,A股跌上热搜触发熔断!瑞信风暴,又引爆恐慌情绪房价结束11连跌,上海二手房涨幅全3月16日,A股超4200只个股飘绿,跌上热搜。三大股指低开低走,盘中弱势震荡下探,午后均跌超1。全天成交8450亿元,较15日放量266亿元北向资金小幅净买入7。87亿元。图片来上海科技馆事件母女已身亡,姥姥哭晕,具体原因让人心痛3月10日,上海科技馆发生一起坠亡事件,一对母女从3楼大约20米高的地方,不幸摔到了1楼地面上。小女孩看着五六岁的样子,从那么高的高度摔下来当场就身亡了,母亲也被摔成重伤,在抢救的利物浦近6次参加欧冠,5次遭到马德里球队淘汰直播吧3月16日讯欧冠18决赛次回合,利物浦总分26遭皇马淘汰。利物浦近6次参加欧冠,5次遭到马德里球队淘汰。201718赛季欧冠决赛,利物浦13负皇马无缘冠军201819赛季欧冠