DR 项目小结
2016-11-14 11:24 云物互联 阅读(168) 评论(0) 编辑 收藏 举报前言
个人的项目总结, 非技术类博文.
需要补充的知识点
- HTTP 协议与其内置方法
- curl 指令和各选项的意义
- Keystone 认证流程和各项目配置文件 [keystone_authtoken] 的含义
- Git
- 异常处理
- docker
笔记
语法应用场合
- 异常处理: as 可以获取异常信息 , 本质上是异常类的一个对象 , 可以调用异常实例化对象的属性.
import six
from egis.i18n import _LW
except Exception as err:
LOG.warning(_LW("Failed to delete server %(server) as "
"error %(err)s"), {'server': server['id'],
'err': six.text_type(err)})
-异常处理: raise 一般用于在 try-catch 捕获了原来的异常之后来, 触发一个你希望触发的异常(异常的转换), 并且这个异常可以是自定义的.
- 日志输出: 在关键(容易出现错误)的地方编写明显的错误输出日志
一般在 except 异常捕获之后, 在重新 * raise* 触发异常之前需要记录日志信息.
from oslo_log import log as logging
LOG = logging.getLogger(__name__)
except db_exc.DBConnectionError:
OG.exception(_LE("model server went away, retry again."))
raise
注释: 假如自己重新看代码 10 秒内还看不懂的时候就表示应该写注释了
函数中的参数值如果是一个不会被经常修改的数值 , 一般会用常量对象来表示, 而不会直接将该数值写到函数的参数列表中. 因为这回导致代码的可读性降低, 不能清晰的知道该数值的含义. EG:
NUMBER = 100
def function(NUMBER, *args, **kwargs):
pass
- 在传递参数时, 如果实参使用了 **filters 这种形式那么只能传递 dict 类型的参数,否则报错.
filters = filters or {}
query_res = query_res.filter_by(**filters).all() # 变量 filters 必须为 dict 类型对象
- 兼容性问题:
if vm_list == []: return
这种写法是不符合兼容性的. 应该写成:
if not vm_list or not len(vm_list): return
Openstack 相关
- 单元测试: 修改了 requirements.txt 文件之后, tox 指令需要 -r 选项来重新安装软件包集合才能生效
vim egis/requirements.txt
oslo.vmware>=2.1.0
sudo tox -r -e py27
- 单元测试: 单元测试文件中是默认不允许通过 pdb 来调试代码的, 但是可以通过安装 test-requirements.txt 内的测试扩展软件包来支持这个功能.
sudo pip install -e . -r test-requirements.txt -r requirements.txt
python -m testtools.run egis.tests.unit.api.v1.test_vmware_connects
manager.py 内定义的方法一定要有形参 context , 否则会报错
cctxt = self.client.prepare(server=host)
指定了接受这个 rpc 请求的 server_ip
SQLAlchemy 相关
SQLAlchemy : session.delete(exsi_hypervisor_ref) 会将 exsi_hypervisor_ref 中包含的记录删除(强删除), 而 exsi_hypervisor_ref.delete(session) 会将 exsi_hypervisor_ref 中的记录的字段 deleted 值设为 1 , 保留该条记录(弱删除)
SQLAlchemy : 一次性删除多行的写法, EG. 将拥有 exsi_hypervisor.id 的所有记录删除
vmware_networks_ref = session.query(models.VmwareNetwork).filter_by(exsi_hypervisor_id=exsi_hypervisor.id)
vmware_networks_ref.delete()
对数据库操作的异常应该在 sqlalchemy/api.py 文件中抛出异常, 然后在 api/v1/vmware_connects.py 截获异常. 因为 HTTP API 接口只负责信息的转发.
mysql 在使用 SQL 文件恢复数据库时, 需要现将原来的数据库清理干净再恢复, 否则会由缺表的情况.
Git 相关
合并冲突
- git status 找到冲突的文件
- 将冲突去除
- 将冲突文件重新加入临时区 git add egis/api/v1/router.py
- 合并分支 git rebase –continue
- 重新提交 git review
合并分支
- git checkout master
- git pull origin master
- git checkout aju-dev
- git rebase master
- git status
- git review
其他
- 添加网卡子接口
sudo ifconfig enp3s0:0 10.0.0.4/24 10.0.0.255 up
sudo ip addr add 192.168.0.61/24 dev enp3s0
ping 172.16.100.10
101.5 没有 ISCSI.name, 需要手动的开启 ISCSI Client: esxcli iscsi software set -e true
ERROR: 前端连接不上后端, 后端能够正常返回 response, 但是前端没有跳转. 是因为前后端时间不同步导致不能缓存用户信息造成的.
VIM 指令: split 分裂编辑一个相同的文件