functions

<stdin> - OpenStack 文档

版权 2015 Hewlett-Packard Development Company, L.P.

根据 Apache 许可证 2.0 版(“许可证”)授权;除非符合许可证,否则您不得使用此文件。您可以从以下位置获取许可证的副本:

https://apache.org/licenses/LICENSE-2.0

除非适用法律或书面协议要求,根据许可证分发的软件以“原样”分发,不提供任何形式的保证或条件,无论是明示的还是暗示的。有关许可证下权限和限制的具体语言,请参阅许可证。

functions - Grenade 特定的函数

以下变量假定由某些函数定义

  • GRENADE_DIR
  • TARGET_DEVSTACK_DIR
  • MYSQL_PASSWORD
  • SAVE_DIR
# 分隔符 #!/bin/bash # 分隔符 _XTRACE_GRENADE_FUNCTIONS=$(set +o | grep xtrace) set +o xtrace # 分隔符 GRENADE_DIR=$(cd $(dirname "${BASH_SOURCE:-$0}") && pwd) source ${TARGET_DEVSTACK_DIR}/functions source ${TARGET_DEVSTACK_DIR}/lib/stack source ${GRENADE_DIR}/inc/upgrade source ${GRENADE_DIR}/inc/plugin # 分隔符 function source_quiet { XTRACE=$(set +o | grep xtrace) set +o xtrace source $@ $XTRACE } # 分隔符 function ping_check_public { local ip=$1 local boot_timeout=$2 local expected=${3:-"True"} local check_command="" if [[ "$expected" = "True" ]]; then check_command="while ! ping -c1 -w1 $ip; do sleep 1; done" else check_command="while ping -c1 -w1 $ip; do sleep 1; done" fi if ! timeout $boot_timeout sh -c "$check_command"; then if [[ "$expected" = "True" ]]; then # 分隔符 local fip=$(openstack floating ip list --floating-ip-address $ip -f value -c Port) local server=$(openstack port show $fip -f value -c device_id) openstack console log show $server die $LINENO "[Fail] Couldn't ping server" else die $LINENO "[Fail] Could ping server" fi fi } # 分隔符 function save_data { local release=$1 local dir=$2 echo_summary "正在转储 $release 数据库" mkdir -p $SAVE_DIR local db_type=$( set +o xtrace && source $dir/stackrc && echo $DATABASE_TYPE) if [[ "${db_type}" == "mysql" ]]; then save_mysql_dbs $release $dir else echo_summary "TODO: 保存 $db_type 数据库的状态" fi } function worlddump { local name=$1 if [[ -n "$name" ]]; then name="-n $name" fi if [[ -x $TARGET_DEVSTACK_DIR/tools/worlddump.py ]]; then $TARGET_DEVSTACK_DIR/tools/worlddump.py $name -d $LOGDIR sleep 1 else echo "警告:尝试 worlddump 但找不到 $TARGET_DEVSTACK_DIR/tools/worlddump.py" fi } # 分隔符 trap exit_trap EXIT function exit_trap { # 分隔符 local r=$? # 分隔符 set +o xtrace # 分隔符 set +o errexit if [[ $r -ne 0 ]]; then # 分隔符 local frame=0 while caller $frame; do ((frame++)); done echo "退出代码:$r" worlddump fi exit $r } function run_tempest { local release_dir release_dir=$1 cd $release_dir/tempest # 分隔符 unset TEMPEST_VENV_UPPER_CONSTRAINTS # 分隔符 TEMPEST_VENV_UPPER_CONSTRAINTS=$(set +o xtrace && source $release_dir/devstack/stackrc && echo $TEMPEST_VENV_UPPER_CONSTRAINTS) # 分隔符 if [[ "$TEMPEST_VENV_UPPER_CONSTRAINTS" != "master" ]]; then echo "正在使用 $TEMPEST_VENV_UPPER_CONSTRAINTS 约束在 Tempest 虚拟环境中。" # 分隔符 export UPPER_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS export TOX_CONSTRAINTS_FILE=$TEMPEST_VENV_UPPER_CONSTRAINTS else # 分隔符 export UPPER_CONSTRAINTS_FILE=https://releases.openstack.org/constraints/upper/master export TOX_CONSTRAINTS_FILE=https://releases.openstack.org/constraints/upper/master fi tox -esmoke -- --concurrency=$TEMPEST_CONCURRENCY } FSSH="ssh -v -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" # 分隔符 $_XTRACE_GRENADE_FUNCTIONS # 分隔符

保存跟踪设置

包含通用函数

就像 source 一样,除了关闭跟踪,因为它只会碍事

TODO:我们真的想使用 devstack 中存在的 ping_check_functions,但是它们都被包装在 lib/neutron gorp 中。在可以干净地分离它们之前,我们需要在这里保留自己的副本。

ping_check_public $ip $timeout [False] - ping 一个具有公共 IP 地址的机器。应该适用于 neutron 或 nova-net。如果将 False 作为最后一个参数传递,也可以用于确保来宾未启动。

如果 ping 失败,则转储控制台日志

save_data() 将服务数据存储转储到 SAVE_DIR 中,用于基本或目标版本。

设置退出陷阱用于调试目的

非常重要的是,这是此函数的第一行,否则我们会破坏退出代码

在此期间我们不需要跟踪

我们必须在此关闭 errexit,否则当 while caller 结束时(以错误的退出代码)我们将过早地从该函数退出

在失败时展开调用堆栈

取消设置约束,因为它可能由基本或目标测试运行之前设置过

注意(yoctozepto):Grenade 不了解 TEMPEST_VENV_UPPER_CONSTRAINTS,只有 DevStack 了解。此来源从 DevStack 获取该变量。

注意(gmann):如果 gate 显式设置了 Tempest venv 要使用的非 master 约束,那么在运行测试时也使用相同的约束,否则,它将由于约束不匹配而重新创建 Tempest venv。重新创建 Tempest venv 会冲掉最初安装的 tempest 插件及其依赖项。

注意:设置两个 tox env 变量,并且一旦 Tempest 开始使用新的变量 TOX_CONSTRAINTS_FILE,我们就可以删除旧的变量。

注意(gmann):我们需要设置以下 env 变量指向 master 约束,即使这是 tox.ini 中的默认值。否则,它可能会导致 grenade 运行出现问题,其中旧的和新的 devstack 具有不同的 tempest(旧的和 master)来安装。有关详细问题,请参阅 https://bugs.launchpad.net/devstack/+bug/2003993

强制使用较短的连接超时时间,如果网络出现问题,我们可能会因为 TCP 超时/重试而导致每次 ssh 尝试挂起几分钟。

不检查或存储主机密钥,这使得本地开发更容易,因为主机可能会来来去去。

自动接受我们连接的任何内容

恢复 xtrace