chapi/chapi-client

chronos控制台客户端 - 像git仓库一样管理您的任务

维护者

详细信息

github.com/trivago/chapi

源代码

问题

安装: 19

依赖: 0

建议: 0

安全: 0

星标: 14

关注者: 8

分支: 10

开放问题: 12

类型:项目

v0.9.0 2017-03-28 12:42 UTC

README

Chronos和Marathon控制台客户端。

描述

像git仓库一样在控制台中管理您的ChronosMarathon任务

  • 在发送到远程之前准备您的任务
  • 为任务备份和历史记录管理单独的git仓库
  • 快速检查任务的状态

可以独立使用或同时使用这两个系统。

要求

  • php >= 5.6

安装/配置

要安装chapi,您可以下载最新的版本或克隆此仓库。如果您克隆了仓库,则需要运行composer install来安装所有必要的依赖项

composer install

在您第一次使用chapi之前,您必须设置Chronos API URL和本地任务仓库的路径。您可以使用configure命令设置全局设置

bin/chapi configure 

配置文件位置

Chapi尝试读取全局和本地配置文件,至少必须存在一个。如果两个文件都存在,则本地配置文件中的值将覆盖全局配置文件中定义的值。

全局配置文件的位置是

  • ~/.chapi/.chapiconfig 如果未设置$CHAPI_HOME

  • ${CHAPI_HOME}/.chapiconfig,如果设置了$CHAPI_HOME

在当前工作目录中搜索本地配置文件。

  • ${PWD}/.chapiconfig,

配置文件

您可以使用全局--profile[=PROFILE]选项在不同配置文件之间切换。

如果没有设置配置文件,chapi将使用default作为活动配置文件。

配置文件内容

两个配置文件都使用yaml格式。

配置位于profiles属性中。在那里,您将找到每个配置文件的parameters

如果没有使用明确的配置文件,则使用default

profiles:
    default:
        parameters:
            chronos_url: http://your.chronos.url:chronos_api_port/
            chronos_http_username: username
            chronos_http_password: password
            repository_dir: /path/to/your/local/task/repository
        
            marathon_url: http://your.marathon.url:marathon_api_port/
            marathon_http_username: username
            marathon_http_password: password
            repository_dir_marathon: /path/to/your/local/marathon/apps/repository
        
            cache_dir: /path/to/chapi/cache/dir
            
        ignore:
          - *-dev
          - !my-active-job-dev
    develop:
       parameters:
           chronos_url: http://your.chronos.url:chronos_api_port/
           chronos_http_username: ''
           chronos_http_password: ''
           repository_dir: /path/to/your/local/task/repository
      
           marathon_url: ''
           marathon_http_username: ''
           marathon_http_password: ''
           repository_dir_marathon: ''
      
           cache_dir: /path/to/chapi/cache/dir_dev

chronos_url

Chronos API URL(包括端口)。另见configure命令选项-u

chronos_http_username

Chronos HTTP用户名。另见configure命令选项-un

如果您的Chronos实例中启用了设置--http_credentials,则此设置是必需的。

chronos_http_password

Chronos HTTP密码。另见configure命令选项-un

如果您的Chronos实例中启用了设置--http_credentials,则此设置是必需的。

repository_dir

作业文件的根本路径。另见configure命令选项-r

marathon_url

Marathon API URL(包括端口)。另见configure命令选项-mu

marathon_http_username

Marathon HTTP用户名。另见configure命令选项-mun

marathon_http_password

Marathon HTTP密码。另见configure命令选项-mp

repository_dir_marathon

任务文件夹的根路径。另请参阅 配置命令 选项 -mr

cache_dir

缓存目录的路径。另请参阅 配置命令 选项 -d

更新说明

v0.9.0

由于v0.9.0引入了对Marathon的新支持,您需要更新您的配置。`parameters.yml` 结构已更改并重命名为 ` chapiconfig`。

您需要重新创建您的配置设置

bin/chapi configure

禁用服务

