Revert "Revert "oran-shell-release: release image for F""
[pti/rtp.git] / meta-starlingx / meta-stx-integ / recipes-devtools / python / files / python-keystone / identity.sh
1 #!/bin/bash
2
3 #
4 # Copyright (C) 2014 Wind River Systems, Inc.
5 #
6 # The identity.sh provides utilities for services to add tenant/role/users,
7 # and service/endpoints into keystone database
8 #
9
10 # Use shared secret for authentication before any user created.
11 export OS_SERVICE_TOKEN="password"
12 export OS_SERVICE_ENDPOINT="http://localhost:35357/v2.0"
13
14 declare -A PARAMS
15
16 # Shortcut function to get a newly generated ID
17 function get_field () {
18     while read data; do
19         if [ "$1" -lt 0 ]; then
20             field="(\$(NF$1))"
21         else
22             field="\$$(($1 + 1))"
23         fi
24         echo "$data" | awk -F'[ \t]*\\|[ \t]*' "{print $field}"
25     done
26 }
27
28 # Usage help
29 help () {
30     if [ $# -eq 0 ]; then
31         echo "Usage: $0 <subcommand> ..."
32         echo ""
33         echo "Keystone CLI wrapper to create tenant/user/role, and service/endpoint."
34         echo "It uses the default tenant, user and password from environment variables"
35         echo "(OS_TENANT_NAME, OS_USERNAME, OS_PASSWORD) to authenticate with keystone."
36         echo ""
37         echo "Positional arguments:"
38         echo "  <subcommand>"
39         echo "    user-create"
40         echo "    service-create"
41         echo ""
42         echo "See \"identity.sh help COMMAND\" for help on a specific command."
43         exit 0
44     fi
45
46     case "$2" in
47         service-create)
48             echo "Usage: $0 $2 [--name=<name>] [--type=<type>] [--description=<description>] [--region=<region>] [--publicurl=<public url>] [--adminurl=<admin url>] [--internalurl=<internal url>]"
49             echo ""
50             echo "Create service and endpoint in keystone."
51             echo ""
52             echo "Arguments:"
53             echo "  --name=<name>"
54             echo "                  The name of the service"
55             echo "  --type=<type>"
56             echo "                  The type of the service"
57             echo "  --description=<description>"
58             echo "                  Description of the service"
59             echo "  --region=<region>"
60             echo "                  The region of the service"
61             echo "  --publicurl=<public url>"
62             echo "                  Public URL of the service endpoint"
63             echo "  --adminurl=<admin url>"
64             echo "                  Admin URL of the service endpoint"
65             echo "  --internalurl=<internal url>"
66             echo "                  Internal URL of the service endpoint"
67             ;;
68         user-create)
69             echo "Usage: $0 $2 [--name=<name>] [--pass=<password>] [--tenant=<tenant>] [--role=<role>] [--email=<email>]"
70             echo ""
71             echo "Arguments:"
72             echo "  --name=<name>"
73             echo "                  The name of the user"
74             echo "  --pass=<password>"
75             echo "                  The password of the user"
76             echo "  --tenant=<tenant>"
77             echo "                  The tenant of the user belongs to"
78             echo "  --role=<role>"
79             echo "                  The role of the user in the <tenant>"
80             echo "  --email=<email>"
81             echo "                  The email of the user"
82             ;;
83         *)
84             echo "Usage: $0 help <subcommand> ..."
85             echo ""
86             exit 0
87             ;;
88     esac
89 }
90
91 # Parse the command line parameters in an map
92 parse_param () {
93     while [ $# -ne 0 ]; do
94     param=$1
95     shift
96
97     key=`echo $param | cut -d '=' -f 1`
98     key=`echo $key | tr -d '[-*2]'`
99     PARAMS[$key]=`echo $param | cut -d '=' -f 2`
100     done
101 }
102
103 # Create tenant/role/user, and add user to the tenant as role
104 user-create () {
105     # validation checking
106     if [[ "$@" =~ ^--name=.*\ --pass=.*\ --tenant=.*\ --role=.*\ --email=.*$ ]]; then
107         params=`echo "$@" | sed -e 's%--name=\(.*\) --pass=\(.*\) --tenant=\(.*\) --role=\(.*\) --email=\(.*\)%--name=\1|--pass=\2|--tenant=\3|--role=\4|--email=\5%g'`
108     else
109         help
110         exit 1
111     fi
112
113     # parse the cmdline parameters
114     IFS="|"
115     parse_param $params
116     unset IFS
117
118     echo "Adding user in keystone ..."
119
120     if [ "x${PARAMS["tenant"]}" != "x" ]; then
121         # check if tenant exist, create it if not
122         TENANT_ID=$(keystone tenant-get ${PARAMS["tenant"]} | grep " id " | get_field 2)
123         if [ "x$TENANT_ID" == "x" ]; then
124             echo "Creating tenant ${PARAMS["tenant"]} in keystone ..."
125             TENANT_ID=$(keystone tenant-create --name=${PARAMS["tenant"]} | grep " id " | get_field 2)
126         fi
127         echo "Tenant list:"
128         keystone tenant-list
129     fi
130
131     if [ "x${PARAMS["role"]}" != "x" ]; then
132         # check if role exist, create it if not
133         ROLE_ID=$(keystone role-get ${PARAMS["role"]} | grep " id " | get_field 2)
134         if [ "x$ROLE_ID" == "x" ]; then
135             echo "Creating role ${PARAMS["role"]} in keystone ..."
136             ROLE_ID=$(keystone role-create --name=${PARAMS["role"]} | grep " id " | get_field 2)
137         fi
138         echo "Role list:"
139         keystone role-list
140     fi
141
142     if [ "x${PARAMS["name"]}" != "x" ]; then
143         # check if user exist, create it if not
144         USER_ID=$(keystone user-get ${PARAMS["name"]} | grep " id " | get_field 2)
145         if [ "x$USER_ID" == "x" ]; then
146             echo "Creating user ${PARAMS["name"]} in keystone ..."
147             USER_ID=$(keystone user-create --name=${PARAMS["name"]} --pass=${PARAMS["pass"]} --tenant-id $TENANT_ID --email=${PARAMS["email"]} | grep " id " | get_field 2)
148         fi
149         echo "User list:"
150         keystone user-list
151     fi
152
153     if [ "x$USER_ID" != "x" ] && [ "x$TENANT_ID" != "x" ] && [ "x$ROLE_ID" != "x" ]; then
154         # add the user to the tenant as role
155         keystone user-role-list --user-id $USER_ID --tenant-id $TENANT_ID | grep $ROLE_ID &> /dev/null
156         if [ $? -eq 1 ]; then
157             echo "Adding user ${PARAMS["name"]} in tenant ${PARAMS["tenant"]} as ${PARAMS["role"]} ..."
158             keystone user-role-add --tenant-id $TENANT_ID --user-id $USER_ID --role-id $ROLE_ID
159         fi
160     fi
161
162     if [ "x$USER_ID" != "x" ] && [ "x$TENANT_ID" != "x" ]; then
163         echo "User ${PARAMS["name"]} in Tenant ${PARAMS["tenant"]} role list:"
164         keystone user-role-list --user-id $USER_ID --tenant-id $TENANT_ID
165     fi
166 }
167
168 # Create service and its endpoint
169 service-create () {
170     # validation checking
171     if [[ "$@" =~ ^--name=.*\ --type=.*\ --description=.*\ --region=.*\ --publicurl=.*\ --adminurl=.*\ --internalurl=.*$ ]]; then
172         params=`echo "$@" | sed -e 's%--name=\(.*\) --type=\(.*\) --description=\(.*\) --region=\(.*\) --publicurl=\(.*\) --adminurl=\(.*\) --internalurl=\(.*\)%--name=\1|--type=\2|--description=\3|--region=\4|--publicurl=\5|--adminurl=\6|--internalurl=\7%g'`
173     else
174         help
175         exit 1
176     fi
177
178     # parse the cmdline parameters
179     IFS=$"|"
180     parse_param $params
181     unset IFS
182
183     echo "Creating service in keystone ..."
184
185     if [ "x${PARAMS["name"]}" != "x" ]; then
186         # check if service already created, create it if not
187         SERVICE_ID=$(keystone service-get ${PARAMS["name"]} | grep " id " | get_field 2)
188         if [ "x$SERVICE_ID" == "x" ]; then
189             echo "Adding service ${PARAMS["name"]} in keystone ..."
190             SERVICE_ID=$(keystone service-create --name ${PARAMS["name"]} --type ${PARAMS["type"]} --description "${PARAMS["description"]}" | grep " id " | get_field 2)
191         fi
192         echo "Service list:"
193         keystone service-list
194     fi
195
196     if [ "x$SERVICE_ID" != "x" ]; then
197         # create its endpoint
198         keystone endpoint-list | grep $SERVICE_ID | grep ${PARAMS["region"]} | grep ${PARAMS["publicurl"]} | grep ${PARAMS["adminurl"]} | grep ${PARAMS["internalurl"]}
199         if [ $? -eq 1 ]; then
200             echo "Creating endpoint for ${PARAMS["name"]} in keystone ..."
201             keystone endpoint-create --region ${PARAMS["region"]} --service-id $SERVICE_ID --publicurl ${PARAMS["publicurl"]} --adminurl ${PARAMS["adminurl"]} --internalurl ${PARAMS["internalurl"]}
202         fi
203         echo "Endpoints list:"
204         keystone endpoint-list
205     fi
206 }
207
208 case "$1" in
209     service-create)
210         shift
211         service-create $@
212         ;;
213     user-create)
214         shift
215         user-create $@
216         ;;
217     help)
218         help $@
219         ;;
220     *)
221         help
222         exit 0
223         ;;
224 esac
225
226 exit 0