修改openstack用戶配額


修改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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM