跳转到主要内容

Looker部署工具

项目描述

Looker Deployer

badge

简介

Looker Deployer(又称'ldeploy')是一个命令行工具,用于帮助在不同实例之间移动Looker对象。这包括内容(外观、仪表板、整个空间等)、板和连接。

状态和支持

截至2023年,Looker Deployer由Google支持,但不提供保修。可以通过https://github.com/llooker/looker_deployer/issues报告问题和功能请求,这些问题和请求将定期监控并排序。

要求

为了让这些命令正确工作,您的环境需要满足一些假设/要求

  • Python Looker Deployer 需要 Python 3.6-3.9
  • Gazer 内容部署命令使用 gzr来自动化内容部署,因此您需要安装并正确配置它。Gazer 需要 Ruby 的最新版本。

身份验证和配置

Looker Deployer 使用 Looker SDK 与您的 Looker 实例进行通信。需要一个 looker.ini 文件来进行身份验证。默认情况下,该工具会在您的当前工作目录中查找此文件,但如果文件名不同或在不同的位置,您可以使用 --ini 参数指定其位置。以下是一个示例 ini 文件

[dev]
base_url=https://looker-dev.company.com:19999
client_id=abc
client_secret=xyz
verify_ssl=True

[prod]
base_url=https://looker-prod.company.com:19999
client_id=abc
client_secret=xyz
verify_ssl=True

安装

Looker Deployer 在 PyPi 上!您可以使用 pip install looker-deployer 来安装它。

Dockerfile

需要 looker.ini 文件进行 API 身份验证。您可以在运行容器时将 ini 文件卷映射,或者(推荐)从该文件构建一个将相关 ini 文件“烧录”到容器中的镜像。

为此,创建一个包含 looker.ini 文件和以下内容的 Dockerfile 目录

FROM python:3.9-slim

RUN apt update
RUN apt -y install ruby ruby-dev
RUN gem install gazer

RUN apt -y install git 
RUN git clone https://github.com/looker-open-source/looker_deployer.git

WORKDIR /looker_deployer

COPY looker.ini . 
RUN pip install .

ENTRYPOINT ["ldeploy"]

然后只需

docker build -t ldeploy .

您可以使用: docker run ldeploy <command> <parameters> ...

请注意,为了获取输出,您需要将本地目录映射到 Docker 中的目录,因此实际使用可能如下所示

docker run \
  -v /local/path/to/ldeploy/settings:/ldeploy_settings \
  -v /local/path/to/ldeploy/output:/ldeploy_output \
  ldeploy content export \
    --ini /ldeploy_settins/looker.ini \
    --local-target /ldeploy_output \
    <additional parameters>

您可以将您的 looker.ini 文件放在 /local/path/to/ldeploy/settings,命令生成的输出将位于 /local/path/to/ldeploy/output

本地安装

如果您打算在本地机器上使用 looker-deployer 而不是使用 Docker 镜像,则建议设置 Python 虚拟环境。这将防止其他模块与 looker-deployer 安装发生冲突。

pyenv 提供了 Python 版本和虚拟环境的简单管理。

安装 pyenv 后,安装所需的 Python 版本,并创建名为 ldeploy 的虚拟环境

pyenv install 3.8.3
pyenv virtualenv 3.8.3 ldeploy

激活虚拟环境并安装 looker-deployer

pyenv activate ldeploy
pip install looker-deployer

looker-deployer 现在已准备好使用!完成操作后,请取消激活虚拟环境

source deactivate

用法

使用 ldeploy 命令调用该工具,后跟相关子命令。可用的子命令包括: boardscodeconnectionscontent

每个子命令都可以配置其相关参数,可以使用 -h--help 参数进行查看。例如

ldeploy content -h

内容部署

此命令使用 gazer 从您的开发 Looker 实例将内容拉到本地机器上的目录结构,或将内容从该目录结构部署到指定的 Looker 实例。该命令可以为特定的一组 Look 或仪表板或整个文件夹工作,并在目标实例中正确创建找不到的任何文件夹。

内容命令进一步分为两个子命令: exportimport

内容导出

