Статьи

Ansible Playbook для Swift

 Недавно я изучал  Swift, и теперь, когда он с  открытым исходным кодом , я собираюсь использовать его на своем сервере Linux.

Однако сначала я хотел запустить его внутри   бокса Vagrant локально, и, когда я снабдил все свои боксы через Ansible, я создал простую пьесу и записываю ее здесь на случай, если она пригодится кому-либо еще!

В  инструкции по установке  легко следовать, так что я просто реплицировать их как набор действий. Обратите внимание, что имя файла последнего снимка содержит версию и дату, поэтому я создал их как переменные, чтобы их можно было изменить и просто повторно предоставить.

Обычно я запускаю Ansible на своей Vagrant VM напрямую, так как это означает, что мне не нужно устанавливать его локально и что мои ящики могут использоваться людьми с Windows. Поэтому я использую поставщика оболочки, чтобы сначала установить Ansible, а затем запустить playbook. Это файлы, которые я использую:

Vagrantfile:

Vagrant.configure("2") do |c|
  c.vm.define "swiftdev", primary: true do |config|

    config.vm.box = "ubuntu/trusty64"
    config.vm.network "private_network", ip: "192.168.99.202"
    config.vm.hostname = "swiftdev.localhost"

    # Prevent Vagrant 1.7 from asking for the vagrant user's password
    config.ssh.insert_key = false

    # Install ansible on guest & run playbook
    config.vm.provision :shell,
      :keep_color => true,
      :inline => <<SCRIPT
        if [ $(dpkg-query -W -f='${Status}' ansible 2>/dev/null | grep -c "ok installed") -eq 0 ];
        then
            export DEBIAN_FRONTEND=noninteractive

            echo "Add Ansible repository"
            apt-add-repository ppa:ansible/ansible &> /dev/null || exit 1
            apt-get update -qq

            echo "Installing Ansible"
            apt-get install -qq ansible &> /dev/null || exit 1

            echo "Runing apt-get upgrade"
            apt-get update -qq &> /dev/null || exit 1
            apt-get upgrade -y &> /dev/null || exit 1
        fi


        echo "Running Ansible playbook"
        export PYTHONUNBUFFERED=1
        export ANSIBLE_FORCE_COLOR=1
        su vagrant -c "ansible-playbook -i 127.0.0.1, --connection=local /vagrant/vm-provisioning/init.yml"

SCRIPT

  end
end

Обратите внимание, что я запускаю playbook init.yml как бродячий пользователь, чтобы использовать правильный домашний каталог. Это основная пьеса:

VM-инициализации / init.yml:

---
- hosts: all

  vars:
    swift_snapshot: "swift-2.2-SNAPSHOT-2015-12-10-a"

  tasks:
    - name: Install useful packages
      apt: pkg={{ item }} state=latest
      with_items:
        # - curl
        - vim
      sudo: yes

  include: swift.yml

Это не так много. Он устанавливает переменные для быстрого снимка, который мы хотим, а также устанавливает vim и curl, поскольку они всегда полезны!

Наконец, мы затем устанавливаем сам Swift в наш домашний каталог:

VM-инициализации / swift.yml:

---
- hosts: all
  tasks:
    - name: Create swift directory
      file: path=~/swift state=directory owner=vagrant group=vagrant

    - name: Install packages for swift
      apt: pkg={{ item }} state=latest
      with_items:
        - clang-3.6
        - libicu-dev
      sudo: yes

    - name: Use clang 3.6
      alternatives: name=clang link=/usr/bin/clang path=/usr/bin/clang-3.6
      sudo: yes

    - name: Use clang++ 3.6
      alternatives: name=clang++ link=/usr/bin/clang++ path=/usr/bin/clang++-3.6
      sudo: yes

    - name: Grab gpg keys
      shell: gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys '7463 A81A 4B2E EA1B 551F  FBCF D441 C977 412B 37AD' '1BE1 E29A 084C B305 F397  D62A 9F59 7F4D 21A5 6D5F'
      args:
        chdir: /home/vagrant

    - name: Refresh gpg keys
      shell: gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift

    - name: Create swift directory
      file: path=~/swift state=directory owner=vagrant group=vagrant

    - name: Download Swift snapshot
      get_url: >
        url=https://swift.org/builds/ubuntu1404/{{ swift_snapshot }}/{{ swift_snapshot }}-ubuntu14.04.tar.gz
        dest=~/swift/swift-snapshot.tar.gz
        mode=0444
        owner=vagrant

    - name: Download Swift snapshot signature file
      get_url: >
        url=https://swift.org/builds/ubuntu1404/{{ swift_snapshot }}/{{ swift_snapshot }}-ubuntu14.04.tar.gz.sig
        dest=~/swift/swift-snapshot.tar.gz.sig
        mode=0444
        owner=vagrant

    - name: Verify snapshot file
      command: gpg --verify swift-snapshot.tar.gz.sig swift-snapshot.tar.gz
      args:
        chdir: ~/swift

    - name: Remove current version
      shell: rm -rf usr
      args:
        chdir: ~/swift

    - name: Extract archive
      shell: tar xzf swift-snapshot.tar.gz --strip-components 1
      args:
        chdir: ~/swift

    - name: Update bashrc
      lineinfile:
        dest=~/.bashrc
        line='export PATH=~/swift/usr/bin:"${PATH}"'
        regexp="^export PATH=~/swift/usr/bin"
        owner=vagrant
        state=present
        insertafter=EOF
        create=True

Вот и все. Теперь вы можете зайти в виртуальную машину ssh и запустить swift в командной строке: