修改openstack用户配额
修改openstack用户配额
这是我在工作中遇到的一个很有趣的小问题,当时的场景是这样的:
公司的云产品要上线数据库服务(trove),因为每创建数据库实例都要占用一个虚拟机及相关资源的配额,尤其是用户的安全组默认配额(10个)就不够用了,所以公司领导给了我一个要求,将原来的默认配额改为xxx,将已经调整过配额用户的配额加xxx
Table of Contents
难点分析
修改默认配额好办,直接nova quota-class-update --xxx xxx default就行了,如果命令行不能更改的直接写在配置文件里。但是已经调整过的用户怎么修改呢?这是个问题。
我的思路
对于quota而言,当前云平台存在两种用户类型:
- 更改过配额的用户,更改过一项也算更改了配额的用户(会被nova标记),手动更改后会在数据库里有记录。
这里贴出nova的代码:
import xxx
- 没有更改过配额的用户
两种用户的区别:
- 第一种用户:
用户配额不会根据系统设置的默认配额的改变而改变;
也就是说nova quota-class-update --xxx xxx default对这类用户不生效;
这里不能使用openstack quota set --xxx xxx default,亲测没有作用。 - 第二种用户:
会根据系统设置的默认配额的改变而改变,这种用户是当前存在的大部分用户。
小结
更改默认配额命令行更改就行了(除了安全组需要更改neutron配置文件),那么,修改配额的脚本只需要作用在第一类用户。
脚本应该做的:能够筛选出第一类用户,将这类用户已经修改过的配额做加法,对未被修改过的配额修改为固定值,这个值等于默认值。
实践出真知
写了个脚本用来处理上面的第一类用户:
脚本的逻辑为:
- 脚本传入的是一个projectid
- 从数据库拿出这个租户已经被修改了的资源配额
- 对这些资源配额进行判断,如果以前调节为-1则不作改动,如果不是-1且有数值则做加法,如果没有配额则设置为期望的数值。
注:脚本执行完后,所有以前被手动更改过配额的用户,未被更改过的其他资源也会被设置为一个参数,也就是说某个租户但凡是被手动改过一次配额,那么脚本执行完后这个租户的所有资源配额会被标记为"已被手动更改"。
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=default
#export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_TOKEN=xxxxxxxxxxxxxxxxxxxxxx
export OS_AUTH_TYPE=v3token
export OS_AUTH_URL=http://lb.2.stage.polex.io:35357/v3
export OS_IDENTITY_API_VERSION=3
PROJECT_ID=$1
BEFORE_DATA_INS=` mysql -hlb.2.stage.polex.io -uxxxx -pxxxx nova -t -e "select hard_limit from quotas where project_id='$1' and resource='instances' \G" |grep hard|awk '{print $2}'`
BEFORE_DATA_RAM=` mysql -hlb.2.stage.polex.io -uxxxx -pxxxx nova -t -e "select hard_limit from quotas where project_id='$1' and resource='ram' \G" |grep hard|awk '{print $2}'`
BEFORE_DATA_CPU=` mysql -hlb.2.stage.polex.io -uxxxx -pxxxx nova -t -e "select hard_limit from quotas where project_id='$1' and resource='cores' \G" |grep hard|awk '{print $2}'`
BEFORE_DATA_SEC=` mysql -hlb.2.stage.polex.io -uxxxx -pxxxx neutron -t -e "select * from quotas where tenant_id='$1' and resource='security_group' \G" |grep limit|awk '{print $2}'`
BEFORE_DATA_VOL=` mysql -hlb.2.stage.polex.io -uxxxx -pxxxx cinder -t -e "select hard_limit from quotas where project_id='$1' and resource='volumes' \G" |grep hard|awk '{print $2}'`
BEFORE_DATA_GIG=` mysql -hlb.2.stage.polex.io -uxxxx -pxxxx cinder -t -e "select hard_limit from quotas where project_id='$1' and resource='gigabytes' \G" |grep hard|awk '{print $2}'`
#判断是否为第二类用户
if [ $BEFORE_DATA_INS ]||[ $BEFORE_DATA_CPU ]||[ $BEFORE_DATA_SEC ]||[ $BEFORE_DATA_VOL ]||[ $BEFORE_DATA_GIG ];then
#判断配额是否存在,若等于-1,不改变,若存在做加法,若不存在设置为固定值。
if [ "$BEFORE_DATA_INS"x == "-1"x ];then
EXCEPT_DATA_INS=-1
elif [ $BEFORE_DATA_INS ]&&[ $BEFORE_DATA_INS != -1 ];then
EXCEPT_DATA_INS=$[${BEFORE_DATA_INS}+40]
else
EXCEPT_DATA_INS=50
fi
if [ "$BEFORE_DATA_RAM"x == "-1"x ];then
EXCEPT_DATA_RAM=-1
elif [ $BEFORE_DATA_RAM ]&&[ $BEFORE_DATA_RAM != -1 ];then
EXCEPT_DATA_RAM=$[${BEFORE_DATA_RAM}+51200]
else
EXCEPT_DATA_RAM=102400
fi
if [ "$BEFORE_DATA_CPU"x == "-1"x ];then
BEFORE_DATA_CPU=-1
elif [ $BEFORE_DATA_CPU ]&&[ $BEFORE_DATA_CPU != -1 ];then
EXCEPT_DATA_CPU=$[${BEFORE_DATA_CPU}+80]
else
EXCEPT_DATA_CPU=100
fi
if [ "$BEFORE_DATA_SEC"x == "-1"x ];then
BEFORE_DATA_SEC=-1
elif [ $BEFORE_DATA_SEC ]&&[ $BEFORE_DATA_SEC != -1 ];then
EXCEPT_DATA_SEC=$[${BEFORE_DATA_SEC}+40]
else
EXCEPT_DATA_SEC=50
fi
if [ "$BEFORE_DATA_VOL"x == "-1"x ];then
BEFORE_DATA_VOL=-1
elif [ $BEFORE_DATA_VOL ]&&[ $BEFORE_DATA_VOL != -1 ];then
EXCEPT_DATA_VOL=$[${BEFORE_DATA_VOL}+40]
else
EXCEPT_DATA_VOL=50
fi
if [ "$BEFORE_DATA_GIG"x == "-1"x ];then
BEFORE_DATA_GIG=-1
elif [ $BEFORE_DATA_GIG ]&&[ $BEFORE_DATA_GIG != -1 ];then
EXCEPT_DATA_GIG=$[${BEFORE_DATA_GIG}+1000]
else
EXCEPT_DATA_GIG=2000
fi
#echo $BEFORE_DATA_INS $EXCEPT_DATA_INS
#echo $BEFORE_DATA_RAM $EXCEPT_DATA_RAM
#echo $BEFORE_DATA_CPU $EXCEPT_DATA_CPU
#echo $BEFORE_DATA_SEC $EXCEPT_DATA_SEC
#echo $BEFORE_DATA_VOL $BEFORE_DATA_VOL
#echo $BEFORE_DATA_GIG $EXCEPT_DATA_GIG
#更改配额
openstack quota set --instances $EXCEPT_DATA_INS $PROJECT_ID
openstack quota set --ram $EXCEPT_DATA_RAM $PROJECT_ID
openstack quota set --cores $EXCEPT_DATA_CPU $PROJECT_ID
openstack quota set --secgroups $EXCEPT_DATA_SEC $PROJECT_ID
openstack quota set --volumes $EXCEPT_DATA_VOL $PROJECT_ID
openstack quota set --gigabytes $EXCEPT_DATA_GIG $PROJECT_ID
fi
if [ $? = 0 ];then
echo $1 : ok!
fi
其他
修改默认配额方法:
#instances,ram,cpu
nova quota-class-update --xxx xxx default
#volumes,gigabytes
cinder quota-class-update --xxx xxx default
#secgroups
无法用命令行更改
可通过该配置文件:API节点,
neutron.conf
[quotas]
quota_security_group = X
修改openstack用户配额的更多相关文章
- 修改openstack Centos镜像的默认用户的密码
Ubuntu官方提供的OpenStack镜像是用Key来登录的,太麻烦,可以改成用密码来登录. 修改image的工具叫:guestfish. yum install libguestfs-tools ...
- edquota - 编辑用户配额
SYNOPSIS(总览) edquota [ -p proto-username ] [ -u | -g ] username... edquota [ -u | -g ] -t DESCRIPTIO ...
- 修改openstack镜像--支持root密码登陆
一.前言 从openstack官方下载的云镜像一般都是普通用户密钥登陆,比如centos镜像的普通用户为centos,ubuntu镜像的普通用户为ubuntu,虽然密钥登陆系统相比密码登陆来说比较方便 ...
- Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码
在上一篇随笔里面详细讲解了Linux系统的启动过程 (Linux学习之CentOS(二十一)--Linux系统启动详解),我们知道Linux系统的启动级别一共有6种级别,通过 /etc/inittab ...
- mac 安装mysql + 修改root用户密码 + 及报Access denied for user 'root'@'localhost' (using password:YES)解决办法
1.下载MySQL 到mysql的官网http://dev.mysql.com/downloads/mysql/然后在页面中会看到“MySQL Community Server”下方有一个“downl ...
- SYSDBA身份登陆时可以修改其他用户的密码
在以SYSDBA身份登陆时可以修改其他用户的密码,比如:SQL> alter user user01 identified by user10;用户已更改.这个是把USER01用户密码修改为US ...
- samba共享修改匿名用户为非nobody
samba共享修改匿名用户为非nobody 1)linux的samba用户,如果开启匿名用户登陆共享权限,security 设置为 share ,配置如下:[root@centos69:~]$grep ...
- 修改linux用户密码
对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password: ...
- 如何修改Oracle用户密码
大家如果不知道oracle数据库的密码的话,我们可以通过简单的命令行把密码进行修改. 1.打开cmd 2 在弹出的命令提示窗口输入 set oracle_sid=数据库名称(实例),回车.例如数据库名 ...
随机推荐
- BP算法的矩阵推导
目录 1. 需要的微积分知识 1.1 导数 1.2 求导的链式法则 2. 梯度下降法 2.1 梯度 2.2 梯度算法的解释 3.误差反向传播算法 3.1 理论推导 3.1.1 符号说明 3.1.2 推 ...
- 机器学习之支持向量机(SVM)学习笔记
支持向量机是一种二分类算法,算法目的是找到一个最佳超平面将属于不同种类的数据分隔开.当有新数据输入时,判断该数据在超平面的哪一侧,继而决定其类别. 具体实现思路: 训练过程即找到最佳的分隔超平面的过程 ...
- Django ORM 常用字段和参数
Django ORM 常用字段和参数 一:常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. I ...
- 自己搭建git服务器
1.安装git 2.创建git用户,给权限(git目录下) 3.设置公钥 4.初始化git仓库 5.给权限(仓库) 连接到本地
- 2-1 如何抓不同的接口(手机抓包,web网页抓包)
举个例子,一个测试和安卓的对话. 测试:Android你这里有个bug Android:这是服务端的bug 测试:是你这里显示的不对 Android:你去看服务端返回数据,他不对,你会不会测试. 从这 ...
- 口试Linq题
LINQ to SQL与IQueryable 理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列. LINQ to Object和LINQ to SQL有何区别 ...
- 运用SharedPreferences“偷取”输入的信息
运用SharedPreferences"偷取"输入的信息 本次的任务是 利用SharedPreferences来完成信息的保存和读取 就是你输入什么 手机就可以把输入的内容&quo ...
- C重新入门
推荐书籍:<C专家编程>.<C和指针>.<C陷阱与缺陷> <C专家编程>参看:http://www.ituring.com.cn/article/274 ...
- C语言字符串和十六进制的相互转换方式
C语言的字符串操作并不像java,Csharp那样提供直接的方法,简单粗暴.所以,在转换的时候往往费力费时,近日做项目正好用到和java程序通讯,java发送过来的数据是十六进制数字组成的字符串,解析 ...
- 02.02.02 第2章 制作power bi图表(Power BI商业智能分析)
---恢复内容开始--- 02.02.02第2章 制作power bi图表 02.02.02.01 power pivot数据导入 00:08:43 02.02.02.02建立数据透视表 00:11: ...