所有内容部署任务都从使用 export 命令将开发环境内容文件夹树表示导出到本地磁盘开始。然后,此目录树在后续的导入命令中使用,以将仪表板、Look 或整个树导入到另一个实例。

该命令接受以下参数

usage: ldeploy content export [-h] --env ENV [--ini INI] [--debug] --folders
                              FOLDERS [FOLDERS ...] --local-target
                              LOCAL_TARGET

optional arguments:
  -h, --help            show this help message and exit
  --env ENV             What environment to deploy from
  --ini INI             ini file to parse for credentials
  --debug               set logger to debug for more verbosity
  --folders FOLDERS [FOLDERS ...]
                        What folders to export content from
  --local-target LOCAL_TARGET
                        Local directory to store content

内容导入

从您的开发环境导出内容后,您可以使用 import 命令将其引入生产环境。

usage: ldeploy content import [-h] --env ENV [--ini INI] [--debug]
                              [--recursive] [--target-folder TARGET_FOLDER]
                              (--folders FOLDERS [FOLDERS ...] | --dashboards DASHBOARDS [DASHBOARDS ...] | --looks LOOKS [LOOKS ...])

optional arguments:
  -h, --help            show this help message and exit
  --env ENV             What environment to deploy to
  --ini INI             ini file to parse for credentials
  --debug               set logger to debug for more verbosity
  --recursive           Should folders deploy recursively
  --target-folder TARGET_FOLDER
                        override the default target folder with a custom path
  --folders FOLDERS [FOLDERS ...]
                        Folders to fully deploy
  --dashboards DASHBOARDS [DASHBOARDS ...]
                        Dashboards to deploy
  --looks LOOKS [LOOKS ...]
                        Looks to deploy

导入基本文件夹 已添加对导入到除共享之外的基本文件夹的支持。与此相关有一些重要注意事项

  • 在运行导入之前,必须存在用户、嵌入用户和嵌入组文件夹,ldeploy 无法创建它们。
  • 用户、嵌入用户和嵌入组文件夹必须具有唯一名称。
  • 如果没有使用“--target-folder”指定其他文件夹,则“共享”是默认的基本文件夹。

示例

  • ldeploy content export --env dev --folders 1 --local-target ./foo/bar/ <- 将共享文件夹(ID 1)及其所有子文件夹导出到目录位置 ./foo/bar/
  • ldeploy content export --env dev --folders 5 8 --local-target ./foo/bar/ <- 将文件夹5和8(及其所有子文件夹)导出到目录位置 ./foo/bar/
  • ldeploy content import --env prod --folders ./foo/bar/Shared/Public <- 将Shared/Public中的所有内容部署到生产实例
  • ldeploy content import --env prod --folders ./foo/bar/Shared/Public --recursive --target-folder Shared/FromDev/Public <- 将Shared/Public中的所有内容及其所有子文件夹部署到生产实例的Shared/FromDev/Public文件夹中。
  • ldeploy content import --env prod --dashboards ./foo/bar/Shared/Public/Dashboard_1.json ./foo/bar/Shared/Restricted/Dashboard_2.json <- 将Dashboard1Dashboard2部署到生产实例中各自的文件夹
  • ldeploy content import --env prod --folders ./dev/Users --recursive --target-folder Users <- 将dev/Users中的所有内容及其所有子文件夹部署到生产实例的Users文件夹
  • ldeploy content import --env prod --folders "./dev/Embed Users" --recursive --target-folder "Embed Users" <- 将dev/Embed Users中的所有内容及其所有子文件夹部署到生产实例的Embed Users文件夹
  • ldeploy content import --env prod --folders "./dev/Embed Groups" --recursive --target-folder "Embed Groups" <- 将dev/Embed Groups中的所有内容及其所有子文件夹部署到生产实例的Embed Groups文件夹

看板部署

此命令允许跨实例部署看板/主页。它尝试解决实例之间仪表板/外观ID的差异,并在构建新看板之前确认内容的存在。看板通过标题进行匹配 - 更新现有看板将导致相关部分和项目的重建,以防止通过标题尝试匹配时出现的问题。如果需要更新看板标题,请使用title-change参数,以便命令能够找到旧标题。该命令接受以下参数

