├── .drone.yml ├── .drone.yml.sig ├── .gitignore ├── CHANGELOG.md ├── Dockerfile ├── Makefile ├── README.md ├── docker-compose.yml ├── infrastructure.png └── src ├── Makefile ├── clean.yml ├── molecule.yml ├── openrc.sh ├── playbook.yml ├── requirements.yml ├── roles ├── aurora │ ├── files │ │ └── stacks │ │ │ ├── docker-stack.aurora.core.yml │ │ │ ├── docker-stack.aurora.dep.yml │ │ │ ├── docker-stack.aurora.manager.yml │ │ │ └── docker-stack.aurora.yml │ ├── handlers │ │ └── main.yml │ └── tasks │ │ └── main.yml ├── clean │ └── tasks │ │ └── main.yml └── ecs │ └── tasks │ └── main.yml └── setup.yml /.drone.yml: -------------------------------------------------------------------------------- 1 | pipeline: 2 | 3 | publish: 4 | image: plugins/docker 5 | repo: ecsdevops/aurora 6 | username: ecsdevops 7 | password: ${DOCKER_PASSWORD} 8 | tags: 9 | - latest 10 | - ${DRONE_COMMIT_SHA} 11 | -------------------------------------------------------------------------------- /.drone.yml.sig: -------------------------------------------------------------------------------- 1 | eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CgogIHB1Ymxpc2g6CiAgICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgICByZXBvOiBlY3NkZXZvcHMvYXVyb3JhCiAgICAgIHVzZXJuYW1lOiBlY3NkZXZvcHMKICAgICAgcGFzc3dvcmQ6ICR7RE9DS0VSX1BBU1NXT1JEfQogICAgICB0YWdzOgogICAgICAgIC0gbGF0ZXN0CiAgICAgICAgLSAke0RST05FX0NPTU1JVF9TSEF9Cg.WEhGjjXu0ELWKbkjOMLZo7QEF_6OScluuEY6_8nZGfM -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .molecule 3 | *.retry 4 | .cache 5 | *.log 6 | .idea 7 | *.iml 8 | ansible-galaxy-* 9 | ansible-role-* 10 | *.pem 11 | /src/openrcdev.sh 12 | /src/aurorarc.sh 13 | /src/setup.retry -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 0.1.0 (2013-04-03) 2 | 3 | Initial public release 4 | 5 | Implement Keystone, Glance, Nova, Neutron integration in order to provide a working API/UI for the following features: 6 | - Login/Logout 7 | - List Images 8 | - List Servers 9 | - Show Server 10 | - Create/Delete Server 11 | - List Floating IPs 12 | - Add Floating IP 13 | - Start/Stop/Resume/Reboot Server 14 | - List Keypairs 15 | - Add Keypair 16 | - List Networks 17 | - Add Network/Subnet 18 | - Show Quotas 19 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | RUN apt-get update && apt-get install -y python python-pip libssl-dev libffi-dev rsync openssh-client zip curl jq python-openstackclient python-cinderclient tree git 4 | RUN pip install --upgrade pip && pip install ansible==2.2.1.0 molecule docker-py 5 | RUN pip install shade 6 | RUN apt-get clean && rm -rf /var/lib/apt/lists 7 | 8 | ENTRYPOINT ["/bin/bash"] -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | start: 3 | docker-compose run --rm aurora -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Aurora 2 | 3 | Aurora is an open source alternative to the OpenStack® Horizon dashboard, providing a modern customizable web user experience for IaaS and PaaS services. 4 | It’s currently being actively developed by [Cloudbase](http://www.cloudbase.it) and [Enter](http://www.entercloudsuite.com), looking for additional enterprise contributors and early adopter users. 5 | 6 | ## The Aurora Stack 7 | 8 | Aurora UI is a brand new dashboard with a focus on customization and extensibility. 9 | Aurora API provides a layer of abstraction between the UI and an OpenStack infrastructure. The API Gateway is the entry point for the UI. It forwards client calls based on information provided by the Service Manager and following dynamically created routes. 10 | The core service is the main plugin that provides the "plumbings" to an OpenStack Infrastructure. 11 | 12 | 13 | 14 | ## Components 15 | 16 | | Name | Reporitory Link | CI | 17 | | -- | -- | --| 18 | | Web UI | [https://github.com/entercloudsuite/aurora-ui](https://github.com/entercloudsuite/aurora-ui) |[![Gateway Build Status](http://185.48.34.80/api/badges/entercloudsuite/aurora-ui/status.svg)](http://185.48.34.80/entercloudsuite/aurora-ui) | 19 | | Gateway | [https://github.com/entercloudsuite/aurora-gateway](https://github.com/entercloudsuite/aurora-gateway) |[![Gateway Build Status](http://185.48.34.80/api/badges/entercloudsuite/aurora-gateway/status.svg)](http://185.48.34.80/entercloudsuite/aurora-gateway) | 20 | | Manager | [https://github.com/entercloudsuite/aurora-manager](https://github.com/entercloudsuite/aurora-manager) |[![Manager Build Status](http://185.48.34.80/api/badges/entercloudsuite/aurora-manager/status.svg)](http://185.48.34.80/entercloudsuite/aurora-manager) | 21 | | Core | [https://github.com/entercloudsuite/aurora-core](https://github.com/entercloudsuite/aurora-core) |[![Core Build Status](http://185.48.34.80/api/badges/entercloudsuite/aurora-core/status.svg)](http://185.48.34.80/entercloudsuite/aurora-core) | 22 | 23 | ## Build your own UI 24 | 25 | The aurora stack is built upon the microservices architecture. It is composed of three parts **backend** and one part **frontend**. 26 | If you don't like our UI, you can build your own with the language you want, with the tools you prefer and not care what's underneath the covers between you and Openstack: **it's all taken care of**. 27 | Documentation for the integration aurora-ui and aurora-gateway is not available yet. If you wish to have more information about these feature, please don't hesitate to contact us or create an [issue](https://github.com/entercloudsuite/aurora/issues). 28 | 29 | ## Try Aurora (the easy way) 30 | 31 | 32 | ### What do you need 33 | - **Docker® for Desktop** 34 | 35 | ### Running Aurora on Enter Cloud Suite 36 | 37 | If you are looking an easy way to setup the Aurora stack, consider to try [Enter Cloud Suite](http://www.entercloudsuite.com) for an hosted cluster installation. 38 | If you need help setting up the account visit the [Support Page](https://www.entercloudsuite.com/en/contact-us/) for more details. 39 | 40 | ### Infrastructure Quickstart 41 | **IMPORTANT:** for security and isolation reasons a new tenant or an empty region MUST be use in order to create the cluster 42 | 43 | 1. Clone the repo using your git client. 44 | 2. Edit the [ **openrc.sh** ](/src/openrc.sh) with your account information (found inside the src folder) 45 | 3. `make start`: run the tool in a local Docker container, from where you can use the following commands:(docker has to build the image from the Dockerfile and it may take a while) 46 | - `source openrc.sh` sets up the OpenStack client configurations (which was previously edited) 47 | - Verify that authentication is working properly by running an openstack command like: `openstack server list`. 48 | - `make create` starts the servers in your OpenStack project. 49 | - `make deploy` starts the deployment of a Docker Swarm cluster on the running servers and provision all the Aurora stack. 50 | 51 | Thanks to [Andrea Tosatto](https://github.com/atosatto) for his great [ansible role](https://galaxy.ansible.com/atosatto/docker-swarm/) which sets up the Docker stuff. 52 | 53 | ## Listing the services 54 | 55 | Use `make login host=ansible-dockerswarm-manager` to log in to the manager node of the Docker Swarm cluster. 56 | Inspect Docker Swarm to check all the services are running. 57 | The command `docker service ls` should show a set of services that look something like this: 58 | 59 | ``` 60 | ID NAME MODE REPLICAS IMAGE 61 | 3sm9wb2csuzg aurora_rabbit replicated 1/1 rabbitmq:3-alpine 62 | da4h3v6z93u4 aurora_manager replicated 1/1 ecsdevops/aurora-manager:latest 63 | ejcavvgrad25 aurora_ui replicated 1/1 ecsdevops/aurora-ui:latest 64 | gsesxl33mfkq aurora_api replicated 1/1 ecsdevops/aurora-gateway:latest 65 | i0t34uhhumm6 aurora_redis replicated 1/1 redis:alpine 66 | lvie1hkgqckq aurora_core replicated 1/1 ecsdevops/aurora-core:latest 67 | ``` 68 | 69 | ### Getting Started with Aurora 70 | 71 | **It's time to load the Aurora Dashboard!** 72 | 73 | Get the public IP address of one of your Docker Swarm nodes. 74 | Open it with your browser, setting the port to **9000**. You should see the login page of Aurora, where you can sign in with your Enter Cloud Suite credentials. 75 | If the browser can't load the login page, be patient: the docker-engine needs to download the images for all the services before starting them. It will only take a few minutes. 76 | 77 | ## How to cleanup after testing 78 | 1. if your exited the aurora container, just type `make start` as you did when creating the container the first time. 79 | 2. once inside the container, simply typing `make destroy` will delete the cluster and will stop paying for it 80 | 81 | ## Current UI Design 82 | [https://marvelapp.com/1fai4ah/screen/16826137](https://marvelapp.com/1fai4ah/screen/16826137) 83 | 84 | ## Slack Channel 85 | [https://aurora-devteam.slack.com](https://aurora-devteam.slack.com) 86 | 87 | ## Demo Video 88 | [![asciicast](https://asciinema.org/a/c4g9mn8lf3bs5qjg2g2r8bfms.png)](https://asciinema.org/a/c4g9mn8lf3bs5qjg2g2r8bfms) 89 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | aurora: 4 | # build: . 5 | # image: aurora 6 | image: ecsdevops/aurora:latest 7 | volumes: 8 | - ./src:/root/src 9 | working_dir: /root/src -------------------------------------------------------------------------------- /infrastructure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/entercloudsuite/aurora/9b23bb5999575d0aac89e1023365215a0fa16d38/infrastructure.png -------------------------------------------------------------------------------- /src/Makefile: -------------------------------------------------------------------------------- 1 | router := $(shell openstack router list -c Name -f value) 2 | deploy: converge 3 | openstack floating ip list 4 | 5 | create: 6 | ifeq (${router},) 7 | ansible-playbook setup.yml 8 | molecule create 9 | else 10 | @echo '********************************************************************' 11 | @echo '' 12 | @echo '***** YOU MUST USE AN EMPTY REGION TO CREATE AN AURORA CLUSTER *****' 13 | @echo '' 14 | @echo '********************************************************************' 15 | endif 16 | 17 | login: 18 | molecule login --host $(host) 19 | 20 | converge: 21 | molecule syntax 22 | molecule converge 23 | 24 | test: 25 | molecule verify 26 | 27 | galaxy-install: 28 | ansible-galaxy install -r requirements.yml -p roles 29 | 30 | destroy: 31 | molecule destroy 32 | ansible-playbook clean.yml -------------------------------------------------------------------------------- /src/clean.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Destroy configuration previously created 4 | hosts: 127.0.0.1 5 | roles: 6 | - clean -------------------------------------------------------------------------------- /src/molecule.yml: -------------------------------------------------------------------------------- 1 | --- 2 | ansible: 3 | playbook: playbook.yml 4 | host_key_checking: False 5 | raw_ssh_args: 6 | - -o UserKnownHostsFile=/dev/null 7 | - -o IdentitiesOnly=yes 8 | - -o ControlMaster=auto 9 | - -o ControlPersist=60s 10 | dependency: 11 | name: galaxy 12 | requirements_file: requirements.yml 13 | options: 14 | ignore-certs: True 15 | ignore-errors: True 16 | driver: 17 | name: openstack 18 | openstack: 19 | instances: 20 | - name: ansible-dockerswarm-manager 21 | image: 'GNU/Linux Ubuntu Server 16.04 Xenial Xerus x64' 22 | flavor: e3standard.x3 23 | sshuser: ubuntu 24 | security_groups: AuroraSecurity 25 | ssh_timeout: 240 26 | ansible_groups: 27 | - docker_engine 28 | - docker_swarm_manager 29 | - name: ansible-dockerswarm-worker 30 | image: 'GNU/Linux Ubuntu Server 16.04 Xenial Xerus x64' 31 | flavor: e3standard.x3 32 | sshuser: ubuntu 33 | security_groups: AuroraSecurity 34 | ssh_timeout: 240 35 | ansible_groups: 36 | - docker_engine 37 | - docker_swarm_worker -------------------------------------------------------------------------------- /src/openrc.sh: -------------------------------------------------------------------------------- 1 | export OS_REGION_NAME="de-fra1" # available: "nl-ams1" - "de-fra1" - "it-mil1" 2 | export OS_AUTH_URL="https://api.${OS_REGION_NAME}.entercloudsuite.com/v2.0" 3 | export OS_TENANT_NAME="" 4 | export OS_PASSWORD="" 5 | export OS_USERNAME="${OS_TENANT_NAME}" 6 | -------------------------------------------------------------------------------- /src/playbook.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - hosts: all 4 | gather_facts: False 5 | tasks: 6 | - name: install python 2 7 | raw: test -e /usr/bin/python || ( apt update -y && apt install python-minimal -y ) 8 | 9 | - name: Installation and setup of Docker Swarm Cluster 10 | hosts: docker_engine 11 | roles: 12 | - { role: atosatto.docker-swarm } 13 | 14 | - name: Setup aurora inside manager 15 | hosts: ansible-dockerswarm-manager 16 | roles: 17 | - { role: aurora } 18 | 19 | -------------------------------------------------------------------------------- /src/requirements.yml: -------------------------------------------------------------------------------- 1 | 2 | # from galaxy 3 | - src: atosatto.docker-swarm 4 | -------------------------------------------------------------------------------- /src/roles/aurora/files/stacks/docker-stack.aurora.core.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | core: 5 | image: ecsdevops/aurora-core:latest 6 | ports: 7 | - "3002:3002" 8 | networks: 9 | - frontend 10 | depends_on: 11 | - manager 12 | deploy: 13 | restart_policy: 14 | condition: any 15 | delay: 5s 16 | max_attempts: 3 17 | window: 120s 18 | 19 | networks: 20 | frontend: -------------------------------------------------------------------------------- /src/roles/aurora/files/stacks/docker-stack.aurora.dep.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | redis: 5 | image: redis:alpine 6 | ports: 7 | - "6379" 8 | networks: 9 | - frontend 10 | deploy: 11 | restart_policy: 12 | condition: on-failure 13 | delay: 5s 14 | max_attempts: 3 15 | window: 120s 16 | rabbit: 17 | image: rabbitmq:3-alpine 18 | ports: 19 | - "5672" 20 | networks: 21 | - frontend 22 | deploy: 23 | placement: 24 | constraints: [node.role == manager] 25 | restart_policy: 26 | condition: on-failure 27 | delay: 5s 28 | max_attempts: 3 29 | window: 120s 30 | 31 | networks: 32 | frontend: -------------------------------------------------------------------------------- /src/roles/aurora/files/stacks/docker-stack.aurora.manager.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | manager: 5 | image: ecsdevops/aurora-manager:latest 6 | ports: 7 | - "3001:3001" 8 | networks: 9 | - frontend 10 | depends_on: 11 | - api 12 | deploy: 13 | restart_policy: 14 | condition: any 15 | delay: 5s 16 | max_attempts: 3 17 | window: 120s 18 | 19 | networks: 20 | frontend: -------------------------------------------------------------------------------- /src/roles/aurora/files/stacks/docker-stack.aurora.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | ui: 5 | image: ecsdevops/aurora-ui:latest 6 | ports: 7 | - "9000:9000" 8 | networks: 9 | - frontend 10 | deploy: 11 | restart_policy: 12 | condition: any 13 | delay: 5s 14 | max_attempts: 3 15 | window: 120s 16 | api: 17 | image: ecsdevops/aurora-gateway:latest 18 | ports: 19 | - "3000:3000" 20 | networks: 21 | - frontend 22 | deploy: 23 | replicas: 1 24 | restart_policy: 25 | condition: any 26 | delay: 5s 27 | max_attempts: 3 28 | window: 120s 29 | 30 | networks: 31 | frontend: -------------------------------------------------------------------------------- /src/roles/aurora/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # module to activate the aurora stack from the compose file we transfered to the manager 3 | 4 | - name: docker1 5 | shell: docker stack deploy -c /root/stacks/docker-stack.aurora.dep.yml aurora 6 | become: true 7 | 8 | - name: docker2 9 | shell: sleep 10 && docker stack deploy -c /root/stacks/docker-stack.aurora.yml aurora 10 | become: true 11 | 12 | - name: docker3 13 | shell: sleep 20 && docker stack deploy -c /root/stacks/docker-stack.aurora.manager.yml aurora 14 | become: true 15 | 16 | - name: docker4 17 | shell: sleep 30 && docker stack deploy -c /root/stacks/docker-stack.aurora.core.yml aurora 18 | become: true -------------------------------------------------------------------------------- /src/roles/aurora/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # task 3 | 4 | - name: copy files inside manager 5 | copy: src=stacks dest=/root 6 | notify: 7 | - docker1 8 | - docker2 9 | - docker3 10 | - docker4 -------------------------------------------------------------------------------- /src/roles/clean/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Remove the security group 4 | os_security_group: 5 | name: "DemoSecGrp" 6 | state: absent 7 | 8 | - name: Remove the router 9 | os_router: 10 | name: "DemoRouter" 11 | state: absent 12 | 13 | - name: Remove the subnet 14 | os_subnet: 15 | name: "DemoSubnet" 16 | state: absent 17 | 18 | - name: Remove the network 19 | os_network: 20 | name: "DemoNetwork" 21 | state: absent -------------------------------------------------------------------------------- /src/roles/ecs/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Create the network 4 | os_network: 5 | name: "AuroraNetwork" 6 | state: present 7 | register: aurora_network 8 | 9 | - name: Create the subnet 10 | os_subnet: 11 | name: "AuroraSubnet" 12 | network_name: "{{ aurora_network.network.name }}" 13 | cidr: "192.168.70.0/24" 14 | dns_nameservers: 15 | - 8.8.8.8 16 | - 8.8.4.4 17 | state: present 18 | 19 | - name: Create the router 20 | os_router: 21 | name: "Aurora Router" 22 | network: "PublicNetwork" 23 | interfaces: [ "AuroraSubnet" ] 24 | state: present 25 | 26 | - name: Create the security group 27 | os_security_group: 28 | name: "AuroraSecurity" 29 | description: "The Aurora security group" 30 | state: present 31 | 32 | - name: Allow all TCP ports 33 | os_security_group_rule: 34 | security_group: "AuroraSecurity" 35 | protocol: tcp 36 | port_range_min: 1 37 | port_range_max: 65535 38 | remote_ip_prefix: 0.0.0.0/0 39 | 40 | - name: Allow all UPD ports 41 | os_security_group_rule: 42 | security_group: "AuroraSecurity" 43 | protocol: udp 44 | port_range_min: 1 45 | port_range_max: 65535 46 | remote_ip_prefix: 0.0.0.0/0 -------------------------------------------------------------------------------- /src/setup.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Create Networking on an empty ECS region 4 | hosts: 127.0.0.1 5 | roles: 6 | - ecs --------------------------------------------------------------------------------