TABLEAU REST API: Учебники по TABLEAU-API-LIB

Как удалить пользователей Tableau Server, владеющих контентом

Полное удаление владельцев контента с помощью Python и REST API

Об этом также говорится на нашем канале YouTube (Devyx): Проверьте это.

Расставания - это тяжело. Пользователи Tableau приходят и уходят, и, к счастью, у нас под рукой есть несколько инструментов, которые могут помочь нам сделать полный перерыв, чтобы избежать неприятных нюансов работы с потерянным контентом.

В этой статье исследуется один из способов сделать удаление пользователей Tableau Server безболезненным процессом. Независимо от того, добавляет ли ваша группа и удаляет пользователей вручную или использует некоторую автоматизацию, темы, затронутые в этом руководстве, могут помочь упростить процесс, убедившись, что удаляемые пользователи больше не владеют каким-либо контентом на сервере, предотвращая попадание пользователей в `` нелицензионный '' 'кладбище и убедитесь, что никакой контент на вашем сервере не принадлежит нелицензированному пользователю.

В этом руководстве рассматривается использование пакета Python tableau-api-lib и он является частью серии о том, как использовать Tableau Server как бочонок, что дает вам контроль над REST API Tableau Server.

В этих руководствах предполагается, что у вас уже установлен Python 3. Если у вас еще нет Python 3, это поможет вам начать: Руководство по установке Python.

Подготовка сцены

Когда вы удаляете пользователя Tableau, который не владеет каким-либо контентом, это проще простого. Никаких ошибок не появляется, и все, что вы видите, - это приятное подтверждающее сообщение об успешном удалении пользователя.

Однако, если вы попытаетесь удалить пользователя Tableau, которому принадлежит контент, вы получите сообщение об ошибке, информирующее вас о том, что этого пользователя нельзя удалить, поскольку он указан как владелец контента на сервере.

Когда мы пытаемся удалить пользователя, которому принадлежит контент, этот пользователь вместо этого становится чем-то вроде зомби Tableau, который изгнан на «нелицензионную» роль пользователя, но по-прежнему владеет своим контентом. Tableau не позволяет какому-либо контенту стать сиротой, поэтому дух владельца остается на Tableau Server до тех пор, пока его незаконченная деятельность (право собственности на контент) не будет решена, и пользователь не сможет быть полностью удален.

Создание решения

Так что мы можем с этим поделать? В этом руководстве мы демонстрируем использование REST API для выполнения следующих действий:

  1. Определите, владеет ли удаляемый пользователь каким-либо контентом
  2. Если пользователь владеет контентом, назначьте другого пользователя новым владельцем.
  3. Удалить пользователя

Также выделим, какими объектами может владеть пользователь в Tableau Server:

  1. Рабочие тетради
  2. Источники данных
  3. Потоки
  4. Проекты

В настоящее время REST API Tableau Server не поддерживает смену владельцев проектов. Если ваш пользователь владеет проектом, вам нужно будет вручную изменить владельца проекта перед удалением пользователя (извините, пожалуйста, не убивайте мессенджер).

Если вы похожи на меня и хотите иметь возможность использовать REST API для смены владельцев проекта, пожалуйста, выйдите и проголосуйте за идею на форумах Tableau.

Шаг 1: убедитесь, что у вас установлен tableau-api-lib

Даже если вы являетесь профессионалом в этих уроках, сделайте себе одолжение и загрузите последнюю версию библиотеки.

pip install --upgrade tableau-api-lib

Новичок в этом материале Python? Не переживай, быстро поймешь. Следуйте этому руководству по началу работы. В этом руководстве вы узнаете, как подключиться к серверу Tableau с помощью tableau-api-lib.

Шаг 2: подключитесь к своей среде Tableau Server

Используйте приведенный ниже код в качестве шаблона для подключения к вашему серверу. В следующих шагах мы будем использовать этот шаблонный код с помощью разовых строк кода. В конце статьи вы найдете объединенный блок кода, который вы можете скопировать / вставить для вашего удобства.

from tableau_api_lib import TableauServerConnection
from tableau_api_lib.utils.querying import querying
tableau_server_config = {
        'my_env': {
                'server': 'https://YourTableauServer.com',
                'api_version': '<YOUR_API_VERSION>',
                'username': '<YOUR_USERNAME>',
                'password': '<YOUR_PASSWORD>',
                'site_name': '<YOUR_SITE_NAME>',
                'site_url': '<YOUR_SITE_CONTENT_URL>'
        }
}
conn = TableauServerConnection(tableau_server_config, env='my_env')
conn.sign_in()

Интересный факт: вы также можете использовать токены личного доступа, если вы используете Tableau Server 2019.4 или новее. Если вы все о токенах доступа, ознакомьтесь с моей статьей о том, как их использовать.

Шаг 3: создайте список всех владельцев контента на сервере

Первая часть этой головоломки - это составить список всех владельцев контента на сервере. Получив это, мы можем выполнить простую проверку, чтобы увидеть, отображается ли пользователь, которого мы планируем удалить, как владелец какого-либо контента на сервере.

Чтобы составить этот исчерпывающий список владельцев контента, нам необходимо:

  1. получить всех владельцев проекта
  2. получить всех владельцев книг
  3. получить всех владельцев источников данных
  4. получить всех владельцев потока
  5. объединить соответствующую информацию из каждого из пунктов выше

Полный код представлен в виде содержания GitHub в конце этой статьи, поэтому я не буду подробно описывать здесь каждый шаг, но давайте выделим, как здесь может пригодиться tableau-api-lib.