usage: ldeploy boards [-h] --source SOURCE --target TARGET [TARGET ...]
                      --board BOARD [--ini INI] [--allow-partial]
                      [--title-change TITLE_CHANGE] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the board from
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --board BOARD         which board to deploy
  --ini INI             ini file to parse for credentials
  --allow-partial       allow partial deployment of board content if not all
                        content is present on target instance?
  --title-change TITLE_CHANGE
                        if updating title, the old title to replace in target
                        environments
  --debug               set logger to debug for more verbosity

示例

  • ldeploy boards --source dev --target prod --board 'My Cool Board' <- 将“我的酷看板”从开发部署到生产
  • ldeploy boards --source dev --target prod_1 prod_2 --allow-partial --board 'My Updated Title Board' --title-change 'My Cool Board' <- 这将部署标题已从“我的酷看板”更改为“我的更新标题看板”的看板,从开发部署到两个实例:prod_1和prod_2。任何在任一生产实例中不存在的内容都将被跳过,而不会引发任何错误。

连接部署

此命令允许跨实例迁移数据库连接。出于安全考虑,Looker的API不传输密码凭据,因此此命令允许从.ini文件中注入这些凭据。

该命令接受以下参数

usage: ldeploy connections [-h] --source SOURCE [--ini INI] --target TARGET
                           [TARGET ...] [--pattern PATTERN]
                           [--include-password] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the board from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter which connections are deployed
  --include-password    should passwords be set from the ini file?
  --debug               set logger to debug for more verbosity

示例

  • ldeploy connections --source dev --target prod <- 这将部署开发实例中的所有连接到生产实例。不会包含任何凭据,需要从Looker UI手动添加。
  • ldeploy connections --source dev --target prod --pattern ^bigquery --include-password <- 这将部署所有以bigquery开头的连接从开发部署到生产,并尝试注入.ini文件中包含的密码。

代码部署

此命令将管理从当前Github master分支到相关生产实例的hub/spoke LookML代码的部署。这是通过向每个实例的部署端点发送GET请求并使用webhook密钥进行身份验证来完成的。

相关架构概述(点击放大)

diagram

为了使用代码部署工具,需要一个 code_config.yaml 文件。该文件需要包含实例列表 - 每个客户端生产实例一个。该列表必须包括名称(用于在命令中引用该实例)、端点和该实例的分支项目名称。此外,配置文件需要包含对公共中心项目的条目,并且可以可选地包含要排除在中心部署之外的实例名称列表。以下是一个示例配置:

instances:
  - name: calvin
    endpoint: https://looker-dev.company.com
    spoke_project: powered_by_spoke_ck
  - name: levis
    endpoint: https://looker-dev.company.com
    spoke_project: powered_by_spoke_lv

hub_project: powered_by_hub

该命令接受以下参数

usage: ldeploy code [-h] [--hub] [--spoke SPOKE [SPOKE ...]]
                    [--hub-exclude HUB_EXCLUDE [HUB_EXCLUDE ...]] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --hub                 flag to deploy hub project
  --spoke SPOKE [SPOKE ...]
                        which spoke(s) to deploy
  --hub-exclude HUB_EXCLUDE [HUB_EXCLUDE ...]
                        which projects should be ignored from hub deployment
  --debug               set logger to debug for more verbosity

示例

  • ldeploy code --hub <- 这将部署中心项目到所有生产实例
  • ldeploy code --spoke foo <- 这将部署名为 "foo" 的分支项目到相关实例
  • ldeploy code --hub --spoke foo bar --hub-exclude bar --debug <- 这将部署中心项目到除 bar 以外的所有实例,然后部署分支项目 foobar 到各自的实例

管理员角色设置

由于 Looker 中角色设置的相关性,建议按以下顺序运行这些命令以确保先前的信息可用:

  1. 模型集
  2. 权限集
  3. 角色
  4. 组中的组
  5. 角色到组
  6. 用户属性

特殊注意事项

如果您有外部管理的组,您需要确保在组中的组之前完成 SAML/LDAP 的更新。上述代码引用不会迁移这些特殊组。

模型集部署

此命令允许在实例之间迁移模型集。

创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。

该命令接受以下参数