要禁用Chronos支持并仅使用Marathon,请将所有Chronos参数设置为 ''

profiles:
    default:
        parameters:
            # [....]
            chronos_url: ''
            chronos_http_username: ''
            chronos_http_password: ''
            repository_dir: ''

忽略作业

您可以在 .chapiconfig 文件中指定每个配置文件的模式,并将文件添加到您的作业存储库中,以跟踪您希望chapi忽略的作业。

  • 匹配模式根据libc中 glob() 函数使用的规则,类似于常见shell使用的规则。
  • 可选的前缀 "!" 否定模式;之前模式排除的任何匹配作业将再次包含在内。

示例内容

profiles:
    default:
        ignore:
          - *-dev
          - !my-active-job-dev
    dev:
        ignore:
          - "*"
          - "!*-dev"

用法

list

显示您的任务并根据失败进行筛选

bin/chapi list [options] 
Options:
  -f, --onlyFailed      Display only failed jobs
  -d, --onlyDisabled    Display only disabled jobs
  --profile[=PROFILE]  Use a specific profile from your config file.

info

显示远程系统中的任务信息

bin/chapi info <jobName> 
Arguments:
  jobName               selected job
  
Options:
  --profile[=PROFILE]  Use a specific profile from your config file.

在Marathon的情况下,任务名称将是任务的完整ID。

status

显示工作树状态

bin/chapi status
Options:
  --profile[=PROFILE]  Use a specific profile from your config file.

diff

显示任务和工作树之间的更改等

bin/chapi diff [<jobName>]
Arguments:
  jobName               Show changes for specific job
  
Options:
  --profile[=PROFILE]  Use a specific profile from your config file.

add

将任务内容添加到索引

bin/chapi add [<jobnames>]...
Arguments:
  jobnames              Jobs to add to the index
  
Options:
  --profile[=PROFILE]  Use a specific profile from your config file.

reset

从索引中删除任务

bin/chapi reset [<jobnames>]...
Arguments:
  jobnames              Jobs to add to the index
  
Options:
  --profile[=PROFILE]  Use a specific profile from your config file.

pull

从远程系统拉取任务并将其添加到本地存储库

bin/chapi pull [options] [--] [<jobnames>]...
Arguments:
  jobnames              Jobnames to pull

Options:
  -f, --force           Force to overwrite local jobs 
  --profile[=PROFILE]  Use a specific profile from your config file.

commit

将更改提交给Chronos或Marathon

bin/chapi commit
Options:
  --profile[=PROFILE]  Use a specific profile from your config file.

scheduling

显示指定时间范围内的即将到来的作业

bin/chapi scheduling [options]
Options:
  -s, --starttime[=STARTTIME]  Start time to display the jobs
  -e, --endtime[=ENDTIME]      End time to display the jobs
  --profile[=PROFILE]  Use a specific profile from your config file.

注意:不适用于Marathon

configure

配置应用程序并添加必要的配置

bin/chapi configure
Options:
  -u, --chronos_url[=CHRONOS_URL]        The chronos url (inclusive port)
  -un, --chronos_http_username[=CHRONOS_HTTP_USERNAME]  The chronos username (HTTP credentials) [default: ""]
  -p, --chronos_http_password[=CHRONOS_HTTP_PASSWORD]   The chronos password (HTTP credentials) [default: ""]
  -d, --cache_dir[=CACHE_DIR]            Path to cache directory
  -r, --repository_dir[=REPOSITORY_DIR]  Root path to your job files
  --profile[=PROFILE]  Use a specific profile from your config file.

validate

验证本地作业

bin/chapi validate [<jobmames>]...
Arguments:
  jobmames              Jobs to validate
  
Options:
  --profile[=PROFILE]  Use a specific profile from your config file.

示例工作流程

添加新的作业到Chronos

