knife 命令

概述

knife是一个命令行工具, 它提供了一个本地的chef库和Chef服务器. Knife可以帮助用户进行如下管理:

* 待部署机器节点Nodes
* Cookbook和Recipe
* Roles
* Json数据
* 环境数据
* chef-client的部署安装
* 查询chef-server上的索引数据

Knife位于chef workstation和chef server之间. 通过REST API同Chef Server进行交互, 这个API也可以被chef client使用. Knife使用RBAC(Role-based authentication controls)基于角色的鉴权控制来跟Chef Server通信. Knife在workstation初始化的时候会被配置好, 配置文件是knife.rb 一般位于用户目录下的~/.chef/knife.rb

knife有很多内置的命令, 这些命令一起可以提供很多功能来设置一个机构的所有资源, 如cookbook, nodes, roles, data bags, environments 以及users.

Knife插件可以拓展这些内置的命令.

Knife主要有如下命令:

* bootstrap 该命令是执行bootstrap操作, 在目标系统上安装chef-client. boostrap操作必须有FQDN的支持

* client 该命令是用来管理API的客户端列表和与他们关联的RSA公钥. 通过它可以允许任何实体, 包括chef-client和Knife来访问Chef-Server

* configure 该命令用来创建knife.rb和client.rb文件. 用来配置chef workstation和chef nodes

* cookbook 该命令用来跟位于Chef Server和本地chef-repo上的cookbook交互

* cookbook site 该命令是用来跟位于https://cookbooks.opscode.com上的cookbook交互. 不过如果要写入权限的话得申请公用账号

* data bag 该命令是用来管理全局变量的JSON数据

* delete 该命令是用来删除Chef Server上的对象

* diff 该命令是用来比较Chef Server和本地之间的chef-repo的文件和目录的不同

* download 该命令是用来从Chef Server上下载roles, cookbooks, environments, nodes, data bags到当前工作目录

* environment 该命令是用来管理Chef Server上的一个机构的环境

* exec 该命令是用来执行Ruby脚本, 其上下文环境是chef-client. 该命令是执行一些当前的knife子命令还没有覆盖到的操作

* index rebuild 该命令是用来执行在Chef Server上重建搜索索引. 这个操作会花费一些时间

* list 该命令是用来查看Chef Server上的对象列表

* node 该命令是用来管理Chef Server上的node列表

* recipe list 该命令是用来查看Chef Server上所有的recipes. 此处可以通过简单的正则表达式来查看recipe. 

* role 该命令用来管理Chef Server上的跟nodes关联的各种角色

* search 该命令用来执行在Chef Server上执行一个搜索查询语句

* show 该命令是用来查看Chef Server一个或多个对象的详细信息

* ssh 该命令是用来在一个组织的一个或多个节点上执行SSH命令(支持并发), 这些节点可以是基于查询拿到的结果值

* status 该命令是用来呈现Chef Server的概要信息, 主要包括最近的成功运行的chef-client信息

* tag 该命令是用来在Chef Server上应用tags到nodes

* upload 该命令是用来从当前工作路径的chef-repo上传roles, cookbooks, environments和data bags到Chef Server.

* user 该命令是用来管理用户列表和他们的RSA公钥对

Knife包含一系列的由动词组成的子命令: delete, deps, diff, download, edit, list, show, upload, xargs. 这些子命令允许Knife通过这些命令跟存储在chef-repo里或Chef Server内的任何对象进行交互. 这些子命令的重要的准则主要如下:

* 当命令用在chef-repo的对象上时, 命令首先是目标行为: 也就是上面的verb, 然后是对象所在的目录, 如(clients, cookbooks/,data_bags/, environments/, nodes, roles/, users/). 命令可以组成为: download cookbooks/

* 当命令作用在外部的Chef Server上时, 主要操作acls, groups, containers等

* 当把Chef Server看成是一个文件系统时, 可以将Chef Server上的chef-repo看成是workstation上的一个chef-repo备份. Chef Server会有跟本地一样的chef-repo. 在修改文件时, 只需要从Chef Server上下载下来, 修改后,再上传上去

* 运行命令的时候要注意上下文环境. 比如当在roles目录下shi, Knife会有上下文环境的嘻嘻你. 即输入knife show base.json和输入knife show roles/base.json显示的信息一样, 都是返回Chef Server上的基本角色.

* Chef Server支持并发的请求,不过得基于每个指令的配置

Knife命令的基础参数

以下这些参数可以在knife的任何一个子命令中或插件中有效:

-c CONFIG, —config CONFIG 设置配置文件

—color 指明输出的颜色

-d, —disable-editing 指明$EDITOR不会被使用, 呈现出最原始的数据

—defaults 指明Knife将使用默认值, 而不是用户提供的

-e EDITOR, —editor EDITOR 指明$EDITOR在所有交互命令中被使用

-E ENVIRONMENT, —environment ENVIRONMENT 环境名. 当这个参数被添加时, 命令将只会运行被指明的环境名

-f FILE_NAME, —file FILE_NAME 指明私有密钥会被存储的文件

-F FORMAT, —format FORMAT 指明输出文件格式: summary(默认), text, json, yaml 和 pp

-h, —help 显示help信息

-k KEY, —key KEY Knife将会使用的跟Chef Server通信的私有密钥

—no-color 指明输出不会有颜色区分

-p PASSWORD, —password PASSWORD 用户密码

—print-after 指明shuu会在解构后显示

-s URL, —server-url URL Cher Server的URL地址

-u USER, —user USER Knife用来登录Chef Server的用户名, 如果该参数被使用后,请确定带的key也是该用户的, 否则会失败

-v, —version Chef-Client的版本

-V, —verbose 设置更多的输出 -VV是最大输出

-y, —yes 指明会对所有的确认操作回答”yes”, Knife可以不用向用户确认

如何创建一个chef-repo

主要有如下几个方法:

* 从github上clone下来
* 下载源码包, 然后放到本地的源码管理上

注意 Opscode强烈建议在chef-repo目录上使用源码管理. Opscode使用git来管理所有东西, 包括cookbooks.

Clone

clone的位置:https://github.com/opscode/chef-repo

大致步骤:

1. 安装git
2. git clone https://github.com/opscode/chef-repo
3. 如果使用其他源码管理工具, 可以手动移除.git目录,然后用其他工具对其进行初始化

下载

大致步骤:

1. wget http://github.com/opscode/chef-repo/tarball/master
2. tar -zxvf master
3. mv opscode-chef-repo-* chef-repo

TODO 待阅读资料

创建chef-repo http://docs.opscode.com/essentials_repository_create.html

Knife的基础命令 http://docs.opscode.com/knife_common_options.html

使用Knife http://docs.opscode.com/knife_using.html 正在阅读 未完成

Knife的子命令介绍 http://docs.opscode.com/knife.html 重点弄明白如何下载一个cookbook, 如何自制一个cookbook, 如何向node节点传送一个cookbook