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
Для каждой команды можно посмотреть более подробную справку с помощью параметра --help
<h2id="first_run">Первый запуск</h2>
При первом запуске (либо запуске, когда программа не сможет найти конфигурационный файл ~/.devops/devops-client.conf) необходимо будет ввести данные для настройки клиента.
На первый вопрос следует указать адрес и порт devops-сервиса:
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
В результате будет создан конфигурационный файл.
<h2id="commands">Команды</h2>
В конце выполнения некоторых команд будет выводиться информация о проделанной работе в формате JSON. И выдаваться вопрос с подтверждением. Если все параметры верны, необходимо подтвердить результат команды, нажав на клавишу "y", либо отменить операцию, нажав на клавишу "n". Данная особенность в тексте упомянаться больше не будет.
Для всех команд доступны опции (в скобках указаны текущие значения):
**devops image list provider ec2|openstack** - посмотреть доступные образы провайдера (с учетом фильтров)
**devops image list ec2|openstack** - посмотреть созданные образы для провайдера
**devops image show** - посмотреть информацию об одном образе
*Команда предусмотрена, однако, может быть лишней, т.к. команда image list ее перекрывает. Команда image show выдает информацию по одному образу. Можно сделать так, что эта команда будет выдавать информацию по нескольким образам (чтобы легче и наглядней было сравнивать, чем с командой image list).*
**devops image update** - обновить образ из файла, файл должен содержать все необходимые параметры в формате JSON
<h3id="key">Key</h3>
Управление ключами для доступа к серверам
Key:
key add KEY_NAME FILE
key delete KEY_NAME
key list
**devops key add** - добавить ключ с именем KEY_NAME из файла FILE
**devops key delete** - удалить ключ с именем KEY_NAME
**devops key list** - показать список доступных ключей
Все ключи можно разделить на два типа: системные и пользовательские. Системные - те, которые были созданы при настройке сервера (их нельзя удалять). Пользовательские - добавленные пользователем.
<h3id="network">Network</h3>
$ devops network
Usage: /usr/bin/devops command [options]
Commands:
Network:
network list PROVIDER
**devops network list PROVIDER** - посмотреть список доступных сетей провайдера
<h3id="project">Project</h3>
Управление проектами
$ 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** - создать проект
После запуска команды клиент будет собирать необходимую информацию (будут возникать небольшие паузы между вопросами). Для создания проекта необходимо ответить на предлагаемые вопросы:
Deploy environment identifier: # идентификатор среды окружения (dev, test, my_env...)
Provider: # провайдер, где будет развернут проект
Security groups (comma separated), like 1,2,3, or empty for 'default': # список групп безопасности
Users, you will be added automatically (comma separated), like 1,2,3, or empty: # список пользователей, которые могут работать с проектом
Flavor: # параметры сервера, на котором будет развернут проект
Image: # образ ОС для проекта
Subnets (comma separated), like 1,2,3, or empty: # список подсетей, которые должны быть доступны проекту (для openstack не может быть пустым)
Run list (comma separated), like recipe[mycookbook::myrecipe], role[myrole]: role[test_dev], # список ролей и кукбук для развертывания проекта
Enter expires time if necessary (5m, 3h, 2d, 1w, etc): # время через которое сервер для проекта будет удален (пусто если обция не нужна)
*Если проект с указанным именем существует, то будет добавлена новое окружение к проекту*
Опции:
<table>
<tr>
<th>Опция</th>
<th>Описание</th>
<th>Комментарий</th>
</tr>
<tr>
<td>--groups GROUP_1,GROUP_2...</td>
<td>Security groups (comma separated list)</td>
<td>Указать список групп в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--deploy_env DEPLOY_ID</td>
<td>Deploy enviroment identifier</td>
<td>Указать окружение в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--subnets SUBNET,SUBNET...</td>
<td>Subnets identifier for deploy enviroment (ec2 - only one sybnet, openstack - comma separated list)</td>
<td>Указать подсети в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--flavor FLAVOR</td>
<td>Specify flavor for the project</td>
<td>Указать конфигурацию в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--image IMAGE_ID</td>
<td>Specify image identifier for the project</td>
<td>Указать идентификатор образа в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--run_list RUN_LIST</td>
<td>Run list (comma separated), like recipe[mycookbook::myrecipe], role[myrole]:</td>
<td>Указать список кукбук и ролей в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--users USER,USER...</td>
<td>Users for deploy environment control</td>
<td>Указать список пользователей в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--provider PROVIDER</td>
<td>Provider identifier 'ec2' or 'openstack'</td>
<td>Указать провайдера в опции, а не в интерактивном режиме</td>
</tr>
<tr>
<td>--no_expires</td>
<td>Without expires time</td>
<td>Если не нужно указывать время жизни запускаемых серверов</td>
</tr>
<tr>
<td>--expires EXPIRES</td>
<td>Expires time (5m, 3h, 2d, 1w, etc)</td>
<td>Указать время жизни сервера в опции, а не в интерактивном режиме</td>
</tr>
</table>
**devops project delete** - удалить проект или окружение
**devops project deploy** - деплоить все сервера проекта или окружения проекта
Security groups (comma separated), like 1,2,3, or empty for 'default':
Указываем пользователей, которые могут работать с окружением проекта, пользователь, который создает окружение будет автоматически добавлен, можно нажать Enter.
Users, you will be added automatically (comma separated), like 1,2,3, or empty:
Выбмраем параметры сервера. Например, нам надо чтобы проект был развернут на сервере с характеристиками: одно ядро, 20Гб диск и 2Гб RAM, выбирает flavor с номером 7
Если нам надо, чтобы проект был развернут в подсети 10.0.0.0/24, тогда выбираем подсеть с номером 5
+--------+--------------+-----------------+
| 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-сервере будет создана роль с именем 'my_project_test', эта же роль по умолчанию включается в список. Роль нужно настроить на chef-сервере.
Run list (comma separated), like recipe[mycookbook::myrecipe], role[myrole]: role[my_project_test],
Нам не нужно уничтожать сервер через заданный промежуток времени, поэтому просто жмем Enter.
Enter expires time if necessary (5m, 3h, 2d, 1w, etc):
Второго окружения мы создавать не будем, поэтому жмем 'n'
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):
Если все правильно, жмем 'y' и проект будет создан.
<h2id="howto_server">Запуск сервера</h2>
Теперь запустить новый сервер очень просто, нужно выполнить команду
devops server create my_project test -N my_server_1
Параметр '-N' говорит о том, что серверу нужно задать имя. Если параметр не указывать, то имя будет сгенерировано автоматически.