修改openstack用户配额

这是我在工作中遇到的一个很有趣的小问题,当时的场景是这样的:

公司的云产品要上线数据库服务(trove),因为每创建数据库实例都要占用一个虚拟机及相关资源的配额,尤其是用户的安全组默认配额(10个)就不够用了,所以公司领导给了我一个要求,将原来的默认配额改为xxx,将已经调整过配额用户的配额加xxx


Table of Contents

  1. 难点分析
  2. 我的思路
  3. 实践出真知
  4. 其他

难点分析

修改默认配额好办,直接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配置文件),那么,修改配额的脚本只需要作用在第一类用户。

脚本应该做的:能够筛选出第一类用户,将这类用户已经修改过的配额做加法,对未被修改过的配额修改为固定值,这个值等于默认值。

实践出真知

写了个脚本用来处理上面的第一类用户:

脚本的逻辑为:

  1. 脚本传入的是一个projectid
  2. 从数据库拿出这个租户已经被修改了的资源配额
  3. 对这些资源配额进行判断,如果以前调节为-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用户配额的更多相关文章

  1. 修改openstack Centos镜像的默认用户的密码

    Ubuntu官方提供的OpenStack镜像是用Key来登录的,太麻烦,可以改成用密码来登录. 修改image的工具叫:guestfish. yum install libguestfs-tools ...

  2. edquota - 编辑用户配额

    SYNOPSIS(总览) edquota [ -p proto-username ] [ -u | -g ] username... edquota [ -u | -g ] -t DESCRIPTIO ...

  3. 修改openstack镜像--支持root密码登陆

    一.前言 从openstack官方下载的云镜像一般都是普通用户密钥登陆,比如centos镜像的普通用户为centos,ubuntu镜像的普通用户为ubuntu,虽然密钥登陆系统相比密码登陆来说比较方便 ...

  4. Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码

    在上一篇随笔里面详细讲解了Linux系统的启动过程 (Linux学习之CentOS(二十一)--Linux系统启动详解),我们知道Linux系统的启动级别一共有6种级别,通过 /etc/inittab ...

  5. 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 ...

  6. SYSDBA身份登陆时可以修改其他用户的密码

    在以SYSDBA身份登陆时可以修改其他用户的密码,比如:SQL> alter user user01 identified by user10;用户已更改.这个是把USER01用户密码修改为US ...

  7. samba共享修改匿名用户为非nobody

    samba共享修改匿名用户为非nobody 1)linux的samba用户,如果开启匿名用户登陆共享权限,security 设置为 share ,配置如下:[root@centos69:~]$grep ...

  8. 修改linux用户密码

    对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password:  ...

  9. 如何修改Oracle用户密码

    大家如果不知道oracle数据库的密码的话,我们可以通过简单的命令行把密码进行修改. 1.打开cmd 2 在弹出的命令提示窗口输入 set oracle_sid=数据库名称(实例),回车.例如数据库名 ...

随机推荐

  1. 自定义圆形ImageView(解决Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();报错问题)

    package com.bottle.bottlelilibrary.view; import android.content.Context; import android.graphics.Bit ...

  2. 30. pt-upgrade

    用来测试新老版本数据库对sql的结果是否一致.两台开发测试数据库,一台是老版本,一台是新版本,来做比较,生产库别用. pt-upgrade h=192.168.100.101,P=3306,u=adm ...

  3. 设计模式学习心得<外观模式 Facade>

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  4. Linux iptables 安全配置(防Ddos)

    *filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-N whitelist-A whitelist -s 58.60 ...

  5. core里使用log4net

    1. nuget 里安装 log4net 2. startup.cs里配置读取配置文件 public static ILoggerRepository repository { get; set; } ...

  6. DTO的问题

    首先使用写好的excle将表中的列进行复制,然后生成代码. 实现一个类继承FormCommonDTO.注意父类有的属性子类一定不能写,否则转换时会报错. 字段名字不一样,意义一样的,不能删除

  7. mysql编译好的简单安装

    .创建mysql用户的账号 useradd mysql .下载mysql编译好的压缩包 .安装mysql yum -y install numactl libaio 安装依赖库 tar -zxvf m ...

  8. 第二阶段第五次spring会议

    昨天我对软件加上了写便签时自动加上时间的功能. 今天我将对初始页面进行加工和修改. 我用两个小动物作为按钮分别进入动物便签界面和植物便签界面,可以让用户自由选择. 明天我将尝试对软件进行添加搜索引擎的 ...

  9. k8s 安装步骤

    1 安装Docker 1.1 增加中国区镜像 https://registry.docker-cn.com 2 下载安装k8s的镜像的脚本 https://github.com/AliyunConta ...

  10. 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 ...