# #bash #google-cloud-platform #gcloud
Вопрос:
Ищу сценарий для получения всех ролей для всех проектов в Организации, а затем сравниваю их со списком ролей в compare.txt файл, и если роли совпадают, то получите роль и идентификатор проекта для того, где она совпадает.
роли в compare.txt файлы перечислены следующим образом.
roles/abc
roles/xyz
roles/123
roles/example.admin
roles/billing.xyz
опять же, в этой задаче есть 2 части.
- получите роли для всех проектов в организации (может быть, что-то вроде »
for project in $(gcloud project list) do gcloud projects get-iam-policy $project | grep role done > list.txt
Блок-цитата 2) сравните все роли с шага 1 с ролями в compare.txt и всякий раз, когда они совпадают, получите идентификатор проекта и роль, в которой они совпадают.
Комментарии:
1. Можете ли вы показать, что вы уже пробовали?
Ответ №1:
Подумайте о том, чтобы перевернуть проблему.
Определите список ролей, представляющих интерес:
WANTS=("roles/editor" "roles/datastore.user")
Затем извлеките (уже уникальный) набор ролей из привязок проекта:
ROLES=$(
gcloud projects get-iam-policy ${PROJECT}
--flatten="bindings"
--format="value(bindings.role)")
Затем перечислите все проекты и проверьте каждую желаемую роль:
WANTS=("roles/editor" "roles/datastore.user")
PROJECTS=$(
gcloud projects list
--format="value(projectId)")
for PROJECT in ${PROJECTS}
do
ROLES=$(
gcloud projects get-iam-policy ${PROJECT}
--flatten="bindings"
--format="value(bindings.role)")
for ROLE in ${ROLES}
do
if [[ "${WANTS[@]}" =~ "${ROLE}" ]]
then
echo "Project: ${PROJECT} contains ${ROLE}"
fi
done
done