Рубрики
Uncategorized

Anisible или: как я научился перестать тратить время настроить свой компьютер и сценарий Это

Миграция моего старого блога как часть миграции моих старых сообщений в блоге, этот был опубликован на Jul … Теги с DevOps.

В рамках миграции моих старых сообщений блога этот был размещен 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»