Содержание
Описание knife solo
knife-solo
расширяет возможности chef-solo
, так что его возможности становятся близки Chef-серверу.
В настоящий момент knife-solo
добавляет 5 команд к самому Knife:
knife solo init
– используется для создания структуры директорий (т.е. – “кухни”, kitchen), которая совпадает со стандартной структурой директорий Chef и может быть использована для создания и хранения рецептов;knife solo prepare
– используется для установки Chef на заданный сервер; во время установки автоматически будет определена ОС и выбран способ установки;knife solo cook
– загружает текущую “кухню” (репозиторий Chef) на заданный сервер и запускает тамchef-solo
;knife solo bootstrap
– объединяет в себе первые две команды;knife solo clean
– удаляет заруженную кухню с целевого сервера.
Подготовка Vagrant
Добавляем запись в hosts
:
$ sudo sh -c "echo '127.0.0.1 dev-pub1-vagrant.local' >> /etc/hosts"
$ ping dev-pub1-vagrant.local PING dev-pub1-vagrant.local (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.056 ms
Подготавливаем машину:
$ mkdir -p ~/VMs/Vagrant/dev_aem6_pub $ cd ~/VMs/Vagrant/dev_aem6_pub $ vagrant init ubuntu/trusty64
В Vagrantfile
редактируем настройки:
... config.vm.network "forwarded_port", guest: 4503, host: 4503 ... config.vm.network "public_network" ... config.vm.network :forwarded_port, guest: 22, host: 2223, id: 'ssh' ... config.vm.provider "virtualbox" do |vb| vb.memory = "2048" end ...
Запускаем:
$ vagrant up
Подключаемся и добавляем пользователя:
$ vagrant ssh $ sudo adduser knife $ sudo visudo
Меняем группу sudo
:
... # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) NOPASSWD:ALL ...
Добавляем в нее пользователя knife
:
$ sudo usermod -a -G sudo knife
Добавляем RSA-ключ:
$ ssh-copy-id -p 2223 -i ssh/id_rsa [email protected]
Knife
Клонируем репозиторий:
$ git clone -b devadd https://[email protected]/scm/contactmapping.git
Его содержимое:
$ tree contactmapping/ contactmapping/ └── chef_repo ├── Berksfile ├── Berksfile.lock ├── README.md ├── nodes │ ├── dev-auth1.domain.technology.json │ ├── dev-pub1.domain.technology.json │ ├── qa-auth1.domain.technology.json │ ├── qa-pub1.domain.technology.json │ ├── uat-auth1.domain.technology.json │ └── uat-pub1.domain.technology.json └── ssh ├── id_rsa └── id_rsa.pub
Berksfile
со списком зависимостей:
$ cat contactmapping/chef_repo/Berksfile source 'https://api.berkshelf.com' cookbook "apt" cookbook "apache2" cookbook "java" cookbook "acpi-support", git: "https://[email protected]/scm/glc/acpi-support.git" cookbook "cq5", git: "https://[email protected]/scm/glc/cq.git" cookbook "dispatcher", git: "https://[email protected]/scm/glc/dispatcher.git" cookbook "cloudera", git: "https://userstash.domain.net/scm/glc/cloudera.git" cookbook "nrpe", git: "https://userstash.domain.net/scm/glc/nrpe.git" cookbook "logstash-forwarder", git: "https://[email protected]/scm/glc/logstash-forwarder.git"
Копируем файл ноды:
$ cp contactmapping/chef_repo/nodes/dev-pub1.domain.technology.json contactmapping/chef_repo/nodes/dev-pub1-vagrant.local.json
Его содержимое:
$ head -n 20 contactmapping/chef_repo/nodes/dev-pub1-vagrant.local.json { "run_list": [ "recipe[apt]", "recipe[acpi-support]", "recipe[nrpe]", "recipe[logstash-forwarder]", "recipe[java]", "recipe[cq5::cq55]", "recipe[dispatcher]" ], "java": { "install_flavor": "oracle", "jdk": { "8": { "x86_64": { "url": "http://static.content.domain.net/static/content/jdk/jdk-8u20-linux-x64.tar.gz", "checksum": "3e717622ae48af5ca7298e7797cb71d4d545238f362741a83e69c097ca055de4" }, "i586": { "url": "http://static.content.domain.net/static/content/jdk/jdk-8u20-linux-i586.tgz", ...
Создаем “кухню” с рецептами:
$ cd contactmapping/chef_repo/ $ knife solo init . Creating kitchen... Creating knife.rb in kitchen... Creating cupboards... Setting up Berkshelf...
Проверяем:
$ tree . . ├── Berksfile ├── Berksfile.lock ├── README.md ├── cookbooks ├── data_bags ├── environments ├── nodes │ ├── dev-auth1.domain.technology.json │ ├── dev-pub1.domain.technology.json │ ├── dev-pub1-domain.local.json │ ├── qa-auth1.domain.technology.json │ ├── qa-pub1.domain.technology.json │ ├── uat-auth1.domain.technology.json │ └── uat-pub1.domain.technology.json ├── roles ├── site-cookbooks └── ssh ├── id_rsa └── id_rsa.pub
Подготавливаем Chef на Vagrant-боксе, загружаем рецепты из локальной “кухни”, и запускаем chef solo
на боксе:
$ knife solo bootstrap [email protected] -p 2223 -i ssh/id_rsa
На боксе проверяем:
# netstat -anp | grep 4503 tcp6 0 0 :::4503 :::* LISTEN 19461/java
Готово: