Start of the CORD configuration
diff --git a/cord-setup.yml b/cord-setup.yml
new file mode 100644
index 0000000..80e5a53
--- /dev/null
+++ b/cord-setup.yml
@@ -0,0 +1,213 @@
+---
+# Play: set up head node
+- hosts: head
+ sudo: yes
+ tasks:
+
+ - apt: name={{ item }} update_cache=yes
+ with_items:
+ - python-pycurl
+ - software-properties-common
+
+ - name: Add Juju repository
+ apt_repository: repo="ppa:juju/stable"
+
+ - name: Add Ansible repository
+ apt_repository: repo="ppa:ansible/ansible"
+
+ - name: Update Ansible cache
+ apt: update_cache=yes
+
+ - name: Install packages
+ apt: name={{ item }} state=latest
+ with_items:
+ - ansible
+ - uvtool
+ - git
+ - bzr
+ - juju-core
+ - juju-quickstart
+ - python-novaclient
+ - python-neutronclient
+ - python-keystoneclient
+ - python-glanceclient
+
+ - name: Get juju-ansible git repo
+ git: repo=https://github.com/cmars/juju-ansible.git
+ dest=/usr/local/src/juju-ansible
+
+ - name: Set up juju-ansible symlink
+ file: dest=/usr/local/bin/juju-ansible
+ src=/usr/local/src/juju-ansible/juju-ansible
+ state=link
+
+ - name: Set up juju-ansible-playbook symlink
+ file: dest=/usr/local/bin/juju-ansible-playbook
+ src=/usr/local/src/juju-ansible/juju-ansible
+ state=link
+
+ - name: Generate key to use in VMs
+ user: name={{ ansible_env['SUDO_USER'] }} generate_ssh_key=yes
+
+ - name: Get public key
+ shell: cat {{ ansible_env['PWD'] }}/.ssh/id_rsa.pub
+ register: sshkey
+
+ - name: Add key
+ authorized_key: user="{{ ansible_env['SUDO_USER'] }}"
+ key="{{ sshkey.stdout }}"
+
+ - name: (CloudLab) Set up extra disk space
+ shell: /usr/testbed/bin/mkextrafs -f /var/lib/uvtool/libvirt/images
+ creates=/var/lib/uvtool/libvirt/images/lost+found
+ when: cloudlab
+
+ - name: Add myself to libvirtd group
+ user: name={{ ansible_env['SUDO_USER'] }}
+ groups=libvirtd
+ append=yes
+
+ - name: Get trusty image for uvtool
+ shell: uvt-simplestreams-libvirt sync --source http://cloud-images.ubuntu.com/daily release=trusty arch=amd64
+
+# Play: create VMs to host OpenStack services
+- hosts: head
+ sudo: yes
+ tasks:
+ - name: Create VMs to host OpenCloud services
+ sudo: no
+ script: scripts/create-vms.sh
+
+ - include: tasks/vm-ips.yml
+
+ - name: Add VMs to /etc/hosts
+ template: src=templates/etc/hosts.j2
+ dest=/etc/hosts
+ notify:
+ - Reload dnsmasq
+
+ - name: Set up /etc/ansible/hosts
+ template: src=templates/etc/ansible/hosts.j2
+ dest=/etc/ansible/hosts
+
+ - name: Copy ansible.cfg to disable host key checking
+ sudo: no
+ copy: src=files/ansible.cfg
+ dest={{ ansible_env['PWD'] }}/.ansible.cfg
+
+ - name: Touch ~/.ssh/config
+ sudo: no
+ file: path={{ ansible_env['PWD'] }}/.ssh/config state=touch
+
+ - name: Disable host key checking in SSH
+ sudo: no
+ lineinfile: dest={{ ansible_env['PWD'] }}/.ssh/config
+ line="StrictHostKeyChecking no"
+
+ - name: Test that we can log into every VM
+ sudo: no
+ shell: ansible services -m ping -u ubuntu
+
+ handlers:
+ - name: Reload dnsmasq
+ shell: killall -HUP dnsmasq
+
+# Play: prepare compute nodes for installation
+- hosts: compute
+ sudo: yes
+ vars:
+ control_net: "{{ hostvars['head']['ansible_virbr0']['ipv4']['network'] }}/24"
+ gateway: "{{ hostvars['head']['ansible_default_ipv4']['address'] }}"
+ tasks:
+ - name: Install package needed by Juju
+ apt: name=python-yaml state=present
+
+ - name: Add key
+ authorized_key: user="{{ ansible_env['SUDO_USER'] }}"
+ key="{{ hostvars['head']['sshkey']['stdout'] }}"
+
+ - name: Add route via /etc/rc.local
+ template: src=templates/etc/rc.local.cloudlab
+ dest=/etc/rc.local
+ mode=0755
+ when: cloudlab
+ notify:
+ - run /etc/rc.local
+
+ - name: Add route via /etc/rc.local
+ template: src=templates/etc/rc.local
+ dest=/etc/rc.local
+ mode=0755
+ when: not cloudlab
+ notify:
+ - run /etc/rc.local
+
+ - name: Touch ~/.ssh/config
+ file: path=/var/lib/nova state=directory
+
+ - name: (CloudLab) Set up extra disk space
+ shell: /usr/testbed/bin/mkextrafs -f /var/lib/nova
+ creates=/var/lib/nova/lost+found
+ when: cloudlab
+
+ handlers:
+ - name: run /etc/rc.local
+ shell: /etc/rc.local
+
+# Play: Use libvirt hooks to set up iptables
+- hosts: head
+ sudo: yes
+ tasks:
+ - name: Enable port forwarding for services
+ copy: src=files/{{ item }}
+ dest={{ item }}
+ mode=0755
+ notify:
+ - reload libvirt config
+ - run qemu hook
+ with_items:
+# - /etc/libvirt/hooks/daemon
+ - /etc/libvirt/hooks/qemu
+
+ handlers:
+ - name: reload libvirt config
+ shell: killall -HUP libvirtd
+
+ - name: run qemu hook
+ shell: /etc/libvirt/hooks/qemu start start
+
+# Play: Install services using Juju
+- hosts: head
+ vars:
+ charm_src: /usr/local/src/charms/trusty
+ tasks:
+ - name: Initialize Juju
+ sudo: no
+ shell: juju generate-config
+ creates={{ ansible_env['PWD'] }}/.juju/environments.yaml
+
+ - shell: uvt-kvm ip juju
+ register: juju_ip
+
+ - name: Juju config file
+ sudo: no
+ template: src=templates/environments.yaml.j2
+ dest={{ ansible_env['PWD'] }}/.juju/environments.yaml
+
+ - name: Bootstrap Juju
+ sudo: no
+ shell: juju bootstrap
+ creates={{ ansible_env['PWD'] }}/.juju/environments/manual.jenv
+
+ - name: Add virtual machines to Juju's control
+ script: scripts/juju-cord-setup.py
+
+ - name: Add compute nodes to Juju's control
+ shell: juju add-machine ssh:{{ item }}
+ with_items: "{{ groups['compute'] }}"
+
+ - name: Copy cord.yaml bundle
+ copy: src=cord.yaml dest={{ ansible_env['PWD'] }}/cord.yaml
+
+ - name: Deploy OpenStack services with Juju
+ shell: juju quickstart cord.yaml