ansible
Установка
retry_files
Отключить создание retry файлов:
Добавить переменную перед запуском:
ANSIBLE_RETRY_FILES_ENABLED=0
Или добавить в:
./ansible.cfg
~/.ansible.cfg
/etc/ansible/ansible.cfg
[defaults]
retry_files_enabled = False
Изменить путь создания retry файлов:
retry_files_save_path = "~/"
hosts
Пример настройки hosts для входа по ключу:
testd.domain.com ansible_ssh_private_key_file=/etc/ansible/ansible_rsa ansible_user=ansible
Подготовка клиента
Создаём пользователя ansible и добавляем его в группу sudo:
adduser ansible --ingroup sudo
Разрешаем пользователю выполнять sudo без пароля:
echo "ansible ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
Команды
Проверить связь со всеми хостами:
ansible all -m ping
Выполнить команду на удаленном хосте (proxy):
ansible -m shell -a 'ls /home/' proxy
Проверить playbooks:
ansible-playbook /etc/ansible/playbooks/ntp.yml --syntax-check
Показать всю собранную информацию о хосте:
ansible localhost -m setup
Показать информацию о сервисах хоста:
ansible localhost -m service_facts
Роли
Назначение директорий:
files: содержит файлы, которые будут скопированы на настраиваемые хосты; так же – может содержать скрипты, которые позже будут запускаться на хостах;
handlers: обработчики, которые будут использоваться при выполнении задач;
meta: описание зависимостей, т.е. – ролей, которые должны быть обработаны перед запуском настраиваемой роли и мета-данных, таких как автор, описание продукта и прочее;
templates: шаблоны файлов с переменными;
tasks: все задачи, которые ранее были описаны в Playbook-е;
vars: переменные для шаблонов.
https://galaxy.ansible.com/ - готовые роли
Модули
copy
Пример копирования более одного файла:
- name: Copy conf file
copy: src={{ item.src }} dest={{ item.dest }}
with_items:
- { src: /etc/ansible/playbooks/ntp/timesyncd.conf, dest: /etc/systemd/timesyncd.conf }
- { src: /etc/ansible/playbooks/ntp/ntp.conf, dest: /etc/ntp.conf }
http://docs.ansible.com/ansible/latest/copy_module.html
apt_key
Пример добавления ключей по url и по id:
- name: Add an Apt signing key rep.domain.com
apt_key:
url: "http://rep.domain.com/pubring.gpg"
state: present
- name: Add an apt key Zabbix by id from a keyserver
apt_key:
keyserver: keyserver.ubuntu.com
id: 082AB56BA14FE591
http://docs.ansible.com/ansible/latest/apt_key_module.html
docker_container
На целевой системе должен быть установлен docker-py:
sudo pip install docker-py
или
sudo apt install python-docker
Пример запуска и удаления контейнера:
- name: Create a Alpine container
docker_container:
name: alpine
image: alpine
- name: Remove a Alpine container
docker_container:
name: alpine
state: absent
https://docs.ansible.com/ansible/latest/modules/docker_container_module.html
service_facts
Примеры
Запуск одной роли для одного хоста
Создаём playbook role.yml:
Нажмите, чтобы отобразить
- hosts:
- '{{ HOST }}'
remote_user: ansible
gather_facts: false
become: yes
roles:
- '{{ ROLE }}'
Запускаем, пример для роли sysctl и хоста d2proxy:
ansible-playbook role.yml -e "ROLE=sysctl" -e "HOST=d2proxy"
Если роли необходимо передавать параметры, то незабываем добавлять их в role.yml
https://toster.ru/q/373534
Показать список задач
Параметр: –list-tasks
ansible-playbook -i hosts role.yml -e "ROLE=docker" -e "ROLE=sysctl" --list-tasks
GUI
Foreman
Нажмите, чтобы отобразить
Добавление репозиториев:
echo deb http://deb.theforeman.org/ xenial 1.15 | sudo tee /etc/apt/sources.list.d/foreman.list
echo deb http://deb.theforeman.org/ plugins 1.15 | sudo tee -a /etc/apt/sources.list.d/foreman.list
wget --quiet https://deb.theforeman.org/pubkey.gpg -O - | sudo apt-key add -
sudo apt-get update
Устанавливаем mariadb
Устанавливаем Foreman:
sudo apt install foreman foreman-mysql2
Будут установлены следующие дополнительные пакеты:
augeas-lenses binutils build-essential bundler cpp cpp-5 dpkg-dev fakeroot fonts-lato foreman-debug foreman-proxy g++ g++-5 gcc gcc-5 javascript-common libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libaugeas0 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libdpkg-perl libfakeroot libfile-fcntllock-perl libgcc-5-dev libgmp-dev libgmpxx4ldbl libgomp1 libgssrpc4 libisl15 libitm1 libjs-jquery libkadm5clnt-mit9 liblsan0 libmpc3 libmpx0 libquadmath0 libruby2.3 libstdc++-5-dev libtsan0 libubsan0 libvirt0 libxen-4.6 libxenstore3.0 libyajl2 linux-libc-dev make manpages-dev rake ruby ruby-augeas ruby-bundler ruby-bundler-ext ruby-concurrent ruby-dev ruby-did-you-mean ruby-ffi ruby-gssapi ruby-json ruby-libvirt ruby-minitest ruby-molinillo ruby-net-http-persistent ruby-net-telnet ruby-power-assert ruby-rack ruby-rack-protection ruby-rb-inotify ruby-rkerberos ruby-rubyipmi ruby-sinatra ruby-test-unit ruby-thor ruby-tilt ruby2.3 ruby2.3-dev rubygems-integration zip zlib1g-dev libmysqlclient-dev
Предлагаемые пакеты:
augeas-doc binutils-doc cpp-doc gcc-5-locales debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg apache2 | lighttpd | httpd augeas-tools glibc-doc gmp-doc libgmp10-doc libmpfr-dev krb5-doc krb5-user libstdc++-5-doc make-doc ri doc-base
Создаём БД:
export FOREMAN_DB_PW=`dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 - | cut -c2-18`
mysql -u root -e "CREATE DATABASE foreman CHARACTER SET utf8 COLLATE utf8_general_ci;" -p
mysql -u root -e "GRANT ALL PRIVILEGES ON foreman.* TO foreman@localhost IDENTIFIED BY '${FOREMAN_DB_PW}';\
FLUSH PRIVILEGES;" -p
Настраиваем /etc/foreman/database.yml
Инициализируем БД:
sudo foreman-rake db:migrate
sudo foreman-rake db:seed
https://theforeman.org/manuals/1.15/index.html
Semaphore
Нажмите, чтобы отобразить
Устанавливаем mariadb
Создаём БД:
export SEMAPHORE_DB_PW=`dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 - | cut -c2-18`
echo $SEMAPHORE_DB_PW
mysql -u root -e "CREATE DATABASE semaphore CHARACTER SET utf8 COLLATE utf8_general_ci;" -p
mysql -u root -e "GRANT ALL PRIVILEGES ON semaphore.* TO semaphore@localhost IDENTIFIED BY '${SEMAPHORE_DB_PW}'; FLUSH PRIVILEGES;" -p
Скачиваем последний Semaphore и подготавливаем:
wget https://github.com/ansible-semaphore/semaphore/releases/download/v2.4.1/semaphore_linux_amd64 -P /tmp
sudo mv /tmp/semaphore_linux_amd64 /usr/bin/semaphore
chmod +x /usr/bin/semaphore
sudo mkdir -p /opt/data/semaphore
sudo chown $(whoami): /opt/data/semaphore
Первый запуск для инициализации:
semaphore -setup
Запуск:
semaphore -config /opt/data/semaphore/semaphore_config.json
или как сервис:
nohup semaphore -config /opt/data/semaphore/semaphore_config.json &
Доступен по адресу http://semaphore:3000
https://gist.github.com/thedumbtechguy/0fae1ae931042829b73426630f3cd168
Polemarch
Нажмите, чтобы отобразить
Скачиваем последний Polemarch и устанавливаем:
sudo dpkg -i polemarch_X.X.X-0_amd64.deb
sudo apt-get install -f
Будут установлены следующие дополнительные пакеты:
libc-dev-bin libc6-dev libpython2.7 libssl-dev libssl-doc libyaml-dev linux-libc-dev manpages-dev python-pip-whl python-virtualenv python3-virtualenv sshpass virtualenv zlib1g-dev
Предлагаемые пакеты:
glibc-doc libyaml-doc
Доступен по адресу http://polemarch:8080
nci ansible ui
Нажмите, чтобы отобразить
Установливаем npm и nodejs:
sudo apt install npm nodejs-legacy
Будут установлены следующие дополнительные пакеты:
binutils build-essential cpp cpp-5 dpkg-dev fakeroot g++ g++-5 gcc gcc-5 gyp javascript-common libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libdpkg-perl libfakeroot libfile-fcntllock-perl libgcc-5-dev libgomp1 libisl15 libitm1 libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore liblsan0 libmpc3 libmpx0 libquadmath0 libssl-dev libssl-doc libstdc++-5-dev libtsan0 libubsan0 libuv1 libuv1-dev linux-libc-dev make manpages-dev node-abbrev node-ansi node-ansi-color-table node-archy node-async node-block-stream node-combined-stream node-cookie-jar node-delayed-stream node-forever-agent node-form-data node-fstream node-fstream-ignore node-github-url-from-git node-glob node-graceful-fs node-gyp node-inherits node-ini node-json-stringify-safe node-lockfile node-lru-cache node-mime node-minimatch node-mkdirp node-mute-stream node-node-uuid node-nopt node-normalize-package-data node-npmlog node-once node-osenv node-qs node-read node-read-package-json node-request node-retry node-rimraf node-semver node-sha node-sigmund node-slide node-tar node-tunnel-agent node-underscore node-which nodejs nodejs-legacy nodejs-dev zlib1g-dev
Предлагаемые пакеты:
binutils-doc cpp-doc gcc-5-locales debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg apache2 | lighttpd | httpd glibc-doc libstdc++-5-doc make-doc node-hawk node-aws-sign node-oauth-sign node-http-signature debhelper
Устанавливаем nci ansible ui:
git clone https://github.com/node-ci/nci-ansible-ui-quick-setup
cd nci-ansible-ui-quick-setup
npm install
Не работает https://github.com/node-ci/nci-ansible-ui/issues/7
Docker
Dockerfile:
FROM ubuntu:18.04
LABEL maintainer="domain" \
release-date="2020–04–27"
ENV ANSIBLE_RETRY_FILES_ENABLED 0
WORKDIR /etc/ansible
RUN set -x \
&& apt-get update && apt-get install -y ansible python-docker curl jq \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
CMD ["/bin/bash"]
Ссылки