| --- |
| - hosts: {{ instance_name }} |
| gather_facts: False |
| connection: ssh |
| user: {{ username }} |
| become: yes |
| vars: |
| appname: {{ appname }} |
| dependencies: {{ dependencies }} |
| {% if component_configs %} |
| component_configs: |
| {% for component_config in component_configs %} |
| - component: {{ component_config.component }} |
| config_params: {{ component_config.config_params }} |
| {% endfor %} |
| {% endif %} |
| {% if rest_configs %} |
| var_rest_configs: |
| {% for rest_config in rest_configs %} |
| - endpoint: {{ rest_config.endpoint }} |
| body: "{{ '{{' }} lookup('file', '{{ files_dir }}/{{ rest_config.fn }}') {{ '}}' }}" |
| {% endfor %} |
| {% endif %} |
| {% if early_rest_configs %} |
| var_early_rest_configs: |
| {% for early_rest_config in early_rest_configs %} |
| - endpoint: {{ early_rest_config.endpoint }} |
| body: "{{ '{{' }} lookup('file', '{{ files_dir }}/{{ early_rest_config.fn }}') {{ '}}' }}" |
| {% endfor %} |
| {% endif %} |
| |
| tasks: |
| |
| - name: Get Docker IP |
| script: /opt/xos/synchronizers/onos/scripts/dockerip.sh {{ ONOS_container }} |
| register: onosaddr |
| |
| - name: Wait for ONOS to come up |
| wait_for: |
| host={{ '{{' }} onosaddr.stdout {{ '}}' }} |
| port={{ '{{' }} item {{ '}}' }} |
| state=present |
| with_items: |
| - 8101 |
| - 8181 |
| - 9876 |
| |
| - name: Config file directory |
| file: |
| path=/home/ubuntu/{{ appname }}/ |
| state=directory |
| |
| {% if node_key_fn %} |
| - name: Copy over key |
| copy: |
| src={{ files_dir }}/{{ node_key_fn }} |
| dest=/home/ubuntu/node_key |
| |
| - name: Copy node key into container |
| shell: docker cp /home/ubuntu/node_key {{ ONOS_container }}:/root/node_key |
| {% endif %} |
| |
| {% if config_fns %} |
| - name: Copy over configuration files |
| copy: |
| src={{ files_dir }}/{{ '{{' }} item {{ '}}' }} |
| dest=/home/ubuntu/{{ appname }}/{{ '{{' }} item {{ '}}' }} |
| with_items: |
| {% for config_fn in config_fns %} |
| - {{ config_fn }} |
| {% endfor %} |
| |
| - name: Make sure config directory exists |
| shell: docker exec {{ ONOS_container }} mkdir -p /root/onos/config/ |
| sudo: yes |
| |
| - name: Copy config files into container |
| shell: docker cp {{ appname }}/{{ '{{' }} item {{ '}}' }} {{ ONOS_container }}:/root/onos/config/ |
| sudo: yes |
| with_items: |
| {% for config_fn in config_fns %} |
| - {{ config_fn }} |
| {% endfor %} |
| {% endif %} |
| |
| # Don't know how to check for this condition, just wait |
| - name: Wait for ONOS to install the apps |
| wait_for: timeout=15 |
| |
| {% if early_rest_configs %} |
| - name: Add ONOS early configuration values |
| uri: |
| url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/{{ '{{' }} item.endpoint {{ '}}' }} |
| body: "{{ '{{' }} item.body {{ '}}' }}" |
| body_format: json |
| method: POST |
| user: karaf |
| password: karaf |
| with_items: "var_early_rest_configs" |
| |
| # Don't know how to check for this condition, just wait |
| - name: Wait for ONOS to restart |
| wait_for: timeout=15 |
| {% endif %} |
| |
| {% if install_dependencies %} |
| - name: Install app file directory |
| file: |
| path=/home/ubuntu/{{ appname }}/apps/ |
| state=directory |
| |
| - name: Copy over app install files to ONOS host |
| copy: |
| src=/opt/xos/synchronizers/onos/{{ '{{' }} item {{ '}}' }} |
| dest=/home/ubuntu/{{ appname }}/apps/{{ '{{' }} item {{ '}}' }} |
| with_items: |
| {% for install_app in install_dependencies %} |
| - {{ install_app }} |
| {% endfor %} |
| |
| - name: POST onos-app install command |
| command: > |
| curl -XPOST -HContent-Type:application/octet-stream -u karaf:karaf --data-binary @/home/ubuntu/{{ appname }}/apps/{{ '{{' }} item {{ '}}' }} http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/applications |
| with_items: |
| {% for dependency in install_dependencies %} |
| - {{ dependency }} |
| {% endfor %} |
| {% endif %} |
| |
| {% if dependencies %} |
| - name: Add dependencies to ONOS |
| uri: |
| url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/applications/{{ '{{' }} item {{ '}}' }}/active |
| method: POST |
| user: karaf |
| password: karaf |
| with_items: |
| {% for dependency in dependencies %} |
| - {{ dependency }} |
| {% endfor %} |
| {% endif %} |
| |
| {% if component_configs %} |
| - name: Add ONOS component configuration values |
| command: > |
| curl -XPOST -HContent-Type:application/json -u karaf:karaf -d {{ '{{' }} item.config_params | to_json {{ '}}' }} http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/configuration/{{ |
| '{{' }} item.component {{ '}}' }} |
| with_items: "component_configs" |
| |
| # uri: |
| # url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/configuration/{{ '{{' }} item.component {{ '}}' }} #http://localhost:8181/onos/v1/configuration/ |
| # body: "{{ '{{' }} item.config_params | to_json {{ '}}' }}" |
| # body_format: json |
| # method: POST |
| # user: karaf |
| # password: karaf |
| # with_items: "component_configs" |
| {% endif %} |
| |
| {% if rest_configs %} |
| # Do this after services have been activated, or it will cause an exception. |
| # vOLT will re-read its net config; vbng may not. |
| - name: Add ONOS configuration values |
| uri: |
| url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/{{ '{{' }} item.endpoint {{ '}}' }} #http://localhost:8181/onos/v1/network/configuration/ |
| body: "{{ '{{' }} item.body {{ '}}' }}" |
| body_format: json |
| method: POST |
| user: karaf |
| password: karaf |
| with_items: "var_rest_configs" |
| {% endif %} |