修改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=数据库名称(实例),回车.例如数据库名 ...
随机推荐
- 2018年 js 简易控制滚动条滚动的简单方法
首先是es2015 的新api Element.scrollIntoView() // 滚动到最上方 等同于 dom.scrollIntoView(true) Element.scrollIntoVi ...
- Intellij Idea15 快捷键设置大全
一:菜单快捷键 快捷键 设置Bar快捷键,参考文章 进入(Enter Full Screen) Alt+S /(Status Bar) Alt+T /(Toolbar) Alt+B ...
- mac电脑使用技巧和相关快捷键
移动与选取 1. 光标移动 刚从 Windows 转过来的时候可能会发现,Mac 上没有 Home 和 End 键.其实,直接这样就好了: Cmd + ← 移至行首 (Home)Cmd + → 移 ...
- openstack快速复制一台云主机系统
1.先把目标主机创建快照,目标机器会关机 2.创建主机 3.设置网络和ip: 当我ifconfig eth0的时候出现如下错误:eth0: error fetching interface infor ...
- grunt压缩js代码
安装node.js的环境和grunt插件在上一篇已经将过,点击这里跳到上一篇 所以我们直接从压缩插件的安装开始讲 起 1.安装uglify插件 目录结构如下: 命令行:npm install grun ...
- Pancake Sorting LT969
Given an array A, we can perform a pancake flip: We choose some positive integer k <= A.length, t ...
- pypi batch download
https://wiki.archlinux.org/index.php/Python_package_guidelines_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87 ...
- TypeError: 'range' object does not support item assignment处理方法
vectorsum.py#!/usr/bin/env/pythonimport sysfrom datetime import datetimeimport numpy as np # def num ...
- Linux开发黑客
参考网站:http://blog.chinaunix.net/uid/20543672/abstract/1.html tekkamanninja
- linux shell 多个命令一起执行的几种方法
在命令行可以一次执行多个命令,有以下几种: 1.每个命令之间用;隔开 说明:各命令的执行结果,不会影响其它命令的执行.换句话说,各个命令都会执行, 但不保证每个命令都执行成功. cd /home/Py ...