In the past I have created scripts for loading test data into FreeIPA. I’ve started doing the same thing for Keystone, using the Web API. Here is the first. It uses a list of usernames generated from my FreeIPA sample data, based on first initial-last name of a bunch of the most popular names in the country. The list is here. Here is the script I use to load it. Once again, I use jq to parse the JSON.
Note that HTML hates heredocs: I had to replace the here doc double-less-than-sign with a comment:
#insert two less than signs here#
To make this format correctly. Reverse this change before running this file, or fetch the clean source from here.
#!/bin/bash
OS_USERNAME=admin
OS_PASSWORD=freeipa4all
OS_PROJECT_NAME=admin
#to use devstack credential uncomment this line
#. /opt/stack/devstack/openrc
read -r -d '' TOKEN_REQUEST_JSON #insert two less than signs here#EOF
{
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"domain": {
"name": "Default"
},
"name": "$OS_USERNAME",
"password": "$OS_PASSWORD"
}
}
},
"scope": {
"project": {
"domain": {
"name": "Default"
},
"name": "$OS_PROJECT_NAME"
}
}
}
}
EOF
#echo $TOKEN_REQUEST_JSON
TOKEN=`curl -si -d "$TOKEN_REQUEST_JSON" -H "Content-type: application/json" http://localhost:35357/v3/auth/tokens | awk '/X-Subject-Token/ {print $2}'`
create_user(){
NEW_USERNAME=$1
PROJECT_ID=$2
read -r -d '' CREATE_USER_JSON #insert two less than signs here#EOF
{
"user": {
"default_project_id": $PROJECT_ID,
"description": "Description",
"domain_id": "default",
"email": "unused@example.com",
"enabled": true,
"name": $NEW_USERNAME,
"password": "changeme" }
}
EOF
curl -si -H"X-Auth-Token:$TOKEN" -H "Content-type: application/json" http://localhost:35357/v3/users -d "$CREATE_USER_JSON"
}
DEMO_PROJECT_ID=`curl -s -H"X-Auth-Token:$TOKEN" -H "Content-type: application/json" http://localhost:35357/v3/projects | jq '.projects[] | select( contains ({name: "demo"})) | {id}[]'`
while read USERNAME
do
create_user $USERNAME $DEMO_PROJECT_ID
done < usernames.txt