Skip to content

Instantly share code, notes, and snippets.

@kafecho
Created January 8, 2015 07:46
Show Gist options
  • Select an option

  • Save kafecho/ae9f6cf1540647dd5cc5 to your computer and use it in GitHub Desktop.

Select an option

Save kafecho/ae9f6cf1540647dd5cc5 to your computer and use it in GitHub Desktop.

Revisions

  1. kafecho created this gist Jan 8, 2015.
    5 changes: 5 additions & 0 deletions installcouchdb.ps1
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,5 @@
    $p = Start-Process -FilePath "C:\Users\Guillaume\couchdb.exe" -ArgumentList "/VerySilent /CLOSEAPPLICATIONS /Log=C:\couchdb.txt" -Wait -PassThru
    $p.WaitForExit()
    if ($p.ExitCode -ne 0) {
    throw "failed"
    }
    66 changes: 66 additions & 0 deletions windows-test-playbook.yaml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,66 @@
    # Ansible playbook to install and configure CouchDB from scratch.
    ---
    # The steps below run on the Ansible 'master' node.
    - hosts: 127.0.0.1
    sudo: True
    connection: local
    vars:
    # Some customisations to the CouchDB configuration.
    couchdb_port: 5983
    couchdb_bind_address: 0.0.0.0

    tasks:
    # I use a web server to serve content from the master node to the windows machine.
    # This approach also enables offline mode, where the Windows node don't have access to the internet
    - name: install Apache2 on the Ansible master node
    yum: name=httpd

    - name: create the ansible folder that will be served by Apache2
    file: path=/var/www/html/ansible state=directory

    - name: retrieve the Windows installer for CouchDB
    get_url: url=http://apache.is.co.za/couchdb/binary/win/1.6.1/setup-couchdb-1.6.1_R16B02.exe dest=/var/www/html/ansible/couchdb.exe force=no

    - name: add a copy of the Silverlight windows installer to the web server folder
    copy: src=Silverlight_x64.exe dest=/var/www/html/ansible/Silverlight_x64.exe

    # Templating is not yet supported in Windows, so we template the file on the master node and serve the output via http
    - name: create a CouchDB local.ini file from a template and save it to the local webserver.
    template: src=local.ini.j2 dest=/var/www/html/ansible/local.ini

    - name: ensure that Apache2 is running
    service: name=httpd state=started

    # The steps below run on any Windows node in the inventory
    - hosts: windows
    gather_facts: no
    tasks:
    # We discover the ip address of the master node, so that windows nodes can fetch content over Http from the right place
    - name: fetch the ip address of the master node
    local_action: "shell ifconfig eth1 | grep 'inet addr' | awk -F: '{print $2}' | awk '{print $1}'"
    register: ansible_master_ip

    - name: download the Silverlight installer from the Ansible master node
    win_get_url: url=http://{{ ansible_master_ip.stdout }}/ansible/Silverlight_x64.exe dest=C:\Users\Guillaume\silverlight.exe

    - name: proceed to a silent install of silverlight
    script: installsilverlight.ps1

    - name: download the couchdb.exe InnoSetup installer from the Ansible master node
    win_get_url: url=http://{{ ansible_master_ip.stdout }}/ansible/couchdb.exe dest=C:\Users\Guillaume\couchdb.exe

    - name: ensure that CouchDB is stopped
    win_service: name="Apache CouchDB" state=stopped
    ignore_errors: true

    - name: stop left-over Erlang processes (otherwise, the installation via PowerShell will fail)
    script: stoperlang.ps1

    - name: proceed to a silent install of couchdb
    script: installcouchdb.ps1

    - name: customize the CouchDB configuration
    win_get_url: url=http://{{ ansible_master_ip.stdout }}/ansible/local.ini dest='C:\Program Files (x86)\Apache Software Foundation\CouchDB\etc\couchdb\local.ini'

    - name: restart couchdb
    win_service: name="Apache CouchDB" state=restarted