usage: ldeploy model_sets [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the model sets from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter
  --delete              allows for deletion from target based on name
  --debug               set logger to debug for more verbosity

示例

  • ldeploy model_sets --source dev --target prod <- 这将部署开发实例中的所有模型集到生产实例。
  • ldeploy model_sets --source dev --target prod --pattern ^test <- 这将部署以 test 开头的所有模型集。

权限集部署

此命令允许在实例之间迁移权限集。

创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。

该命令接受以下参数

usage: ldeploy permission_sets [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the permission sets from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter
  --delete              allows for deletion from target based on name
  --debug               set logger to debug for more verbosity

示例

  • ldeploy permission_sets --source dev --target prod <- 这将部署开发实例中的所有权限集到生产实例。
  • ldeploy permission_sets --source dev --target prod --pattern ^test <- 这将部署以 test 开头的所有权限集。

角色部署

此命令允许在实例之间迁移角色。

创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。

该命令接受以下参数

usage: ldeploy roles [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the roles from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter
  --delete              allows for deletion from target based on name
  --debug               set logger to debug for more verbosity

示例

  • ldeploy roles --source dev --target prod <- 这将部署开发实例中的所有角色到生产实例。
  • ldeploy roles --source dev --target prod --pattern ^test <- 这将部署以 test 开头的所有角色。

组部署

此命令允许在实例之间迁移非外部管理的组。

创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。

该命令接受以下参数

usage: ldeploy groups [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the groups from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter
  --delete              allows for deletion from target based on name
  --debug               set logger to debug for more verbosity

示例

  • ldeploy groups --source dev --target prod <- 这将部署开发实例中的所有组到生产实例。
  • ldeploy groups --source dev --target prod --pattern ^test <- 这将部署以 test 开头的所有组。

组中的组(即组层次结构)部署

此命令允许在实例之间迁移属于其他组的组。

创建或删除的匹配将基于设置的名称,因为 ID 是自动递增的。

该命令接受以下参数

usage: ldeploy group_in_group [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the group hierarchy from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter
  --debug               set logger to debug for more verbosity

示例

  • ldeploy group_in_group --source dev --target prod <- 这将部署开发实例中的所有组中的组到生产实例。
  • ldeploy group_in_group --source dev --target prod --pattern ^test <- 这将部署以 test 开头的所有组中的组。

角色到组部署

此命令允许在实例之间迁移与组关联的角色。

创建或更新的匹配将基于设置的名称,因为 ID 是自动递增的。

该命令接受以下参数

usage: ldeploy role_to_group [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the role to group from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter
  --debug               set logger to debug for more verbosity

示例

  • ldeploy role_to_group --source dev --target prod <- 这将把开发实例中的所有角色部署到生产实例的组中。
  • ldeploy role_to_group --source dev --target prod --pattern ^test <- 这将部署所有以 test 开头的角色的组。

用户属性部署

此命令允许在不同实例之间迁移非系统管理的用户属性(例如 id、first_name、last_name、email)。

匹配创建/更新/删除将基于设置的名称,因为 ID 是自动递增的。这包括通过组名创建的用户属性的分配。

该命令接受以下参数

usage: ldeploy user_attributes [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --source SOURCE       which environment to source the user attributes from
  --ini INI             ini file to parse for credentials
  --target TARGET [TARGET ...]
                        which target environment(s) to deploy to
  --pattern PATTERN     regex pattern to filter
  --delete              allows for deletion from target based on name
  --debug               set logger to debug for more verbosity

示例

  • ldeploy user_attributes --source dev --target prod <- 这将把开发实例中的所有用户属性部署到生产实例。
  • ldeploy user_attributes --source dev --target prod --pattern ^test <- 这将部署所有以 test 开头的用户属性。

开发

本项目使用 pipenv 管理依赖项。请遵循安装说明。建议使用 pyenv 来管理安装 Python 版本。

安装 pipenv 后,克隆此仓库,进入它,并调用 pipenv install --ignore-pipfile

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

looker_deployer-0.3.11.tar.gz (31.3 kB 查看散列)

上传时间

构建分发

looker_deployer-0.3.11-py3-none-any.whl (38.4 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面