988 lines
28 KiB
Markdown
988 lines
28 KiB
Markdown
|
|
|
||
|
|
<head>
|
||
|
|
<meta charset="utf-8"/>
|
||
|
|
<meta name="author" content="Anton Martynov">
|
||
|
|
<meta name="author" content="Mike Miroliubov">
|
||
|
|
<meta name="author" content="Alexey Lukashin">
|
||
|
|
<title>Devops client</title>
|
||
|
|
</head>
|
||
|
|
|
||
|
|
<style>
|
||
|
|
h1 {
|
||
|
|
text-align: center;
|
||
|
|
}
|
||
|
|
h2 {
|
||
|
|
border-bottom: 1px solid black;
|
||
|
|
}
|
||
|
|
h3 {
|
||
|
|
border-bottom: 1px solid #c6c6c6;
|
||
|
|
}
|
||
|
|
table {
|
||
|
|
border-collapse:collapse;
|
||
|
|
}
|
||
|
|
table, th, td {
|
||
|
|
border: 1px solid #cccccc;
|
||
|
|
}
|
||
|
|
th, td {
|
||
|
|
padding: 2px 10px;
|
||
|
|
}
|
||
|
|
</style>
|
||
|
|
|
||
|
|
Devops client
|
||
|
|
=============
|
||
|
|
|
||
|
|
Devops client is a ruby gem.
|
||
|
|
|
||
|
|
## Table of contents
|
||
|
|
|
||
|
|
* [Installation](#install)
|
||
|
|
* [First run](#first_run)
|
||
|
|
* [Client commands](#commands)
|
||
|
|
* [Templates](#templates)
|
||
|
|
* [Deploy](#deploy)
|
||
|
|
* [Filters](#filters)
|
||
|
|
* [Flavor](#flavor)
|
||
|
|
* [Group](#group)
|
||
|
|
* [Image](#image)
|
||
|
|
* [Key](#key)
|
||
|
|
* [Network](#network)
|
||
|
|
* [Project](#project)
|
||
|
|
* [Provider](#provider)
|
||
|
|
* [Script](#script)
|
||
|
|
* [Server](#server)
|
||
|
|
* [Tag](#tag)
|
||
|
|
* [User](#user)
|
||
|
|
* [HOWTO](#howto)
|
||
|
|
* [Create user](#howto_user)
|
||
|
|
* [Create image](#howto_image)
|
||
|
|
* [Create project](#howto_project)
|
||
|
|
* [Launch new server](#howto_server)
|
||
|
|
|
||
|
|
<h2 id="install">Installation</h2>
|
||
|
|
|
||
|
|
Devops client requirements:
|
||
|
|
|
||
|
|
* ruby v1.9.3 or higher
|
||
|
|
|
||
|
|
Client can be installed by following command
|
||
|
|
|
||
|
|
$ sudo gem install devops-client.gem --no-ri --no-rdoc
|
||
|
|
|
||
|
|
After gem installation new command will be available in your system
|
||
|
|
|
||
|
|
$ devops
|
||
|
|
|
||
|
|
If command wasn't found then necessary to check ruby environment
|
||
|
|
|
||
|
|
$ gem environment
|
||
|
|
|
||
|
|
And add "EXECUTABLE DIRECTORY" into $PATH
|
||
|
|
|
||
|
|
Devops shows help if invoked without parameters:
|
||
|
|
|
||
|
|
$ devops
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Bootsrap templates:
|
||
|
|
templates list
|
||
|
|
|
||
|
|
Deploy:
|
||
|
|
deploy NODE_NAME [NODE_NAME ...]
|
||
|
|
|
||
|
|
Filters:
|
||
|
|
filter image add ec2|openstack IMAGE [IMAGE ...]
|
||
|
|
filter image delete ec2|openstack IMAGE [IMAGE ...]
|
||
|
|
filter image list ec2|openstack
|
||
|
|
|
||
|
|
Flavor:
|
||
|
|
flavor list PROVIDER
|
||
|
|
|
||
|
|
Group:
|
||
|
|
group list PROVIDER
|
||
|
|
|
||
|
|
Image:
|
||
|
|
image create
|
||
|
|
image delete IMAGE
|
||
|
|
image list [provider] [ec2|openstack]
|
||
|
|
image show IMAGE
|
||
|
|
image update IMAGE FILE
|
||
|
|
|
||
|
|
Key:
|
||
|
|
key add KEY_NAME FILE
|
||
|
|
key delete KEY_NAME
|
||
|
|
key list
|
||
|
|
|
||
|
|
Network:
|
||
|
|
network list PROVIDER
|
||
|
|
|
||
|
|
Project:
|
||
|
|
project create PROJECT_ID
|
||
|
|
project delete PROJECT_ID [DEPLOY_ENV]
|
||
|
|
project deploy PROJECT_ID [DEPLOY_ENV]
|
||
|
|
project list
|
||
|
|
project multi create PROJECT_ID
|
||
|
|
project servers PROJECT_ID [DEPLOY_ENV]
|
||
|
|
project set run_list PROJECT_ID DEPLOY_ENV [(recipe[mycookbook::myrecipe])|(role[myrole]) ...]
|
||
|
|
project show PROJECT_ID
|
||
|
|
project update PROJECT_ID FILE
|
||
|
|
project user add PROJECT_ID USER_NAME [USER_NAME ...]
|
||
|
|
project user delete PROJECT_ID USER_NAME [USER_NAME ...]
|
||
|
|
|
||
|
|
Provider:
|
||
|
|
provider list
|
||
|
|
|
||
|
|
Script:
|
||
|
|
script list
|
||
|
|
script add SCRIPT_NAME FILE
|
||
|
|
script delete SCRIPT_NAME
|
||
|
|
script run SCRIPT_NAME NODE_NAME [NODE_NAME ... ]
|
||
|
|
script command NODE_NAME 'sh command'
|
||
|
|
|
||
|
|
Server:
|
||
|
|
server add PROJECT_ID DEPLOY_ENV IP SSH_USER KEY_ID
|
||
|
|
server bootstrap INSTANCE_ID
|
||
|
|
server create PROJECT_ID DEPLOY_ENV
|
||
|
|
server delete NODE_NAME [NODE_NAME ...]
|
||
|
|
server list [chef|ec2|openstack]
|
||
|
|
server pause NODE_NAME
|
||
|
|
server show NODE_NAME
|
||
|
|
server unpause NODE_NAME
|
||
|
|
|
||
|
|
Tag:
|
||
|
|
tag create NODE_NAME TAG_NAME [TAG_NAME ...]
|
||
|
|
tag delete NODE_NAME TAG_NAME [TAG_NAME ...]
|
||
|
|
tag list NODE_NAME
|
||
|
|
|
||
|
|
User:
|
||
|
|
user create USER_NAME
|
||
|
|
user delete USER_NAME
|
||
|
|
user grant USER_NAME [COMMAND] [PRIVILEGES]
|
||
|
|
user list
|
||
|
|
user password USER_NAME
|
||
|
|
|
||
|
|
Detailed help for each command can be shown by passing --help to command line.
|
||
|
|
|
||
|
|
<h2 id="first_run">First run</h2>
|
||
|
|
|
||
|
|
During first, run devops will detect that its configuration file is absent and will show warning and ask for required parameters:
|
||
|
|
First step is to enter server's host and port:
|
||
|
|
|
||
|
|
WARN: File '~/.devops/devops-client.conf' does not exist
|
||
|
|
Language: ru
|
||
|
|
Devops service host: <host>:7070
|
||
|
|
Default API version (v2.0):
|
||
|
|
Username: my_user
|
||
|
|
Password: my_password
|
||
|
|
Configuration file '~/.devops/devops-client.conf' is created
|
||
|
|
|
||
|
|
Also necessary to enter API version (current is v2.0) and credentials.
|
||
|
|
After these questions configuration file will be created.
|
||
|
|
|
||
|
|
<h2 id="commands">Commands</h2>
|
||
|
|
|
||
|
|
After running some commands, devops client might show information in JSON format and ask for confirmation. User can approve or decline operation.
|
||
|
|
|
||
|
|
Any command has additional options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Desciption</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>-h, --help</td>
|
||
|
|
<td>Show help</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>-c, --config FILE</td>
|
||
|
|
<td>Specify devops client config file (/home/my_user/.devops/devops-client.conf)</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>-v, --version</td>
|
||
|
|
<td>devops client version</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--host HOST</td>
|
||
|
|
<td>devops service host address (devops-server-host:devops-server-port)</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--api VER</td>
|
||
|
|
<td>devops service API version (v2.0)</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--user USERNAME</td>
|
||
|
|
<td>use USERNAME for authentication</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--format FORMAT</td>
|
||
|
|
<td>Output format: 'table', 'json' (table)</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--completion</td>
|
||
|
|
<td>Initialize bash completion script</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
<h3 id="templates">Templates</h3>
|
||
|
|
|
||
|
|
$ devops templates
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Bootsrap templates:
|
||
|
|
templates list
|
||
|
|
|
||
|
|
**devops templates list** - command will list available templates for bootstrapping virtual machines by Chef
|
||
|
|
|
||
|
|
<h3 id="deploy">Deploy</h3>
|
||
|
|
|
||
|
|
Command performs deployment operation by running Chef client on remote server
|
||
|
|
|
||
|
|
$ devops deploy
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Deploy:
|
||
|
|
deploy NODE_NAME [NODE_NAME ...]
|
||
|
|
|
||
|
|
**devops deploy** - deploys everything on server
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--tag TAG1,TAG2...</td>
|
||
|
|
<td>Chef tag names, comma separated list of a tags which will be temporary applied to servers.</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
<h3 id="filters">Filters</h3>
|
||
|
|
|
||
|
|
Filters allows to specify cloud VM images and restrict devops to use only them. It is helpful in case of EC2 which has hungreds of images.
|
||
|
|
|
||
|
|
$ devops filter
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Filters:
|
||
|
|
filter image add ec2|openstack IMAGE [IMAGE ...]
|
||
|
|
filter image delete ec2|openstack IMAGE [IMAGE ...]
|
||
|
|
filter image list ec2|openstack
|
||
|
|
|
||
|
|
**devops filter image add** - adds image id to filters
|
||
|
|
**devops filter image delete** - removes image id (ids) from filters
|
||
|
|
**devops filter image list** - shows list of available images
|
||
|
|
|
||
|
|
<h3 id="flavor">Flavor</h3>
|
||
|
|
|
||
|
|
$ devops flavor
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Flavor:
|
||
|
|
flavor list PROVIDER
|
||
|
|
|
||
|
|
**devops flavor list** - lists available virtual machine configurations
|
||
|
|
|
||
|
|
<h3 id="group">Group</h3>
|
||
|
|
|
||
|
|
$ devops group
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Group:
|
||
|
|
group list PROVIDER
|
||
|
|
|
||
|
|
**devops group list** - displays list of security groups
|
||
|
|
|
||
|
|
<h3 id="image">Image</h3>
|
||
|
|
|
||
|
|
Command allows managing virtual machine images.
|
||
|
|
|
||
|
|
$ devops image
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Image:
|
||
|
|
image create
|
||
|
|
image delete IMAGE
|
||
|
|
image list [provider] [ec2|openstack]
|
||
|
|
image show IMAGE
|
||
|
|
image update IMAGE FILE
|
||
|
|
|
||
|
|
**devops image create** - creates image. Client will ask several questions:
|
||
|
|
|
||
|
|
Provider: # select cloud provider (e.g., openstack, ec2)
|
||
|
|
Choose image: # enter image number from a list
|
||
|
|
The ssh username: # give ssh username for logging in
|
||
|
|
Bootstrap template (optional): # select bootstrap template
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--provider PROVIDER</td>
|
||
|
|
<td>Image provider</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--image IMAGE_ID</td>
|
||
|
|
<td>Image identifier</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--ssh_user USER</td>
|
||
|
|
<td>SSH user name</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--bootstrap_template TEMPLATE</td>
|
||
|
|
<td>Bootstrap template</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--no_bootstrap_template</td>
|
||
|
|
<td>Do not specify bootstrap template</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops delete** - delete image by ID
|
||
|
|
|
||
|
|
**devops image list** - list available images
|
||
|
|
|
||
|
|
**devops image list provider ec2|openstack** - list available cloud images (filtered by devops)
|
||
|
|
|
||
|
|
**devops image list ec2|openstack** - list available images
|
||
|
|
|
||
|
|
**devops image show** - show image information
|
||
|
|
|
||
|
|
**devops image update** - update image from provided JSON file
|
||
|
|
|
||
|
|
<h3 id="key">Key</h3>
|
||
|
|
|
||
|
|
Manage keys (SSH certificates) servers.
|
||
|
|
|
||
|
|
Key:
|
||
|
|
key add KEY_NAME FILE
|
||
|
|
key delete KEY_NAME
|
||
|
|
key list
|
||
|
|
|
||
|
|
**devops key add** - adds new key with given name KEY_NAME from file FILE
|
||
|
|
|
||
|
|
**devops key delete** - remove key with name KEY_NAME
|
||
|
|
|
||
|
|
**devops key list** - lists available keys
|
||
|
|
|
||
|
|
There is at least one system key which cannot be deleted by user. System keys are registered during devops server configuration and not manageable by user)
|
||
|
|
|
||
|
|
<h3 id="network">Network</h3>
|
||
|
|
|
||
|
|
$ devops network
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Network:
|
||
|
|
network list PROVIDER
|
||
|
|
|
||
|
|
**devops network list PROVIDER** - list available cloud networks for given PROVIDER
|
||
|
|
|
||
|
|
<h3 id="project">Project</h3>
|
||
|
|
|
||
|
|
Command allows to manage projects
|
||
|
|
|
||
|
|
$ devops project
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Project:
|
||
|
|
project create PROJECT_ID
|
||
|
|
project delete PROJECT_ID [DEPLOY_ENV]
|
||
|
|
project deploy PROJECT_ID [DEPLOY_ENV]
|
||
|
|
project list
|
||
|
|
project servers PROJECT_ID [DEPLOY_ENV]
|
||
|
|
project set run_list PROJECT_ID DEPLOY_ENV [(recipe[mycookbook::myrecipe])|(role[myrole]) ...]
|
||
|
|
project show PROJECT_ID
|
||
|
|
project update PROJECT_ID FILE
|
||
|
|
project user add PROJECT_ID USER_NAME [USER_NAME ...]
|
||
|
|
project user delete PROJECT_ID USER_NAME [USER_NAME ...]
|
||
|
|
|
||
|
|
**devops project create** - create a new project
|
||
|
|
|
||
|
|
Client will ask several questions:
|
||
|
|
Deploy environment identifier: # which environment will be created (dev, test, my_env...) At least one environment required for project.
|
||
|
|
Provider: # Cloud provider (openstack, amazon ec2)
|
||
|
|
Security groups (comma separated), like 1,2,3, or empty for 'default': # List of security groups which will be assigned to new VMs in given environment/
|
||
|
|
Users, you will be added automatically (comma separated), like 1,2,3, or empty: # list of users
|
||
|
|
Flavor: # server configuration
|
||
|
|
Image: # image for virtual machine
|
||
|
|
Subnets (comma separated), like 1,2,3, or empty: # cloud subnets (openstack or Amazon VPC requires at least one)
|
||
|
|
Run list (comma separated), like recipe[mycookbook::myrecipe], role[myrole]: role[test_dev], # roles and cookbooks which will be assigned to virtual machines
|
||
|
|
Enter expires time if necessary (5m, 3h, 2d, 1w, etc): # virtual machine life time (by default forever)
|
||
|
|
|
||
|
|
*If project already exists then new environment will be added to it*
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--groups GROUP_1,GROUP_2...</td>
|
||
|
|
<td>Security groups (comma separated list)</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--deploy_env DEPLOY_ID</td>
|
||
|
|
<td>Deploy enviroment identifier</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--subnets SUBNET,SUBNET...</td>
|
||
|
|
<td>Subnets identifier for deploy enviroment (ec2 - only one sybnet, openstack - comma separated list)</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--flavor FLAVOR</td>
|
||
|
|
<td>Specify flavor for the project</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--image IMAGE_ID</td>
|
||
|
|
<td>Specify image identifier for the project</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--run_list RUN_LIST</td>
|
||
|
|
<td>Run list (comma separated), like recipe[mycookbook::myrecipe], role[myrole]:</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--users USER,USER...</td>
|
||
|
|
<td>Users for deploy environment control</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--provider PROVIDER</td>
|
||
|
|
<td>Provider identifier 'ec2' or 'openstack'</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--no_expires</td>
|
||
|
|
<td>Without expires time</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--expires EXPIRES</td>
|
||
|
|
<td>Expires time (5m, 3h, 2d, 1w, etc)</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops project delete** - removes project or its environment
|
||
|
|
|
||
|
|
**devops project deploy** - deploys to all servers in a project or in given environment
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Desciption</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--servers SERVERS</td>
|
||
|
|
<td>Servers list (comma separated)</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops project list** - list all available projects
|
||
|
|
|
||
|
|
**devops project servers** - list all running servers in a project
|
||
|
|
|
||
|
|
**devops project set run_list** - update run-list for a project's environment
|
||
|
|
|
||
|
|
**devops project show** - display project info
|
||
|
|
|
||
|
|
**devops project update** - update project from JSON file
|
||
|
|
|
||
|
|
**devops project user delete** - add user to project
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--deploy_env ENV</td>
|
||
|
|
<td>Add user to deploy enviroment</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops project user delete** - remove user(s) from a project
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--deploy_env ENV</td>
|
||
|
|
<td>Add user to deploy enviroment</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
<h3 id="provider">Provider</h3>
|
||
|
|
|
||
|
|
$ devops provider
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Provider:
|
||
|
|
provider list
|
||
|
|
|
||
|
|
**devops provider list** - Lists available cloud providers registered on devops server
|
||
|
|
|
||
|
|
<h3 id="script">Script</h3>
|
||
|
|
|
||
|
|
Manages shell scrips for running on servers
|
||
|
|
|
||
|
|
$ devops script
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Script:
|
||
|
|
script list
|
||
|
|
script add SCRIPT_NAME FILE
|
||
|
|
script delete SCRIPT_NAME
|
||
|
|
script run SCRIPT_NAME NODE_NAME [NODE_NAME ...]
|
||
|
|
script command NODE_NAME 'sh command'
|
||
|
|
|
||
|
|
**devops script list** - lists available scripts
|
||
|
|
|
||
|
|
**devops script add** - adds new script with name SCRIPT_NAME from file FILE
|
||
|
|
|
||
|
|
**devops script delete** - removes script SCRIPT_NAME
|
||
|
|
|
||
|
|
**devops script run** - runs script with name SCRIPT_NAME on server with node name (on Chef server) NODE_NAME
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--params PARAMS</td>
|
||
|
|
<td>Comma separated scipt parameters</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops script command** - run shell command on remote server (bash interpreter is used)
|
||
|
|
|
||
|
|
<h3 id="server">Server</h3>
|
||
|
|
|
||
|
|
$ devops server
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Server:
|
||
|
|
server add PROJECT_ID DEPLOY_ENV IP SSH_USER KEY_ID
|
||
|
|
server bootstrap INSTANCE_ID
|
||
|
|
server create PROJECT_ID DEPLOY_ENV
|
||
|
|
server delete NODE_NAME [NODE_NAME ...]
|
||
|
|
server list [chef|ec2|openstack]
|
||
|
|
server pause NODE_NAME
|
||
|
|
server show NODE_NAME
|
||
|
|
server unpause NODE_NAME
|
||
|
|
|
||
|
|
**devops server add** - adds new server (bare metal, existing,...) to a project with name PROJECT_ID
|
||
|
|
|
||
|
|
**devops server bootstrap** - bootstraps chef on server and runs Chef client with project run list
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>-N, --name NAME</td>
|
||
|
|
<td>Set chef name</td>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--bootstrap_template [TEMPLATE]</td>
|
||
|
|
<td>Bootstrap template (optional)</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops server create** - launches new server in a cloud with project PROJECT_ID and environment DEPLOY_ENV
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>-N, --name NAME</td>
|
||
|
|
<td>Set chef name</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops server delete** - terminates server
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--instance</td>
|
||
|
|
<td>Delete node by instance id</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops server list** - list servers
|
||
|
|
|
||
|
|
**devops server pause** - put server on pause (only if cloud provider supports it)
|
||
|
|
|
||
|
|
**devops server show** - show detailed information
|
||
|
|
|
||
|
|
**server unpause** - unpause server
|
||
|
|
|
||
|
|
<h3 id="tag">Tag</h3>
|
||
|
|
|
||
|
|
Manages tags on Chef servers. This functionality can be used for changing deploy behavior according to given tags.
|
||
|
|
|
||
|
|
$ devops tag
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
Tag:
|
||
|
|
tag create NODE_NAME TAG_NAME [TAG_NAME ...]
|
||
|
|
tag delete NODE_NAME TAG_NAME [TAG_NAME ...]
|
||
|
|
tag list NODE_NAME
|
||
|
|
|
||
|
|
**devops tag create** - create new tag on chef node with name NODE_NAME
|
||
|
|
|
||
|
|
**devops tag delete** - removes tag from chef node with name NODE_NAME
|
||
|
|
|
||
|
|
**devops tag list** - lists all tags on a chef node with name NODE_NAME
|
||
|
|
|
||
|
|
<h3 id="user">User</h3>
|
||
|
|
|
||
|
|
User management
|
||
|
|
|
||
|
|
$ devops user
|
||
|
|
|
||
|
|
Usage: /usr/bin/devops command [options]
|
||
|
|
|
||
|
|
Commands:
|
||
|
|
User:
|
||
|
|
user create USER_NAME
|
||
|
|
user delete USER_NAME
|
||
|
|
user grant USER_NAME [COMMAND] [PRIVILEGES]
|
||
|
|
user list
|
||
|
|
user password USER_NAME
|
||
|
|
|
||
|
|
**devops user create** - create user with name USER_NAME
|
||
|
|
|
||
|
|
Options:
|
||
|
|
|
||
|
|
<table>
|
||
|
|
<tr>
|
||
|
|
<th>Option</th>
|
||
|
|
<th>Description</th>
|
||
|
|
</tr>
|
||
|
|
<tr>
|
||
|
|
<td>--password PASSWORD</td>
|
||
|
|
<td>New user password</td>
|
||
|
|
</tr>
|
||
|
|
</table>
|
||
|
|
|
||
|
|
**devops user delete** - remove user with name USER_NAME
|
||
|
|
|
||
|
|
**devops user grant** - grants permissions for user
|
||
|
|
|
||
|
|
Available subcommands:
|
||
|
|
|
||
|
|
* all
|
||
|
|
* flavor
|
||
|
|
* group
|
||
|
|
* image
|
||
|
|
* project
|
||
|
|
* server
|
||
|
|
* key
|
||
|
|
* user
|
||
|
|
* filter
|
||
|
|
* network
|
||
|
|
* provider
|
||
|
|
* script
|
||
|
|
|
||
|
|
Available privileges:
|
||
|
|
|
||
|
|
* r
|
||
|
|
* w
|
||
|
|
* rw
|
||
|
|
|
||
|
|
If privileges are not specified then user is not allowed to run command.
|
||
|
|
|
||
|
|
If command and privileges are not specified then user's permissions are set to default values.
|
||
|
|
|
||
|
|
**devops user list** - list all users
|
||
|
|
|
||
|
|
**devops user password** - change user's password
|
||
|
|
|
||
|
|
<h1 id="howto">Mini HOWTO</h1>
|
||
|
|
|
||
|
|
Mostly used scenarios described below.
|
||
|
|
|
||
|
|
|
||
|
|
<h2 id="howto_user">User management</h2>
|
||
|
|
|
||
|
|
After clean install root user has empty password, lets set it:
|
||
|
|
|
||
|
|
$ devops user password root -u root
|
||
|
|
Enter password for 'root':
|
||
|
|
Updated
|
||
|
|
|
||
|
|
Let's create user test and grant some permissions for working with filters, images, projects and servers:
|
||
|
|
|
||
|
|
If system doesn't have users then let's use root user:
|
||
|
|
|
||
|
|
$ devops user create test -u root
|
||
|
|
Password for root:
|
||
|
|
Enter password for 'test':
|
||
|
|
Created
|
||
|
|
|
||
|
|
By default user has read permissions for filter, image, project, and server operations. Lets give him write permissions:
|
||
|
|
|
||
|
|
$ devops user grant test filter rw -u root
|
||
|
|
Password for root:
|
||
|
|
Updated
|
||
|
|
|
||
|
|
$ devops user grant test image rw -u root
|
||
|
|
Password for root:
|
||
|
|
Updated
|
||
|
|
|
||
|
|
$ devops user grant test project rw -u root
|
||
|
|
Password for root:
|
||
|
|
Updated
|
||
|
|
|
||
|
|
$ devops user grant test server rw -u root
|
||
|
|
Password for root:
|
||
|
|
Updated
|
||
|
|
|
||
|
|
$ devops user grant test user r -u root
|
||
|
|
Password for root:
|
||
|
|
Updated
|
||
|
|
|
||
|
|
|
||
|
|
<h2 id="howto_image">Image management</h2>
|
||
|
|
|
||
|
|
First step is to add required images to filter. For OpenStack it is OpenStack image id, for EC2 it is AMI.
|
||
|
|
|
||
|
|
devops filter image add openstack 78665e7b-5123-4fa8-b39b-d7643ecd8ed7
|
||
|
|
|
||
|
|
Next step is to create image and specify required metadata:
|
||
|
|
|
||
|
|
$ devops image create
|
||
|
|
+--------+-----------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Provider |
|
||
|
|
+--------+-----------+
|
||
|
|
| Number | Provider |
|
||
|
|
+--------+-----------+
|
||
|
|
| 1 | ec2 |
|
||
|
|
| 2 | openstack |
|
||
|
|
+--------+-----------+
|
||
|
|
Provider: 2
|
||
|
|
+--------+---------------------------+--------------------------------------+--------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Images |
|
||
|
|
+--------+---------------------------+--------------------------------------+--------+
|
||
|
|
| Number | Name | ID | Status |
|
||
|
|
+--------+---------------------------+--------------------------------------+--------+
|
||
|
|
| 1 | centos-6.4-amd64-20130707 | 78665e7b-5123-4fa8-b39b-d7643ecd8ed7 | ACTIVE |
|
||
|
|
+--------+---------------------------+--------------------------------------+--------+
|
||
|
|
Image: 1
|
||
|
|
The ssh username: root
|
||
|
|
Bootstrap template (optional):
|
||
|
|
{
|
||
|
|
"provider": "openstack",
|
||
|
|
"name": "centos-6.4-amd64-20130707",
|
||
|
|
"id": "78665e7b-5123-4fa8-b39b-d7643ecd8ed7",
|
||
|
|
"remote_user": "root"
|
||
|
|
}
|
||
|
|
Create image? (y/n):
|
||
|
|
|
||
|
|
<h2 id="howto_project">Project management</h2>
|
||
|
|
|
||
|
|
Let's create new project 'my_project' with environment 'test'
|
||
|
|
|
||
|
|
$ devops project create my_project
|
||
|
|
Deploy environment identifier: test
|
||
|
|
+--------+-----------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Provider |
|
||
|
|
+--------+-----------+
|
||
|
|
| Number | Provider |
|
||
|
|
+--------+-----------+
|
||
|
|
| 1 | ec2 |
|
||
|
|
| 2 | openstack |
|
||
|
|
+--------+-----------+
|
||
|
|
Provider: 2
|
||
|
|
|
||
|
|
System will show security groups. We are selecting what is needed:
|
||
|
|
|
||
|
|
+--------+-------------------------------------+----------+------+-------+-----------+-----------------------------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Groups |
|
||
|
|
+--------+-------------------------------------+----------+------+-------+-----------+-----------------------------+
|
||
|
|
| Number | Name | Protocol | From | To | CIDR | Description |
|
||
|
|
+--------+-------------------------------------+----------+------+-------+-----------+-----------------------------+
|
||
|
|
| 1 | default | udp | 1 | 65535 | 0.0.0.0/0 | default |
|
||
|
|
| | | tcp | 1 | 65535 | 0.0.0.0/0 | |
|
||
|
|
| | | icmp | -1 | -1 | 0.0.0.0/0 | |
|
||
|
|
+--------+-------------------------------------+----------+------+-------+-----------+-----------------------------+
|
||
|
|
| 2 | webports | tcp | 8080 | 8080 | 0.0.0.0/0 | web ports |
|
||
|
|
| | | tcp | 80 | 80 | 0.0.0.0/0 | |
|
||
|
|
| | | tcp | 8089 | 8089 | 0.0.0.0/0 | |
|
||
|
|
| | | tcp | 8443 | 8443 | 0.0.0.0/0 | |
|
||
|
|
| | | tcp | 443 | 443 | 0.0.0.0/0 | |
|
||
|
|
+--------+-------------------------------------+----------+------+-------+-----------+-----------------------------+
|
||
|
|
Security groups (comma separated), like 1,2,3, or empty for 'default':
|
||
|
|
|
||
|
|
Next step is to users which can work with a project:
|
||
|
|
|
||
|
|
+--------+------------------+-------+-----+---------+--------+------+--------+--------+--------+-------+---------+----------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Users |
|
||
|
|
+--------+------------------+-------+-----+---------+--------+------+--------+--------+--------+-------+---------+----------+
|
||
|
|
| | | Privileges |
|
||
|
|
+--------+------------------+-------+-----+---------+--------+------+--------+--------+--------+-------+---------+----------+
|
||
|
|
| Number | User ID | Image | Key | Project | Server | User | Script | Filter | Flavor | Group | Network | Provider |
|
||
|
|
+--------+------------------+-------+-----+---------+--------+------+--------+--------+--------+-------+---------+----------+
|
||
|
|
| 1 | test | rw | r | rw | rw | r | r | rw | r | r | r | r |
|
||
|
|
+--------+------------------+-------+-----+---------+--------+------+--------+--------+--------+-------+---------+----------+
|
||
|
|
| 2 | root | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
|
||
|
|
+--------+------------------+-------+-----+---------+--------+------+--------+--------+--------+-------+---------+----------+
|
||
|
|
Users, you will be added automatically (comma separated), like 1,2,3, or empty:
|
||
|
|
|
||
|
|
Flavor for environment:
|
||
|
|
|
||
|
|
+--------+-----------+--------------+------+-------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Flavors |
|
||
|
|
+--------+-----------+--------------+------+-------+
|
||
|
|
| Number | ID | Virtual CPUs | Disk | RAM |
|
||
|
|
+--------+-----------+--------------+------+-------+
|
||
|
|
| 1 | c1.large | 8 | 50 | 8192 |
|
||
|
|
| 2 | c1.medium | 2 | 50 | 2048 |
|
||
|
|
| 3 | c1.small | 2 | 20 | 1024 |
|
||
|
|
| 4 | c2.long | 2 | 120 | 4096 |
|
||
|
|
| 5 | m1.large | 4 | 80 | 8192 |
|
||
|
|
| 6 | m1.medium | 2 | 40 | 4096 |
|
||
|
|
| 7 | m1.small | 1 | 20 | 2048 |
|
||
|
|
| 8 | m1.tiny | 1 | 3 | 512 |
|
||
|
|
| 9 | m1.xlarge | 8 | 160 | 16384 |
|
||
|
|
| 10 | m2.long | 2 | 60 | 2048 |
|
||
|
|
| 11 | snapshot | 2 | 42 | 2048 |
|
||
|
|
+--------+-----------+--------------+------+-------+
|
||
|
|
Flavor: 7
|
||
|
|
|
||
|
|
Image for virtual machines:
|
||
|
|
|
||
|
|
+--------+--------------------------------------+---------------------------+--------------------+-------------+-----------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Images |
|
||
|
|
+--------+--------------------------------------+---------------------------+--------------------+-------------+-----------+
|
||
|
|
| Number | ID | Name | Bootstrap template | Remote user | Provider |
|
||
|
|
+--------+--------------------------------------+---------------------------+--------------------+-------------+-----------+
|
||
|
|
| 1 | 78665e7b-5123-4fa8-b39b-d7643ecd8ed7 | centos-6.4-amd64-20130707 | | root | openstack |
|
||
|
|
+--------+--------------------------------------+---------------------------+--------------------+-------------+-----------+
|
||
|
|
Image: 1
|
||
|
|
|
||
|
|
Network for a virtual machine:
|
||
|
|
|
||
|
|
+--------+--------------+-----------------+
|
||
|
|
| API version: v2.0 |
|
||
|
|
| Subnets |
|
||
|
|
+--------+--------------+-----------------+
|
||
|
|
| Number | Name | CIDR |
|
||
|
|
+--------+--------------+-----------------+
|
||
|
|
| 1 | 172.16.223.0 | 172.16.223.0/24 |
|
||
|
|
| 2 | 172.16.227.0 | 172.16.227.0/24 |
|
||
|
|
| 3 | LocalNetwork | 172.16.37.0/24 |
|
||
|
|
| 4 | LocalNetwork | 10.1.98.0/24 |
|
||
|
|
| 5 | private | 10.0.0.0/24 |
|
||
|
|
+--------+--------------+-----------------+
|
||
|
|
Subnets (comma separated), like 1,2,3, or empty: 5
|
||
|
|
|
||
|
|
Chef roles for project and environment. By default will be created new role with name PROJECT-ENV and added to runlist. Additional roles and recipes can be specified here.
|
||
|
|
|
||
|
|
Run list (comma separated), like recipe[mycookbook::myrecipe], role[myrole]: role[my_project_test],
|
||
|
|
|
||
|
|
Just press enter if server lifetime should be infinite.
|
||
|
|
|
||
|
|
Enter expires time if necessary (5m, 3h, 2d, 1w, etc):
|
||
|
|
|
||
|
|
Assume that we do not need second environment. Just press 'n' here.
|
||
|
|
|
||
|
|
Add deploy environment? (y/n): n
|
||
|
|
{
|
||
|
|
"deploy_envs": [
|
||
|
|
{
|
||
|
|
"identifier": "test",
|
||
|
|
"provider": "openstack",
|
||
|
|
"groups": [
|
||
|
|
"default"
|
||
|
|
],
|
||
|
|
"users": [
|
||
|
|
"test"
|
||
|
|
],
|
||
|
|
"flavor": "m1.small",
|
||
|
|
"image": "78665e7b-5123-4fa8-b39b-d7643ecd8ed7",
|
||
|
|
"subnets": [
|
||
|
|
"private"
|
||
|
|
],
|
||
|
|
"run_list": [
|
||
|
|
"role[my_project_test]"
|
||
|
|
],
|
||
|
|
"expires": null
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"name": "my_project"
|
||
|
|
}
|
||
|
|
Create project? (y/n):
|
||
|
|
|
||
|
|
|
||
|
|
Last question allows reviewing details and confirming for project creation.
|
||
|
|
|
||
|
|
<h2 id="howto_server">Starting new instance</h2>
|
||
|
|
|
||
|
|
After that we can create servers and apply chef roles:
|
||
|
|
|
||
|
|
devops server create my_project test -N my_server_1
|
||
|
|
|
||
|
|
'-N' parameter allows to specify chef node name. By default node name will be generated automatically.
|