将新的cron作业添加到您的Chronos服务器(通过chapi)的典型工作流程可以是

  1. 一个包含新的cron作业(json定义)的拉取请求进入git存储库(由您的同事创建)
  2. 接受拉取请求,并通过 cd ~/my/clone 切换到您的本地克隆
  3. 通过 git pull 更新您的本地存储库
  4. 通过 chapi status 检查当前状态
  5. 通过 chapi validate . 验证一切
  6. 通过 chapi add jobXy 添加新的作业
  7. 应用更改并通过 chapi commit 更新Chronos服务器

依次将作业从Chronos集群A移动到集群B

如果需要将任务从Chronos集群移动到另一个集群,Chapi可以为您提供支持。

  1. 设置正常的chapi配置和本地作业存储库

  2. 创建一个新的空文件夹,代表您的第二个Chronos集群存储库

mkdir clusterBjobs
  1. 在新的文件夹中添加一个本地的 .chapiconfig 文件(见 配置
touch clusterBjobs/.chapiconfig
  1. 编辑文件并添加第二个Chronos集群的 chronos_urlrepository_dir 参数
parameters:
    chronos_url: http://your.second.chronos.url:chronos_api_port/
    repository_dir: /path/to/clusterBjobs
  1. 打开第二个控制台,切换到包含 .chapiconfig 文件的新的文件夹
cd clusterBjobs
  1. 现在您可以从正常的存储库逐个移动作业到新的存储库
mv clusterAjobs/jobXy.json clusterBjobs/jobXy.json
  1. 控制台1中的Chapi将删除“旧”集群中的作业,而控制台2中的Chapi将添加已移动的作业到新的集群。

支持的两个系统的命令

Marathon中的特殊情况

  • 从马拉松中拉取任务将丢弃带有默认值的json对象。目前这样做是因为调用马拉松获取应用程序信息时也会发送默认值。未来可能会实现检查这一逻辑的功能。
  • 在创建配置中无法从马拉松中拉取组应用程序。这是因为一旦应用程序进入马拉松,特定的组配置就会丢失。
  • 马拉松应用程序ID应该以/开头。这是一个好习惯。需要强制执行此操作的原因是因为具有myapp的本地配置在马拉松中会被视为/myapp,而在chapi中则被视为两个不同的应用程序。

如果您发现任何其他问题或边缘情况,请创建一个问题。

支持的Chronos版本

  • v2.5

支持的Marathon版本

  • v1.6.322

Docker

您还可以在Docker容器中运行chapi。您可以在dockerhub下找到最新版本。

为Docker准备配置文件

创建一个包含以下内容的.chapiconfig_docker文件

profiles:
    default:
        parameters:
            cache_dir: /root/.chapi/cache
            chronos_url: 'http://your.chronos.url:4400/'
            chronos_http_username: YOUR_CHRONOS_USER
            chronos_http_password: YOUR_CHRONOS_PASS
            repository_dir: /chronos-jobs
            marathon_url: 'http://your.marathon.url:8080/'
            marathon_http_username: YOUR_MARATHON_USER
            marathon_http_password: YOUR_MARATHON_PASS
            repository_dir_marathon: /marathon-jobs

运行docker

docker pull msiebeneicher/chapi-client:latest

docker run -it \
    -v ~/.chapiconfig_docker:/root/.chapi/.chapiconfig \
    -v /your/local/checkout/chronos-jobs:/chronos-jobs \
    -v /your/local/checkout/marathon-jobs:/marathon-jobs \
    msiebeneicher/chapi-client:latest <COMMAND>

开发时运行docker

docker pull msiebeneicher/chapi-client:latest

docker run -it \
    -v ~/.chapiconfig_docker:/root/.chapi/.chapiconfig_docker \
    -v /your/local/checkout/chronos-jobs:/chronos-jobs \
    -v /your/local/checkout/marathon-jobs:/marathon-jobs \
    -v /your/local/checkout/chapi:/chapi \
    --entrypoint /bin/bash \
    msiebeneicher/chapi-client:latest

待办事项

Marathon

  • 马拉松的验证命令尚未实现。
  • 列表命令将marathon实体的状态设置为ok。这可能会显示应用程序的最后状态。