fluke/devops-client/README_ru.md
GGA Software Services LLC 02bf8b1bba initial commit
2014-05-08 17:06:06 +04:00

40 KiB
Raw Blame History

<head> </head>

Devops клиент

Клиент реализован в виде гема.

Оглавление

Установка

Для правильной работы devops необхлдимо наличие:

  • ruby v1.9.3

Установить devops можно командой

$ sudo gem install devops-client.gem --no-ri --no-rdoc

После установки гема devops-client, будет доступна команда

$ devops

Если команда не доступна, тогда нужно запустить

$ gem environment

и добавить путь "EXECUTABLE DIRECTORY" в $PATH

При запуске команды будет выдана короткая справка по ее использованию.

$ 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

Для каждой команды можно посмотреть более подробную справку с помощью параметра --help

Первый запуск

При первом запуске (либо запуске, когда программа не сможет найти конфигурационный файл ~/.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

В результате будет создан конфигурационный файл.

Команды

В конце выполнения некоторых команд будет выводиться информация о проделанной работе в формате JSON. И выдаваться вопрос с подтверждением. Если все параметры верны, необходимо подтвердить результат команды, нажав на клавишу "y", либо отменить операцию, нажав на клавишу "n". Данная особенность в тексте упомянаться больше не будет.

Для всех команд доступны опции (в скобках указаны текущие значения):

Опция Описание Комментарий
-h, --help Show help показать справку
-c, --config FILE Specify devops client config file (/home/my_user/.devops/devops-client.conf) указать полный путь к конфигурационному файлу
-v, --version devops client version вывести версию клиента
--host HOST devops service host address (devops-server-host:devops-server-port) указать к какому devops серверу стоит обращаться (в формате host:port)
--api VER devops service API version (v2.0) указать версию API
--user USERNAME devops username (my_user) сделать запрос к devops от пользователя USERNAME
--format FORMAT Output format: 'table', 'json' (table) формат вывода ответа от сервера: table - в таблице, json - текст в формате JSON
--completion Initialize bash completion script инициализировать скрипт автодополнения команд (только linux, интерпретатор bash)

Templates

$ devops templates

Usage: /usr/bin/devops command [options]

Commands:
	Bootsrap templates:
		templates list

devops templates list - посмотреть список доступных шаблонов для бутстрапа

Deploy

Команда предназначена для деплоя приложений на сервера.

$ devops deploy

Usage: /usr/bin/devops command [options]

Commands:
	Deploy:
		deploy NODE_NAME [NODE_NAME ...]

devops deploy - деплой приложений на указанные сервера

Опции:

Опция Описание Комментарий
--tag TAG1,TAG2... Tag names, comma separated lista Указвается список тегов, которые немходимо применить к серверу при деплое

Filters

Команда предназначена для управления списком доступных образов.

$ 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 - добавить образ(ы) в список фильтров для провайдера devops filter image delete - удалить образ(ы) из списока фильтров для провайдера devops filter image list - посмотреть список доступных образов для провайдера

Flavor

$ devops flavor

Usage: /usr/bin/devops command [options]

Commands:
	Flavor:
		flavor list PROVIDER

devops flavor list - посмотреть список доступных конфигураций виртуальных машин провайдера

Group

$ devops group

Usage: /usr/bin/devops command [options]

Commands:
	Group:
		group list PROVIDER

devops group list - посмотреть список доступных групп безопасности провайдера

Image

Команда предназначена для управления образами

$ 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 - создать образ, для выполнения команды необходимо ответить на несколько вопросов:

Provider:                      # выбрать одного из доступных провыйдеров в списке
Choose image:                  # ввести номер образа из списка, который необходимо использовать
The ssh username:              # имя пользователя для доступа по ssh
Bootstrap template (optional): # название скрипта для бутстрапа

Опции:

Опция Описание Комментарий
--provider PROVIDER Image provider указать провайдера в опции, а не в интерактивном режиме
--image IMAGE_ID Image identifier указать идентификатор образа в опции, а не в интерактивном режиме
--ssh_user USER SSH user name указать имя пользователя для доступа по ssh в опции, а не в интерактивном режиме
--bootstrap_template TEMPLATE Bootstrap template указать шаблон в опции, а не в интерактивном режиме
--no_bootstrap_template Do not specify bootstrap template Использовать шаблон по умолчанию

devops delete - удалить образ по ID

devops image list - посмотреть созданные образы

devops image list provider ec2|openstack - посмотреть доступные образы провайдера (с учетом фильтров)

devops image list ec2|openstack - посмотреть созданные образы для провайдера

devops image show - посмотреть информацию об одном образе

Команда предусмотрена, однако, может быть лишней, т.к. команда image list ее перекрывает. Команда image show выдает информацию по одному образу. Можно сделать так, что эта команда будет выдавать информацию по нескольким образам (чтобы легче и наглядней было сравнивать, чем с командой image list).

devops image update - обновить образ из файла, файл должен содержать все необходимые параметры в формате JSON

Key

Управление ключами для доступа к серверам

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 - показать список доступных ключей

Все ключи можно разделить на два типа: системные и пользовательские. Системные - те, которые были созданы при настройке сервера (их нельзя удалять). Пользовательские - добавленные пользователем.

Network

$ devops network

Usage: /usr/bin/devops command [options]

Commands:
	Network:
		network list PROVIDER

devops network list PROVIDER - посмотреть список доступных сетей провайдера

Project

Управление проектами

$ 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):                                       # время через которое сервер для проекта будет удален (пусто если обция не нужна)