Давайте возьмем книги в качестве примера. Вот шаблон, который мы можем использовать для извлечения информации из всех наших книг, который также позволяет нам извлекать информацию о владельцах книг.

workbooks_df = querying.get_workbooks_dataframe(conn)

В результате workbooks_df будет выглядеть так:

Теперь, увеличивая масштаб столбца «владелец», мы видим крупицу информации, которую мы хотим извлечь. Этот слепок является значением id для пользователя, которому принадлежит контент. Давайте извлечем это вложенное значение dict / JSON с помощью служебной функции tableau-api-lib flatten_dict_column.

workbooks_df = flatten_dict_column(workbooks_df, keys=['id'], col_name='owner')

Если вы посмотрите на полный код в конце статьи, вы заметите, что мы также добавляем столбец content_type в каждый создаваемый DataFrame.

workbooks_df['content_type'] = 'workbook'

Это просто так, чтобы, когда мы перебираем весь контент, принадлежащий пользователю, мы могли определить подходящую конечную точку REST API для использования. Существуют разные конечные точки для обновления книг, источников данных и потоков, и нам нужно вызвать правильный метод tableau-api-lib в зависимости от обновляемого типа контента.

Если мы будем следовать этому шаблону для наших книг, источников данных, потоков и проектов, то мы сможем легко объединить полученные данные (см. Пример этого в коде в конце статьи).

Шаг 4. Назначьте пользователя, который будет перенимать потерянный контент

Поскольку мы меняем владельца контента, чтобы удалить пользователя, нам нужно назначить другого пользователя Tableau, чтобы он стал владельцем контента. Есть несколько действенных подходов к этому процессу.

Вы можете случайным образом выбрать любого из пользователей-администраторов вашего сервера и назначить контент одному из них, вы можете выбрать пользователя по имени или вы можете выбрать значения идентификатора пользователя и выбрать тот, который вам нравится.

В этом примере в моей тестовой среде было всего… два пользователя. Поэтому я просто позвал другого пользователя по имени, например:

new_owner_id = list(users_df[users_df['name'] == 'estam']['id']).pop()

Пользователь с именем «estam» станет новым владельцем любого контента, который ранее принадлежал удаляемому пользователю.

Говоря об удалении пользователя, я также определяю это в своем рабочем процессе:

user_id_to_remove = list(users_df[users_df['name'] == 'estam2']['id']).pop()

Опять же, есть много правильных способов определить эти значения. Все, что имеет значение, это то, что у вас есть идентификатор пользователя для нового владельца и идентификатор пользователя для удаляемого пользователя.

Шаг 5: определите функцию, которая изменяет право собственности на контент

Реализация, которую я использовал, перебирает весь контент, принадлежащий удаляемому пользователю. Для каждой части содержимого, принадлежащей этому пользователю, вызывается функция с именем change_content_owner.

Подробные сведения о том, как определяется эта функция, можно найти в полном коде в конце этой статьи.

Таким образом, функция содержит несколько операторов if, которые выполняют различные вызовы обновления REST API в зависимости от типа обрабатываемого содержимого. Если для книги требуется смена владельца, то вызывается конечная точка REST API Обновить книгу. Если потоку требуется владение, то вызывается конечная точка REST API Поток обновления. И так далее, и так далее.

Теперь, учитывая, что проекты (пока) не могут быть обновлены с помощью вызовов REST API, это немного неудобно для нас. Пока эта возможность не будет добавлена ​​в область возможностей REST API, нам нужно будет вручную изменить это право собственности. Если вы действительно занимаетесь автоматизацией, вы можете изменить функцию, которую я здесь определил, чтобы запускать сообщение или электронное письмо в Slack, если удаляется пользователь, владеющий проектом. Это сообщение может предупредить вашу группу администраторов сервера о том, что этому пользователю потребуется некоторая ручная работа для успешного удаления с сервера.

Шаг 6: доказательство того, что процесс работает

Вот пример вывода моего запущенного процесса. В этой демонстрации удаляемый пользователь владел книгой и источником данных.

Шаг 7: обобщение ограничений

Прежде чем мы закончим здесь, давайте вспомним ограничения процесса и их причины.

  1. Вы не можете удалить пользователей, владеющих контентом
  2. Вы должны изменить право собственности на весь контент, принадлежащий пользователю, прежде чем вы сможете успешно удалить пользователя.
  3. Вы не можете изменить владельца проекта с помощью вызовов REST API (надеюсь, эта функция будет добавлена ​​в ближайшее время; голосуйте за это!)
  4. Попытка удалить пользователей, владеющих контентом, приведет к изменению роли пользователя на «нелицензионный», но он по-прежнему будет владеть контентом.
  5. Когда вы меняете владельца книги или источника данных, все внедренные учетные данные становятся недействительными.

Хотите узнать больше? Ознакомьтесь с документацией Tableau по изменению прав собственности на контент.

Подведение итогов

Это все, что касается этого руководства по удалению пользователей Tableau, владеющих контентом. Все сводится к тому, чтобы не оставлять никаких незавершенных дел с точки зрения владения контентом.

Если вашим пользователям не принадлежит какой-либо контент, это просто кусок пирога!

Если ваши пользователи владеют контентом, смените владельца на свои книги, источники данных и потоки. Если ваши пользователи владеют проектами, вам нужно будет вручную изменить владельца, прежде чем вы сможете успешно удалить пользователя с сервера.

Спасибо за настройку! Обратитесь, если вашей команде нужна помощь с автоматизацией Tableau Server REST API.

Консолидированный код

Используйте эту суть GitHub в качестве шаблона для интеграции концепций из этого руководства в ваш собственный рабочий процесс.