You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.4 KiB

  1. #!/bin/bash
  2. # This script is used to test the migration of IAM content from old minio
  3. # instance to new minio instance.
  4. #
  5. # To run it locally, start the LDAP server in github.com/minio/minio-iam-testing
  6. # repo (e.g. make podman-run), and then run this script.
  7. #
  8. # This script assumes that LDAP server is at:
  9. #
  10. # `localhost:389`
  11. #
  12. # if this is not the case, set the environment variable
  13. # `_MINIO_LDAP_TEST_SERVER`.
  14. OLD_VERSION=RELEASE.2024-03-26T22-10-45Z
  15. OLD_BINARY_LINK=https://dl.min.io/server/minio/release/linux-amd64/archive/minio.${OLD_VERSION}
  16. __init__() {
  17. if which curl &>/dev/null; then
  18. echo "curl is already installed"
  19. else
  20. echo "Installing curl:"
  21. sudo apt install curl -y
  22. fi
  23. export GOPATH=/tmp/gopath
  24. export PATH="${PATH}":"${GOPATH}"/bin
  25. if which mc &>/dev/null; then
  26. echo "mc is already installed"
  27. else
  28. echo "Installing mc:"
  29. go install github.com/minio/mc@latest
  30. fi
  31. if [ ! -x ./minio.${OLD_VERSION} ]; then
  32. echo "Downloading minio.${OLD_VERSION} binary"
  33. curl -o minio.${OLD_VERSION} ${OLD_BINARY_LINK}
  34. chmod +x minio.${OLD_VERSION}
  35. fi
  36. if [ -z "$_MINIO_LDAP_TEST_SERVER" ]; then
  37. export _MINIO_LDAP_TEST_SERVER=localhost:389
  38. echo "Using default LDAP endpoint: $_MINIO_LDAP_TEST_SERVER"
  39. fi
  40. rm -rf /tmp/data
  41. }
  42. create_iam_content_in_old_minio() {
  43. echo "Creating IAM content in old minio instance."
  44. MINIO_CI_CD=1 ./minio.${OLD_VERSION} server /tmp/data/{1...4} &
  45. sleep 5
  46. set -x
  47. mc alias set old-minio http://localhost:9000 minioadmin minioadmin
  48. mc ready old-minio
  49. mc idp ldap add old-minio \
  50. server_addr=localhost:389 \
  51. server_insecure=on \
  52. lookup_bind_dn=cn=admin,dc=min,dc=io \
  53. lookup_bind_password=admin \
  54. user_dn_search_base_dn=dc=min,dc=io \
  55. user_dn_search_filter="(uid=%s)" \
  56. group_search_base_dn=ou=swengg,dc=min,dc=io \
  57. group_search_filter="(&(objectclass=groupOfNames)(member=%d))"
  58. mc admin service restart old-minio
  59. mc idp ldap policy attach old-minio readwrite --user=UID=dillon,ou=people,ou=swengg,dc=min,dc=io
  60. mc idp ldap policy attach old-minio readwrite --group=CN=project.c,ou=groups,ou=swengg,dc=min,dc=io
  61. mc idp ldap policy entities old-minio
  62. mc admin cluster iam export old-minio
  63. set +x
  64. mc admin service stop old-minio
  65. }
  66. import_iam_content_in_new_minio() {
  67. echo "Importing IAM content in new minio instance."
  68. # Assume current minio binary exists.
  69. MINIO_CI_CD=1 ./minio server /tmp/data/{1...4} &
  70. sleep 5
  71. set -x
  72. mc alias set new-minio http://localhost:9000 minioadmin minioadmin
  73. echo "BEFORE IMPORT mappings:"
  74. mc ready new-minio
  75. mc idp ldap policy entities new-minio
  76. mc admin cluster iam import new-minio ./old-minio-iam-info.zip
  77. echo "AFTER IMPORT mappings:"
  78. mc idp ldap policy entities new-minio
  79. set +x
  80. # mc admin service stop new-minio
  81. }
  82. verify_iam_content_in_new_minio() {
  83. output=$(mc idp ldap policy entities new-minio --json)
  84. groups=$(echo "$output" | jq -r '.result.policyMappings[] | select(.policy == "readwrite") | .groups[]')
  85. if [ "$groups" != "cn=project.c,ou=groups,ou=swengg,dc=min,dc=io" ]; then
  86. echo "Failed to verify groups: $groups"
  87. exit 1
  88. fi
  89. users=$(echo "$output" | jq -r '.result.policyMappings[] | select(.policy == "readwrite") | .users[]')
  90. if [ "$users" != "uid=dillon,ou=people,ou=swengg,dc=min,dc=io" ]; then
  91. echo "Failed to verify users: $users"
  92. exit 1
  93. fi
  94. mc admin service stop new-minio
  95. }
  96. main() {
  97. create_iam_content_in_old_minio
  98. import_iam_content_in_new_minio
  99. verify_iam_content_in_new_minio
  100. }
  101. (__init__ "$@" && main "$@")