Если проект с указанным именем существует, то будет добавлена новое окружение к проекту

Опции:

Опция Описание Комментарий
--groups GROUP_1,GROUP_2... Security groups (comma separated list) Указать список групп в опции, а не в интерактивном режиме
--deploy_env DEPLOY_ID Deploy enviroment identifier Указать окружение в опции, а не в интерактивном режиме
--subnets SUBNET,SUBNET... Subnets identifier for deploy enviroment (ec2 - only one sybnet, openstack - comma separated list) Указать подсети в опции, а не в интерактивном режиме
--flavor FLAVOR Specify flavor for the project Указать конфигурацию в опции, а не в интерактивном режиме
--image IMAGE_ID Specify image identifier for the project Указать идентификатор образа в опции, а не в интерактивном режиме
--run_list RUN_LIST Run list (comma separated), like recipe[mycookbook::myrecipe], role[myrole]: Указать список кукбук и ролей в опции, а не в интерактивном режиме
--users USER,USER... Users for deploy environment control Указать список пользователей в опции, а не в интерактивном режиме
--provider PROVIDER Provider identifier 'ec2' or 'openstack' Указать провайдера в опции, а не в интерактивном режиме
--no_expires Without expires time Если не нужно указывать время жизни запускаемых серверов
--expires EXPIRES Expires time (5m, 3h, 2d, 1w, etc) Указать время жизни сервера в опции, а не в интерактивном режиме

devops project delete - удалить проект или окружение

devops project deploy - деплоить все сервера проекта или окружения проекта

Опции:

Опция Описание Комментарий
--servers SERVERS Servers list (comma separated) Список имен серверов, разделенный запятыми

devops project list - вывести список созданных проектов

devops project servers - вывести список запущенных машин для проекта или окружения

devops project set run_list - изменить run-list для окружения проекта

devops project show - показать информацию о проекте

devops project update - обновить конфигурацию проекта из файла (файл должен содержать все необходимые параметры в формате JSON)

devops project user delete - добавить пользователя (пользователей) в список доступных пользователей для проекта

Опции:

Опция Описание Комментарий
--deploy_env ENV Add user to deploy enviroment Если опция не используется, то пользователь будет добавлен ко всем окружениям проекта

devops project user delete - удалить пользователя (пользователей) из списока доступных пользователей для проекта

Опции:

Опция Описание Комментарий
--deploy_env ENV Add user to deploy enviroment Если опция не используется, то пользователь будет удален из всех окружений проекта

Provider

$ devops provider

Usage: /usr/bin/devops command [options]

Commands:
	Provider:
		provider list

devops provider list - посмотреть список доступных провайдеров, доступны провайдеры ec2 и openstack (в зависимости от настроек сервера)

Script

Управление скриптами, которые могут быть запущены на сервере (сервер должен быть под управлением devops)

$ 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 - посмотреть список доступных скриптов (файлов)

devops script add - добавить скрипт с именем SCRIPT_NAME из файла FILE на devops-сервер

devops script delete - удалить скрипт с именем SCRIPT_NAME с devops-сервера

devops script run - запустить скрипт с именем SCRIPT_NAME на серверах NODE_NAME

Опции:

Опция Описание Комментарий
--params PARAMS Параметры скрипта (список разделенный запятой)

devops script command - запустить команду на сервере

Скрипт запускается интерпретатором bash

Server

$ 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 - добавить сервер под управление devops и зарегистрировать его в проекте PROJECT_ID

devops server bootstrap - развернуть на сервере инфраструктуру chef и развернуть проект, в котором сервер зарегистрирован

Опции:

