zoukankan      html  css  js  c++  java
  • 修改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
    
  • 相关阅读:
    java 生成12位随机数,解决The literal 9999999999999 of type int is out of range 问题
    使用loadrunner 12 手动关联
    解析xml文件,修改Jenkins的配置
    自定义报告,用Java写一个html文件
    解决Jenkins的错误“The Server rejected the connection: None of the protocols were accepted”
    selenium项目--读取测试用例
    header("Location:login.php")
    详细设计说明书(转)
    Visual EmbedLinux Tools:让vs支持嵌入式Linux开发(转)
    phpstorm集成phpunit(转)
  • 原文地址:https://www.cnblogs.com/mauricewei/p/7834190.html
Copyright © 2011-2022 走看看