| --- |
| - hosts: xos-1 |
| remote_user: ubuntu |
| tasks: |
| - name: Include configuration vars |
| include_vars: xos-setup-vars.yml |
| |
| - name: Install prerequisites |
| apt: |
| name={{ item }} |
| update_cache=yes |
| cache_valid_time=3600 |
| become: yes |
| with_items: |
| - git |
| - make |
| - curl |
| - python-novaclient |
| - python-neutronclient |
| - python-keystoneclient |
| - python-glanceclient |
| |
| - name: Check to see if xos_install/orchestration directory exists |
| local_action: stat path="{{ playbook_dir }}/xos_install/orchestration" |
| register: orchestration |
| |
| # Two methods to install: |
| # 1) If running from cord-in-a-box, then xos_install/orchestration will |
| # be populated with the checked-out xos repositories, and we can |
| # now copy them to the XOS VM. |
| # 2) If not running from cord-in-a-box, then xos_install will not |
| # exist, and we will check out the repos using git. |
| |
| - name: Copy repositories to the XOS VM |
| synchronize: |
| src: "{{ playbook_dir }}/xos_install/orchestration/" |
| dest: "{{ orchestration_dest }}" |
| when: |
| orchestration.stat.exists == True |
| |
| - name: Clone XOS repo |
| git: |
| repo={{ xos_repo_url }} |
| dest={{ xos_repo_dest }} |
| version={{ xos_repo_branch }} |
| force=yes |
| when: |
| orchestration.stat.exists == False |
| |
| - name: Clone service-profile repo |
| git: |
| repo={{ service_profile_repo_url }} |
| dest={{ service_profile_repo_dest }} |
| version={{ service_profile_repo_branch }} |
| force=yes |
| when: |
| orchestration.stat.exists == False |
| |
| - name: Copy over SSH keys |
| copy: |
| src=~/.ssh/{{ item }} |
| dest={{ service_profile_repo_dest }}/{{ xos_configuration }}/ |
| owner={{ ansible_user_id }} mode=0600 |
| with_items: |
| - id_rsa |
| - id_rsa.pub |
| |
| - name: copy over node_key |
| copy: |
| src={{ node_private_key }} |
| dest={{ service_profile_repo_dest }}/{{ xos_configuration }}/node_key |
| owner={{ ansible_user_id }} mode=0600 |
| |
| - name: Download Glance VM images |
| get_url: |
| url={{ item.url }} |
| checksum={{ item.checksum }} |
| dest={{ service_profile_repo_dest }}/{{ xos_configuration }}/images/{{ item.name }}.img |
| with_items: "{{ xos_images }}" |
| |
| - name: Check to see if registry is reachable |
| command: curl -sf http://docker-registry:5000/ |
| ignore_errors: yes |
| register: docker_registry_check |
| tags: |
| - skip_ansible_lint |
| |
| - name: Use registry if it is available |
| set_fact: |
| docker_registry: "{{ local_docker_registry }}" |
| docker_opts: "--insecure-registry {{ local_docker_registry }}" |
| docker_tag: "candidate" |
| when: docker_registry_check|succeeded |
| |
| - name: Set docker options |
| become: yes |
| template: src=docker.j2 dest=/etc/default/docker |
| register: set_docker_opts |
| |
| # Note this needs to be executed now, not as a handler, as the pull |
| # operations won't succeed without it. |
| - name: restart docker |
| become: yes |
| service: name=docker state=restarted |
| when: set_docker_opts.changed |
| |
| - name: Pull docker images for XOS |
| become: yes |
| command: docker pull {{ docker_registry }}/{{ item }}:{{ docker_tag }} |
| with_items: |
| - xosproject/xos-base |
| - xosproject/xos-postgres |
| - xosproject/cord-app-build |
| - redis |
| tags: |
| - skip_ansible_lint |
| |
| - name: Tag the images downloaded from the local registry |
| command: docker tag {{ docker_registry }}/{{ item }}:{{ docker_tag }} {{ item }}:latest |
| with_items: |
| - xosproject/xos-base |
| - xosproject/xos-postgres |
| - xosproject/cord-app-build |
| - redis |
| when: docker_registry_check|succeeded |
| |
| - name: Rebuild XOS containers |
| when: xos_container_rebuild |
| command: make {{ item }} |
| chdir="{{ xos_repo_dest }}/containers/xos/" |
| with_items: |
| - base |
| |
| |
| |