keystone中test-setup.py

test-setup.py是keystone/tools目录下的一个脚本文件,openstack其它项目可能也有此文件。
利用tox对keystone进行单元测试之前,需要执行test-setup.py(正如脚本一开始的注释所示)
openstack社区CI也是这么做的。我们提交代码到gerrit后,会有一项py27检查,py27就是在python2.7环境下进行单元测试。通过查看其执行日志,确实发现会执行这么一个文件。

主要作用:
①修改root用户密码(如果不明确指定,则修改为insecure_slave)
②授权openstack_citest用户对任何数据表有所有权限(创建、删除…)
③创建数据库openstack_citest

搞这些干嘛呢?
执行单元测试时,有些测试用例是针对数据库的测试,这是真的测试,不是mock
所以但凡进行这种类型的测试会首先创建相应的数据表,而创建数据表是需要通过一个用户进行的。这个用户在keysone测试时是写死的,就是openstack_citest。
具体参考:oslo.db中的测试用户
另外,创建的数据库openstack_citest,通过我自己的测试发现并没有用到,每次执行测试时,会创建一个名称随机的数据库,然后测试创建的数据表都会创建在这个数据库中。
openstack_citest数据库基本废弃
最底下的部分,是针对PostgreSQL的,功能上跟上面应该是一样的。

#!/bin/bash -xe

# This script will be run by OpenStack CI before unit tests are run,
# it sets up the test system as needed.
# Developers should setup their test systems in a similar way.

# This setup needs to be run as a user that can run sudo.

# The root password for the MySQL database; pass it in via
# MYSQL_ROOT_PW.
DB_ROOT_PW=${MYSQL_ROOT_PW:-insecure_slave}

# This user and its password are used by the tests, if you change it,
# your tests might fail.
DB_USER=openstack_citest
DB_PW=openstack_citest

sudo -H mysqladmin -u root password $DB_ROOT_PW

# It's best practice to remove anonymous users from the database.  If
# a anonymous user exists, then it matches first for connections and
# other connections from that host will not work.
# 删除匿名用户
# 刷新权限(用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库)
# 授权openstack_citest用户能够不受任何限制访问任何数据表,且密码指定为openstack_citest
关于数据权限,参考
http://blog.youkuaiyun.com/anzhen0429/article/details/78296814
sudo -H mysql -u root -p$DB_ROOT_PW -h localhost -e "
    DELETE FROM mysql.user WHERE User='';
    FLUSH PRIVILEGES;
    GRANT ALL PRIVILEGES ON *.*
        TO '$DB_USER'@'%' identified by '$DB_PW' WITH GRANT OPTION;"

# Bump the max_connections limit
sudo -H mysql -u root -p$DB_ROOT_PW -h localhost -e "
    SET GLOBAL max_connections = 1024;"

# Now create our database.
# 通过刚授权用户openstack_citest,创建数据库openstack_citest 
mysql -u $DB_USER -p$DB_PW -h 127.0.0.1 -e "
    SET default_storage_engine=MYISAM;
    DROP DATABASE IF EXISTS openstack_citest;
    CREATE DATABASE openstack_citest CHARACTER SET utf8;"

# Same for PostgreSQL
# The root password for the PostgreSQL database; pass it in via
# POSTGRES_ROOT_PW.
DB_ROOT_PW=${POSTGRES_ROOT_PW:-insecure_slave}