Опция Описание Комментарий
-N, --name NAME Set chef name Задает серверу имя, если не указано, то имя будет сгенерировано автоматически
--bootstrap_template [TEMPLATE] Bootstrap template (optional) Если опция не указана, используется шаблон по умолчанию

devops server create - создать сервер для проекта PROJECT_ID и окружения DEPLOY_ENV

Опции:

Опция Описание Комментарий
-N, --name NAME Set chef name Задает серверу имя, если не указано, то имя будет сгенерировано автоматически

devops server delete - удалить сервер

Опции:

Опция Описание Комментарий
--instance Delete node by instance id Удалить сервер по идентификатору, а не по имени

devops server list - получить список доступных серверов

devops server pause - приостановить работу сервера (если сервер запущен в облаке)

devops server show - показать детальную информацию о сервере

server unpause - возобновить работу сервера

Tag

Управление тегами на chef-server для указанной сервера. Сервер должен быть создан командами 'server create' или 'server bootstrap'

$ 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 - создать теги на сервере NODE_NAME

devops tag delete - удалить теги с сервера NODE_NAME

devops tag list - вывести список созданных тегов на сервере NODE_NAME

User

Управление пользователями

$ 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 - создать пользователя с именем USER_NAME

Опции:

Опция Описание Комментарий
--password PASSWORD New user password Указать пароль в опции

devops user delete - удалить пользователя с именем USER_NAME

devops user grant - назначить права доступа пользователю

Доступны команды:

  • all
  • flavor
  • group
  • image
  • project
  • server
  • key
  • user
  • filter
  • network
  • provider
  • script

Привилегии:

  • r
  • w
  • rw

Если привилегии не указаны, то пользователю запрещается выполнять команду

Если не указана и команда и привилегии, то права пользователя сбрасываются к правам по умолчанию

devops user list - вывести список всех пользователей

devops user password - изменить пароль пользователю USER_NAME

Mini HOWTO

Опишем основные действия, необходимые для создания проекта и сервера.

Создание пользователя

По умолчанию, у пользователя root нет пароля, давайте зададим его.

$ devops user password root -u root
Enter password for 'root':
Updated

Создадим пользователя 'test' и назначим ему права, необходимые для создания фильтров, образов, проектов и серверов.

Если в системе еще нет ни одного пользователя, то будем действовать от пользователя root.

$ devops user create test -u root
Password for root:
Enter password for 'test':
Created

Допустим, пользователю 'test' мы задали пароль 'test', эти параметры надо прописать в конфигурационный файл.

При создании нового пользователя, ему назначаются почти все права только на чтение, добавим права на запись для filter, image, project, server:

$ 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

После выполненных действий в конфигурационном файле должен быть прописан пользователь 'test'

Создание образа

Прежде всего необходимо узнать идентификаторы нужных образов и добавить их в фильтр.

devops filter image add openstack 78665e7b-5123-4fa8-b39b-d7643ecd8ed7

Теперь можно создать образ

$ 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):

Если все параметры верны, то можно нажать на 'y' и проект будет создан.

Создание проекта

Создадим проект 'my_project' с окружением 'test'

$ devops project create my_project
Deploy environment identifier: test
+--------+-----------+
| API version: v2.0  |
|      Provider      |
+--------+-----------+
| Number | Provider  |
+--------+-----------+
| 1      | ec2       |
| 2      | openstack |
+--------+-----------+
Provider: 2

Выбираем группы безопасности или нажимаем Enter, чтобы использовать группу по умолчанию

+--------+-------------------------------------+----------+------+-------+-----------+-----------------------------+
|                                                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':

Указываем пользователей, которые могут работать с окружением проекта, пользователь, который создает окружение будет автоматически добавлен, можно нажать Enter.

+--------+------------------+-------+-----+---------+--------+------+--------+--------+--------+-------+---------+----------+
|                                                     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:

Выбмраем параметры сервера. Например, нам надо чтобы проект был развернут на сервере с характеристиками: одно ядро, 20Гб диск и 2Гб RAM, выбирает flavor с номером 7

+--------+-----------+--------------+------+-------+
|                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

Выбираем ранее созданый образ

+--------+--------------------------------------+---------------------------+--------------------+-------------+-----------+
|                                                    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

Если нам надо, чтобы проект был развернут в подсети 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' и проект будет создан.

Запуск сервера

Теперь запустить новый сервер очень просто, нужно выполнить команду

devops server create my_project test -N my_server_1

Параметр '-N' говорит о том, что серверу нужно задать имя. Если параметр не указывать, то имя будет сгенерировано автоматически.