| |
| # Copyright 2017-present Open Networking Foundation |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| |
| --- |
| - hosts: {{ instance_name }} |
| gather_facts: False |
| connection: ssh |
| user: {{ username }} |
| become: yes |
| |
| vars: |
| container_name: {{ container_name }} |
| docker_image: {{ docker_image }} |
| network_method: {{ network_method }} |
| ports: |
| {% for port in ports %} |
| - device: {{ port.device }} |
| xos_network_id: {{ port.xos_network_id }} |
| mac: {{ port.mac|default("") }} |
| ip: {{ port.ip }} |
| snoop_instance_mac: {{ port.snoop_instance_mac }} |
| snoop_instance_id: {{ port.snoop_instance_id }} |
| parent_mac: {{ port.parent_mac|default("") }} |
| s_tag: {{ port.s_tag|default("") }} |
| c_tag: {{ port.c_tag|default("") }} |
| next_hop: {{ port.next_hop|default("") }} |
| bridge: {{ port.bridge }} |
| {% endfor %} |
| volumes: |
| {% for volume in volumes %} |
| - {{ volume }} |
| {% endfor %} |
| |
| tasks: |
| |
| # - name: Fix /etc/hosts |
| # lineinfile: |
| # dest=/etc/hosts |
| # regexp="127.0.0.1 localhost" |
| # line="127.0.0.1 localhost {{ instance_hostname }}" |
| |
| - name: Add repo key |
| apt_key: |
| keyserver=hkp://pgp.mit.edu:80 |
| id=58118E89F3A912897C070ADBF76221572C52609D |
| |
| - name: Install Docker repo |
| apt_repository: |
| repo="deb https://apt.dockerproject.org/repo ubuntu-trusty main" |
| state=present |
| |
| - name: Install Docker |
| apt: |
| name={{ '{{' }} item {{ '}}' }} |
| state=latest |
| update_cache=yes |
| with_items: |
| # XXX docker 1.10 is not working on cloudlab |
| # - docker-engine |
| - python-pip |
| - python-httplib2 |
| |
| - name: Install Docker 1.9.1 |
| apt: |
| name={{ '{{' }} item {{ '}}' }} |
| update_cache=yes |
| with_items: |
| - docker-engine=1.9.1-0~trusty |
| |
| # Something is installing a requests library that is incompative with pip, and |
| # will cause this recipe to fail next time it tries to run pip. Only the one |
| # in /usr/local/lib is bad. There's still a good one in /usr/lib |
| - name: check if bad requests library installed |
| stat: path=/usr/local/lib/python2.7/dist-packages/requests |
| register: bad_requests |
| |
| - name: remove bad request library |
| shell: mv /usr/local/lib/python2.7/dist-packages/requests /usr/local/lib/python2.7/dist-packages/requests-bad |
| when: bad_requests.stat.exists == True |
| |
| - name: Install docker-py |
| pip: |
| name=docker-py |
| state=latest |
| |
| - name: install Pipework |
| get_url: url=https://raw.githubusercontent.com/jpetazzo/pipework/master/pipework |
| dest=/usr/local/bin/pipework |
| mode=0755 |
| |
| # - name: Start Container |
| # docker: |
| # docker_api_version: "1.18" |
| # name: {{ container_name }} |
| # # was: reloaded |
| # state: running |
| # image: {{ docker_image }} |
| |
| - name: check if systemd is installed |
| stat: path=/usr/bin/systemctl |
| register: systemctl |
| |
| - name: container upstart |
| template: src=/opt/xos/synchronizers/openstack/templates/container.conf.j2 dest=/etc/init/container-{{ container_name }}.conf |
| |
| - name: container systemd |
| template: src=/opt/xos/synchronizers/openstack/templates/container.service.j2 dest=/lib/systemd/system/container-{{ container_name }}.service |
| |
| - name: container startup script |
| template: src=/opt/xos/synchronizers/openstack/templates/start-container.sh.j2 dest=/usr/local/sbin/start-container-{{ container_name }}.sh mode=0755 |
| |
| - name: container teardown script |
| template: src=/opt/xos/synchronizers/openstack/templates/stop-container.sh.j2 dest=/usr/local/sbin/stop-container-{{ container_name }}.sh mode=0755 |
| |
| - name: restart systemd |
| shell: systemctl daemon-reload |
| when: systemctl.stat.exists == True |
| |
| {% if ports %} |
| - name: make sure bridges are setup |
| shell: ifconfig {{ '{{' }} item.bridge {{ '}}' }} |
| with_items: "ports" |
| {% endif %} |
| |
| - name: Make sure container is running |
| service: name=container-{{ container_name }} state=started |
| |