# Setup user
root_roles=$(sudo -H -u postgres psql -t -c "
   SELECT 'HERE' from pg_roles where rolname='$DB_USER'")
if [[ ${root_roles} == *HERE ]];then
    sudo -H -u postgres psql -c "ALTER ROLE $DB_USER WITH SUPERUSER LOGIN PASSWORD '$DB_PW'"
else
    sudo -H -u postgres psql -c "CREATE ROLE $DB_USER WITH SUPERUSER LOGIN PASSWORD '$DB_PW'"
fi

# Store password for tests
cat << EOF > $HOME/.pgpass
*:*:*:$DB_USER:$DB_PW
EOF
chmod 0600 $HOME/.pgpass

# Now create our database
psql -h 127.0.0.1 -U $DB_USER -d template1 -c "DROP DATABASE IF EXISTS openstack_citest"
createdb -h 127.0.0.1 -U $DB_USER -l C -T template0 -E utf8 openstack_citest

注意:sudo -H mysqladmin -u root password $DB_ROOT_PW
在我本地执行这个脚本的时候,会报错。
error:’Acess denied for user ‘root’@’localhost (using password:No)

MYSQL 5.7版本不支持,上述修改密码的方式
新版的mysql数据库下的user表中已经没有Password字段了
mysql -u root -p
update mysql.user set authentication_string=password(“新密码”) where User=”root” and Host=”localhost”;
flush privileges;

你发现了一个关键线索: ```bash lrwxrwxrwx. 1 root root 39 10月 29 14:55 /etc/httpd/conf.d/wsgi-keystone.conf -> /user/share/keystone/wsgi-keystone.conf ``` ### ❌ 问题定位 这个符号链接指向了: ``` /user/share/keystone/wsgi-keystone.conf ``` 但正确的路径应该是: ``` /usr/share/keystone/wsgi-keystone.conf ``` 👉 注意:`/user/share` 是错误的!应该是 `/usr/share`(`s` 拼错了)。 这是一个典型的 **拼写错误导致的符号链接失效**,结果 Apache 启动时无法读取配置文件: ``` Could not open configuration file /etc/httpd/conf.d/wsgi-keystone.conf: No such file or directory ``` 因为虽然文件“存在”为一个软链,但它指向的是一个根本不存在的路径 `/user/...`。 --- ### ✅ 解决方案 #### 🔧 步骤 1:删除错误的符号链接 ```bash rm -f /etc/httpd/conf.d/wsgi-keystone.conf ``` > ⚠️ 安全提示:先确认没有其他服务依赖它。这是临时坏链,可以安全删除。 --- #### 🔧 步骤 2:创建正确的符号链接 ```bash ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/wsgi-keystone.conf ``` ✅ 现在检查是否正确: ```bash ls -l /etc/httpd/conf.d/wsgi-keystone.conf ``` 输出应类似: ``` lrwxrwxrwx 1 root root 39 Oct 29 15:00 /etc/httpd/conf.d/wsgi-keystone.conf -> /usr/share/keystone/wsgi-keystone.conf ``` 并且目标文件应该存在: ```bash ls -l /usr/share/keystone/wsgi-keystone.conf ``` 如果该文件也不存在,请参考前文重新安装 `openstack-keystone` 包。 --- #### ✅ 步骤 3:测试 Apache 配置并重启服务 ```bash httpd -t ``` 你应该看到: ``` Syntax OK ``` 然后启动或重启 Apache: ```bash systemctl start httpd # 或者如果已经在运行 systemctl restart httpd ``` 查看状态确认无错: ```bash systemctl status httpd ``` --- ### 🛠️ 补充:为什么会生成 `/user/share`? 这种错误通常由以下原因造成: | 原因 | 说明 | |------|------| | 手动执行过 `ln -s` 命令时打字错误 | 如 `sudo ln -s /user/share/...` 而不是 `/usr/share/...` | | 使用了错误的脚本或文档 | 某些非官方教程中可能存在笔误 | | RPM 包打包错误(罕见) | 极少数情况下第三方构建包有 bug | 但在大多数标准 RDO 或 CentOS OpenStack 环境中,正确路径是: ``` /usr/share/keystone/wsgi-keystone.conf ``` 并通过 post-install 脚本自动创建软链到 `/etc/httpd/conf.d/`。 --- ### ✅ 最终验证命令清单 ```bash # 1. 删除错误链接 rm -f /etc/httpd/conf.d/wsgi-keystone.conf # 2. 创建正确软链 ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/wsgi-keystone.conf # 3. 验证目标文件存在 ls -l /usr/share/keystone/wsgi-keystone.conf # 4. 测试 Apache 配置 httpd -t # 5. 重启 Apache systemctl restart httpd # 6. 检查是否监听端口 ss -tlnp | grep ':5000' # 7. 查看日志有无错误 journalctl -u httpd.service --since "5 minutes ago" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值