В рамках миграции моих старых сообщений блога этот был размещен 27 июля 2014 года.
Я знаю, что это было какое-то время, так как я поставил свой последний пост, но школа держала меня занятым. Я написал это в спешке и спросил, что вы оправдываете какие-либо орфографические и грамматические ошибки. В частности, я принимал CSC 373 — алгоритм дизайн, анализ и сложность И имел несколько заданий для работы. В свободное время я работаю над моим собственным непредвиденным скриптом. Anbible Это инструмент, используемый для развертывания и обновления приложений в простом в использовании язык, используя SSH, без агентов для установки на удаленные системы. Спецификации для Anisible все написаны в Ямле, что делает их хорошо структурированными и, как правило, легко следовать. Назад на волне, Натан писал Обязательный грунтовтер Сообщение в блоге на Волновая инженерная блога . Здесь я буду принимать вас через мой неблагоприятный сценарий как практический пример того, что вы можете использовать Anbible для настройки удаленных серверов.
К сожалению, недавно имел провал жесткого диска на моем ноутбуке. Я должен был вручную настроить мою машину так, как мне это нравится. При настройке я понял, что колоссальная трата времени в том, чтобы посмотреть, как мне нужен PPA, у специальный драйвер Sager я бы установил для подсветки клавиатуры и пытаясь вспомнить, что я использовал больше всего. На этот раз я сделал умную вещь и просто документировал все мои шаги. Там было несколько пропущенных вещей, связанных с использованием DConf, GConftool-2 и Gsettings и пару шагов, которые я еще не записал. Мы использовали Anbible at Wave, и моя последняя попытка узнать, что она встретилась с путаницей, десять видеомагнитофон на фоне и эпизод сопрано. Я пытался следовать примеру Натана (упрощая его по пути), а также куча других учебных пособий, связанных с Джанго. Все они встретились с неспособностью получить успешно обеспеченную виртуальной машины. Я делал небольшой вклад на работу на нашими нашими сценариями, надеясь, что мне нужна практика, когда я решил попробовать еще раз. Вот когда Алекс Такер Предложенный я беру свои инструкции по настройке и даю ей другой пойти в Anisible. Теперь, когда вы знаете, как я начал, я попаду в проект.
Это в основном самоуверенно, я пойду в более подробную информацию о каждом разделе.
setup.yml # master playbook HOSTS # HOSTS file which defines where the script will run. This points to localhost. requirements.txt # the requierments for running this playbook, including ansible run.sh # one command script for install requirements, cloning the repo and provisioning. roles/ common/ # this hierarchy represents a "role" tasks/ # *.yml # <-- tasks files i'll talk about later files/ # *.* # <-- files for use with the copy resource vars/ # main.yml # <-- variables associated with this role
Этот файл позволяет доступным знать, где расположены машины, в этом случае все, что нам нужно, является localhost.
[local] 127.0.0.1
Некоторые на неблагоприятных модулях имеют требования, а несеменные документы предоставляют их на каждой странице модулей.
python-apt==0.9.3.5 ansible==1.7.1
Это также довольно просто. Здесь мы можем определить, что мы бежим там, где я просто говорю это, чтобы запустить сценарии, в моей общей роли, на местной машине.
- name: a playbook to setup my local machine with my basic customizations hosts: local connection: local roles: - common
Здесь мы можем определить переменные, которые мы можем использовать с {{имя переменной}}
синтаксис. Я использую некоторые из них для условно-запуска задач, чтобы сделать их для конкретного пользователя и для загрузки приложений, которые недоступны через PPA.
--- username: joseph sager_laptop: false vagrant_url: https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.3_x86_64.deb virtualbox_url: http://download.virtualbox.org/virtualbox/4.3.14/virtualbox-4.3_4.3.14-95030~Ubuntu~raring_amd64.deb github_username: JBKahn bumblebee: false uname_r: 3.13.0-32-generic
Например, я помещаю файлы автозапуска там, чтобы я мог скопировать их в правильный каталог, поэтому приложения будут запущены при загрузке. У меня также есть файлы конфигурации для приложений и моего терминала.
[Desktop Entry] Name=Variety Comment=Variety Wallpaper Changer Icon=/opt/extras.ubuntu.com/variety/share/variety/media/variety.svg Exec=/opt/extras.ubuntu.com/variety/bin/variety Terminal=false Type=Application X-GNOME-Autostart-Delay=20
Вот где находится большая часть кодирования, и я предоставлю пять примеров, остальные вы можете оформить заказ в репозитории.
1) Main.yml.
--- - include: pre.yml - include: sublime.yml - include: chrome.yml - include: numix.yml - include: plank.yml - include: keepass2.yml - include: laptop.yml when: sager_laptop == true - include: variety.yml - include: font.yml - include: base16.yml - include: work.yml - include: scm_breeze.yml - include: vim.yml - include: other_requirements.yml - include: dropbox.yml - include: bash_customizations.yml - include: bumblebee.yml when: bumblebee == true
«Main.yml» — это файл, который вызовы общих ролей Setup.yml, я просто использую его, чтобы условно вызывать другие файлы задач, которые я использую.
2) Base16.yml.
--- - name: base16 - checkout repo git: repo: https://github.com/chriskempson/base16-gnome-terminal.git dest: "/home/{{ username }}/setup/base16-gnome" - name: base16 - copy monokai-dark copy: src: "/home/{{ username }}/setup/base16-gnome/base16-monokai.dark.sh" dest: "/home/{{ username }}/base16-monokai.dark.sh" mode: 0755 - name: base16 - install monokai dark command: "/home/{{ username }}/base16-monokai.dark.sh" - name: base16 - set system font to source code pro gconftool-2: key: /apps/gnome-terminal/profiles/base-16-monokai-dark/font string: "Source Code Pro Semi-Bold 12" - name: base16 - dont use default system font in terminal gconftool-2: key: /apps/gnome-terminal/profiles/base-16-monokai-dark/use_system_font bool: false - name: base16 - set default terminal profile gconftool-2: key: /apps/gnome-terminal/global/default_profile string: "base-16-monokai-dark" - name: base-16 - get base16-shell so that colors show up correctly in vim git: repo: https://github.com/chriskempson/base16-shell.git dest: "/home/{{ username }}/.config/base16-shell"
Здесь я использую MIT, файловые и командные модули для оформления удивительного База-16 Цветовая схема для моего терминала, установите его по умолчанию и установите шрифт (который я уже настроен в другой задаче).
3) Vim.yml.
--- - name: horse vim - download vim apt: name: vim update_cache: yes sudo: yes - name: horse vim - make sure bundle directory exists file: path: "/home/{{ username }}/.vim/bundle" state: directory mode: 0777 sudo: yes - name: horse vim - checkout vundle repo git: repo: https://github.com/gmarik/vundle.vim.git dest: "/home/{{ username }}/.vim/bundle/vundle" - name: horse vim - checkout repo git: repo: https://github.com/JBKahn/horse.vim.git dest: "/home/{{ username }}/horse.vim" - name: horse vim - copy .vimrc file file: src: "/home/{{ username }}/horse.vim/.vimrc" dest: "/home/{{ username }}/.vimrc" mode: 0755 state: link - name: horse vim - copy .vimrc.bundles file file: src: "/home/{{ username }}/horse.vim/.vimrc.bundles" dest: "/home/{{ username }}/.vimrc.bundles" mode: 0755 state: link - name: horse vim - make sure vim colors directory exists file: path: "/home/{{ username }}/.vim/colors" state: directory mode: 0777 sudo: yes - name: horse vim - copy color to config to avoid error copy: src: base16-monokai.vim dest: "/home/{{ username }}/.vim/colors/base16-monokai.vim" mode: 0755 - name: horse vim - run bundle install command: vim +BundleInstall +qall - name: horse vim - add NeoVim ppa apt_repository: repo: 'ppa:rudenko/neovim' state: present update_cache: yes sudo: yes - name: horse vim - install neovim apt: name: neovim update_cache: yes sudo: yes - name: horse vim - symlink nvimrc file: src: "/home/{{ username }}/horse.vim/.vimrc" dest: "/home/{{ username }}/.nvimrc" mode: 0755 state: link - name: horse vim - symlink nvim file: src: "/home/{{ username }}/.vim" dest: "/home/{{ username }}/.nvim" mode: 0755 state: link
Другая часть моей установки — поставить VIM и все важные пакеты на моей машине. К сожалению, когда я пытался установить пакеты, казалось, что пропустить файл моей цветовой гаммы, помешал мне загрузить его через Vundle. Использование модуля копирования Ansibiable Я принимаю текущую версию (вместо того, чтобы делать Git Plat для более актуальной на сегодняшний день), чтобы временно поместить там файл и заменить его, запустив настройку.
4) рабочая работа
--- - name: download vagrant .deb package get_url: url: "{{ vagrant_url }}" dest: "/home/{{ username }}/setup/vagrant.deb" mode: 0755 - name: get currently installed vagrant version command: "vagrant --version" sudo: yes register: result ignore_errors: True - name: install vagrant apt: deb: "/home/{{ username }}/setup/vagrant.deb" sudo: yes when: result.rc !=0 or result.stderr.find('A later version is already installed') != -1 - name: download virtualbox .deb package get_url: url: "{{ virtualbox_url }}" dest: "/home/{{ username }}/setup/virtualbox.deb" mode: 0755 - name: install virtualbox apt: deb: "/home/{{ username }}/setup/virtualbox.deb" sudo: yes - name: install wave dependencies apt: name: "{{ item }}" state: installed update_cache: yes with_items: - python-pip - curl - nodejs - nfs-kernel-server - nfs-common - rpcbind - tmux - npm - libjpeg-dev - libfreetype6-dev - zlib1g-dev - libpng12-dev - python-dev - libpq-dev - python-dev sudo: yes - name: get currently installed node version command: "node --version" sudo: yes register: result ignore_errors: True tags: nodejs - name: checkout node git: repo: "git://github.com/ry/node.git" dest: "/setup/node" force: no accept_hostkey: yes when: result.rc !=0 tags: nodejs sudo: yes - name: configure sudo: yes command: "./configure" args: chdir: /setup/node when: result.rc !=0 tags: nodejs - name: make command: "make" sudo: yes args: chdir: /setup/node when: result.rc !=0 tags: nodejs - name: make install command: "make install" sudo: yes args: chdir: /setup/node when: result.rc !=0 tags: nodejs - name: install global nodejs packages npm: name: "{{ item.name }}" state: present global: yes version: "{{ item.version|default('') }}" with_items: - {name: 'bower'} - {name: 'coffee-script', version: '1.7.1'} - {name: 'grunt-cli'} - {name: 'less'} - {name: 'jshint'} - {name: 'coffee-jshint'} sudo: yes - name: install tmuxp pip: name: tmuxp sudo: yes - name: copy tmuxp config copy: src: .tmux.conf dest: "/home/{{ username }}/.tmux.conf" mode: 0755 - name: install ipython pip: name: ipython sudo: yes
Существует справедливое количество совпадений между вещами, которые я использую для моих личных проектов и тех, которые мне нужны для работы. Здесь я поставил больше целенаправленных требований к разработке, используя некоторые из его самых разнообразных модулей для установки пакетов через PIP, .deb файлы и APT.
5) ноутбук
--- - name: screen dimming - alter grub file lineinfile: dest: /etc/default/grub regexp: "line: ' splash video.use_native_backlight=1"' sudo: yes register: grubfile tags: sager - name: screen dimming - update grub command: sudo update-grub sudo: yes when: grubfile|changed tags: sager - name: keyboard colors - requirements apt: pkg: "{{ item }}" state: installed with_items: - build-essential - linux-source sudo: yes tags: sager - name: keyboard colors - Make sure setup directory exists file: path: "/home/{{ username }}/setup" state: directory tags: sager - name: keyboard colors - checkout clevo-wmi-code git: repo: git://git.code.sf.net/p/clevo-wmi/code dest: "/home/{{ username }}/setup/clevo-wmi-code" accept_hostkey: yes tags: sager - name: keyboard colors - build clevo-wmi command: make args: chdir: "/home/{{ username }}/setup/clevo-wmi-code" tags: sager - name: keyboard colors - link clevo-wmi to kernel check command: cat /etc/modules sudo: yes register: running_modules tags: sager - name: keyboard colors - link clevo-wmi to kernel command: "sudo insmod /home/{{ username }}/setup/clevo-wmi-code/clevo_wmi.ko" sudo: yes # when: running_modules.stdout.find('clevo_wmi') == -1 tags: sager ignore_errors: True - name: keyboard colors - copy to kernel drivers copy: src: "/home/{{ username }}/setup/clevo-wmi-code/clevo_wmi.ko" dest: "/lib/modules/{{ uname_r }}/kernel/drivers/platform/x86/" sudo: yes tags: sager - name: keyboard colors - handle dependencies command: sudo depmod -a sudo: yes tags: sager - name: keyboard colors- add to etc/modules lineinfile: dest: /etc/modules line: clevo_wmi sudo: yes tags: sager - name: keyboard colors - copy kbbl script copy: src: keyboard-color.sh dest: "/home/{{ username }}/keyboard-color.sh" mode: 0755 tags: sager
Одним из недостатков использования Linux может быть, что некоторые вещи трудно сделать работу, хотя Ubuntu помогает со многими из них. Долгое время я не смог тускнеть всю подсветку, и моя подсветка клавиатуры всегда была всегда и всегда синей. Благодаря использованию небольших настроек твик, пользовательский драйвер и пользовательский скрипт, который я написал для изменения подсветки клавиатуры, я не могу делать все эти вещи. Задача будет запускать только контингент по переменной Sager_Laptop, которая является правдой. Один из действительно отличных модулей в названии «LineInFile», и он должен убедиться, что линия существует в файле. Это звучит довольно просто Но он предлагает возможность использовать регулярное выражение для определения строки (так что, если оно не существует Но это предназначено для замены другой линии, она будет) и возможность создавать файл, если он не существует (настраивается).
sudo apt-get install python-setuptools sudo easy_install pip sudo apt-get install aptitude sudo apt-get install git sudo apt-get install python-dev libxml2-dev libxslt-dev cd ~ mkdir -p setup cd setup git clone https://github.com/JBKahn/provisioning-local.git cd provisioning-local sudo pip install -r requirements.txt echo -e "please enter your username, followed by [ENTER]" && read PROVISIONING_USER sudo sed -i "s/^username: .*/username: $PROVISIONING_USER/" roles/common/vars/main.yml echo -e "please enter your github username, followed by [ENTER]" && read PROVISIONING_GITHUB_USERNAME sudo sed -i "s/^github_username: .*/github_username: $PROVISIONING_GITHUB_USERNAME/" roles/common/vars/main.yml sudo sed -i "s/^uname_r: .*/uname_r: `uname -r`/" roles/common/vars/main.yml ansible-playbook setup.yml -i HOSTS --ask-sudo-pass --module-path ./ansible_modules # currently unable to use ansible due to EULA that I can't seem to stub using debconf sudo apt-get install steam dropbox start -i & /opt/extras.ubuntu.com/variety/bin/variety $ plank & source ~/.bashrc exit 0
Используя: bash wget -qo https://github.com/jbkahn/provisioning-local/raw/master/run.sh | Sudo Bash
Вы можете загрузить этот сценарий и запустить и запустить настройку машины в кратчайшие сроки. Он обрабатывает требования и запускает три приложения после завершения предоставления.
joseph@Batcave-Ubuntu:~/dev/provisioning-local$ sudo rm -fr ../../setup/base16-gnome/ [sudo] password for joseph: joseph@Batcave-Ubuntu:~/dev/provisioning-local$ ansible-playbook setup.yml -i HOSTS --ask-sudo-pass sudo password: PLAY [a playbook to setup my local machine with my basic customizations] ****** GATHERING FACTS *************************************************************** ok: [127.0.0.1] TASK: [common | base16 - checkout repo] *************************************** changed: [127.0.0.1] TASK: [common | set file permissions] ***************************************** changed: [127.0.0.1] TASK: [common | base16 - install monokai dark] ******************************** changed: [127.0.0.1] TASK: [common | base16 - set system font to source code pro] ****************** changed: [127.0.0.1] TASK: [common | base16 - dont use default system font in terminal] ************ changed: [127.0.0.1] TASK: [common | base16 - set default terminal profile] ************************ changed: [127.0.0.1] PLAY RECAP ******************************************************************** 127.0.0.1 : ok=7 changed=6 unreachable=0 failed=0
Здесь после того, как я бегу, это скажет мне, сколько из них у RAN (изменено) или не потребовалось больше работы (ОК). Есть несколько задач (I.E. команды), которые всегда будут «изменены», если только они не будут выполнены или модуль не записан, чтобы объяснить, чтобы объяснить, как проверить, и посмотреть, изменилось ли что-то.
Это все, что вам нужно, чтобы получить это и бегать и обеспечить собственную машину. Я надеюсь, что смогу написать сообщение в блоге о том, чтобы использовать его с блуждающим и тем, что такое различия. На данный момент я оставлю вас с несколькими соответствующими ссылками:
- Репозиторий Отказ
- Аналимыми модулями Отказ
Оригинал: «https://dev.to/jbkahn/ansible-or-how-i-learned-to-stop-wasting-time-setting-up-my-computer-and-script-it-24hk»