修改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=数据库名称(实例),回车.例如数据库名 ...
随机推荐
- Spring的xml配置文件中约束的必要性 找不到元素 'beans' 的声明
今天在复习Spring MVC框架的时候,只知道xml配置文件中的约束有规范书写格式的作用,所以在配置HandlerMapping对象信息的时候没有加入约束信息之后进行测试,没有遇到问题.后来在配置S ...
- 30. pt-upgrade
用来测试新老版本数据库对sql的结果是否一致.两台开发测试数据库,一台是老版本,一台是新版本,来做比较,生产库别用. pt-upgrade h=192.168.100.101,P=3306,u=adm ...
- HTTP之请求消息Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. 请求行以一个方法符号开头,以空格分开,后面跟着请 ...
- 对 JSON 数据进行序列化和反序列化
如何:对 JSON 数据进行序列化和反序列化 2017/03/30 作者 JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间 ...
- python3 tkinter添加图片和文本
在前面一篇文章基础上,使用tkinter添加图片和文本.在开始之前,我们需要安装Pillow图片库. 一.Pillow的安装 1.方法一:需要下载exe文件,根据下面图片下载和安装 下载完 ...
- pycharm汉化(3.6版本)
step 1:下载pycharm汉化包 链接:https://pan.baidu.com/s/1htgcbZY 密码:8uia step 2:将pycharm安装目录下的lib文件夹内下的resou ...
- JavaWeb(一)-Servlet知识
一.Servlet简介 Servlet是sun公司提供一门用于开发动态web资源的技术. sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个java程序向浏 ...
- tp5 数据库
连接数据库: 在config下面的database.php里. 查找数据: halt(Db::name('studys')->column('name','age')); 也可以用find fi ...
- 周报数据采集之生存图片(execl方法)
https://blog.csdn.net/Luzaofa/article/details/81675364 Python之Excel chart另存为图片大家好,好久没有更新博客了,这一段时间有点忙 ...
- python模块:logging
# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and ...