目录

前言

Openstack Developer 应该都知道, 开发一个 Openstack 的新项目并不是一个从 0 到 1 的过程, 而是在一个 Project Template 的框架中, 为其填充 API/DB/Manager 等代码定义和实现. 一般来说, 搭建这个 Template 框架并不困难, 只是太过繁琐. 本篇推荐的开源小项目, 可以非常帮助我们完成这些繁琐的工作, 用法也很简单. 如果大家能帮忙提交 BUG 的话, 我会非常欢迎和感谢 .

Github 地址

环境

  • OS:

    • Ubuntu 14.04
  • Openstack(Devstack) Version:
    • Liberty

openstack-project-generator

使用手册

  • 从 Github下载 :
git clone https://github.com/JmilkFan/openstack-project-generator.git
  • 执行 Bash 脚本 :

    NOTE: <new_manager_service_name> <new_project_name> 不能同名
cd openstack-project-generator
./generate.sh -m <new_manager_service_name> <new_project_name> <new_project_path>
# EG:
./generate.sh -m promanager proname /opt/stack
  • 一个小 BUG: 新项目需要从 openstack-project-generator/.git 中获取 version 的信息
cp -pr /opt/stack/openstack-project-generator/.git /opt/stack/proname
  • 安装新项目
sudo pip install -r /opt/stack/proname/requirements.txt -e .
  • 生成配置文件
mkdir /etc/proname
cd /opt/stack/proname/etc/proname/
sudo cp proname.conf.sample /etc/proname/proname.conf
sudo cp api-httpd.conf api-paste.ini logging_sample.conf policy.json rootwrap.conf /etc/proname
  • 编辑配置文件

    NOTE: 配置文件中 { } 内的值需要被替换

    sudo vim /etc/proname/proname.conf
[database]
connection=mysql+pymysql://{username}:{password}@{mysql_ip}/pronname?charset=utf8 [default]
my_ip=127.0.0.1 rabbit_port=5672
rabbit_userid = stackrabbit
rabbit_password = {rabbit_password}
rabbit_hosts = {rabbit_hosts_ip} osapi_proname_listen=0.0.0.0
osapi_proname_listen_port=8848 auth_strategy=keystone debug = True
verbose = True [keystone_authtoken]
admin_password = {password}
admin_user = nova
admin_tenant_name = service
identity_uri = http://{keystone_ip}:35357
auth_protocol = http
auth_port = 35357
auth_host = {keystone_host_ip}
  • tox 测试
cd /opt/stack/proname
tox -e genconfig
tox -e pep8
tox -e py27
  • 创建项目数据库
# 保证 proname 数据库下的所有表的编码集都是 utf8
CREATE DATABASE proname CHARACTER SET utf8;
GRANT ALL ON proname.* TO 'proname'@'%' IDENTIFIED BY 'password';
GRANT ALL ON proname.* TO 'proname'@'127.0.0.1' IDENTIFIED BY 'password';
GRANT ALL ON proname.* TO 'proname'@'localhost' IDENTIFIED BY 'password';
  • 初始化数据库
proname-manage db_sync
  • 验证服务是否正常运行
proname-api --config-file /etc/proname/proname.conf

到此为止, 新项目的服务就部署完成了, 赶紧撸代码吧 : )

自动化生成 Openstack 新项目开发框架的更多相关文章

  1. 如何使用Maven的archetype快速生成一个新项目(解决生成项目目录不完整问题)

    Maven的archetype Plugin可能大家都听过,但不一定都能很好地用好它.缺省地如果你使用 mvn archetype:generate  会从maven的Repository里查找所有支 ...

  2. React 官方脚手架 create-react-app快速生成新项目

    进入新公司已经半年了,各个业务线,技术栈都已经熟悉,工作也已经游刃有余,决定慢下脚步,沉淀积累,回顾一下所用技术栈所包含的基本知识,以及再公司中的实战. 首先回顾新项目搭建 react脚手架目前使用较 ...

  3. webpack前端构建工具学习总结(四)之自动化生成项目中的html页面

    接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 插件的介绍文档:https://www.npmjs.com/package/html-webpack-p ...

  4. 使用python编写量子线路打印的简单项目,并使用Sphinx自动化生成API文档

    技术背景 该文章一方面从量子线路的打印着手,介绍了一个简单的python量子线路工程.同时基于这个简单的小工程,我们顺带的介绍了python的API文档自动化生成工具Sphinx的基本使用方法. 量子 ...

  5. 如何向Openstack社区提交一个新项目

    前几天有个朋友问我:自己有一个idea不错的项目,也把基本的框架写好了,想贡献到Openstack社区,却不知道应该怎么做.正好之前我有过类似的经历,那么来分享一下我是如何向Openstack社区提交 ...

  6. 【Unity】工具类系列教程—— 代码自动化生成!

    转载自:https://zhuanlan.zhihu.com/p/30716595?utm_medium=social&utm_source=qq [为什么要做自动化工具] 工具类的创建是为了 ...

  7. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...

  8. 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目

    喜大普奔                         10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...

  9. cocos2d-x 3.2 创建新项目问题

    cocos2d-x 3.2 执行cocos2d-x\tools\cocos2d-console\console下的cocos2d.py,输入相应的参数即可创建一个新的项目,具体参数网上介绍一大堆,就不 ...

随机推荐

  1. 一分钟搭建 Web 版的 PHP 代码调试利器

    一.背景   俗话说:"工欲善其事,必先利其器".作为一门程序员,我们在工作中,经常需要调试某一片段的代码,但是又不想打开繁重的 IDE (代码编辑器).使用在线工具调试代码有时有 ...

  2. 剑指offer-二叉搜索树的后序遍历序列-python

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 递归法: 先判断左子树是否存在 再判断右子树是否存 ...

  3. 梯度下降算法(Gradient descent)GD

    1.我们之前已经定义了代价函数J,可以将代价函数J最小化的方法,梯度下降是最常用的算法,它不仅仅用在线性回归上,还被应用在机器学习的众多领域中,在后续的课程中,我们将使用梯度下降算法最小化其他函数,而 ...

  4. 高版本chrome不再支持window.showmodaldialog 的临时替换方案【用window.open】

    接管别人的项目,因开发时用了showmodaldialog 导致最近很多用户chrome升级到最新之后 就无法弹窗了.原因是新版chrome[37+]不再支持showmodaldialog. show ...

  5. tomcat 启动报错 解决办法 A child container failed during&nbsp

    转自:http://blog.sina.com.cn/s/blog_4e1e357d0102v55c.html 控制台报错: Caused by: org.apache.catalina.Lifecy ...

  6. Tomcat报java.io.IOException: Broken pipe错误

    Tomcat报java.io.IOException: Broken pipe错误,如下图: 解决方案:我的原因是因为网络策略导致出现该问题,即网络端口未启用或被限制.

  7. Django【第11篇】:Django之分页升级版本(组件)

    分页组件 一.分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(s ...

  8. 激活函数:Sigmod&tanh&Softplus&Relu详解

    什么是激活函数? 激活函数(Activation functions)对于人工神经网络模型去学习.理解非常复杂和非线性的函数来说具有十分重要的作用. 它们将非线性特性引入到我们的网络中.其主要目的是将 ...

  9. SpringBoot整合redis把用户登录信息存入redis

    首先引入redis的jai包 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  10. 【leetcode】827. Making A Large Island

    题目如下: 解题思路:这个题目可以进行拆分成几个子问题.第一,求出island的数量,其实就是 200. Number of Islands,这个很简单,DFS或者BFS都能搞定:第二,除了求出isl ...