Содержание
Описание 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
Готово:





