修改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=数据库名称(实例),回车.例如数据库名 ...
随机推荐
- 自定义圆形ImageView(解决Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();报错问题)
package com.bottle.bottlelilibrary.view; import android.content.Context; import android.graphics.Bit ...
- 30. pt-upgrade
用来测试新老版本数据库对sql的结果是否一致.两台开发测试数据库,一台是老版本,一台是新版本,来做比较,生产库别用. pt-upgrade h=192.168.100.101,P=3306,u=adm ...
- 设计模式学习心得<外观模式 Facade>
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...
- Linux iptables 安全配置(防Ddos)
*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-N whitelist-A whitelist -s 58.60 ...
- core里使用log4net
1. nuget 里安装 log4net 2. startup.cs里配置读取配置文件 public static ILoggerRepository repository { get; set; } ...
- DTO的问题
首先使用写好的excle将表中的列进行复制,然后生成代码. 实现一个类继承FormCommonDTO.注意父类有的属性子类一定不能写,否则转换时会报错. 字段名字不一样,意义一样的,不能删除
- mysql编译好的简单安装
.创建mysql用户的账号 useradd mysql .下载mysql编译好的压缩包 .安装mysql yum -y install numactl libaio 安装依赖库 tar -zxvf m ...
- 第二阶段第五次spring会议
昨天我对软件加上了写便签时自动加上时间的功能. 今天我将对初始页面进行加工和修改. 我用两个小动物作为按钮分别进入动物便签界面和植物便签界面,可以让用户自由选择. 明天我将尝试对软件进行添加搜索引擎的 ...
- k8s 安装步骤
1 安装Docker 1.1 增加中国区镜像 https://registry.docker-cn.com 2 下载安装k8s的镜像的脚本 https://github.com/AliyunConta ...
- How to setup Visual Studio without pain
Visual Studio (VS) can be very hard to install. If you are lucky, one whole day may be enough to ins ...