├── .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) |[](http://185.48.34.80/entercloudsuite/aurora-ui) |
19 | | Gateway | [https://github.com/entercloudsuite/aurora-gateway](https://github.com/entercloudsuite/aurora-gateway) |[](http://185.48.34.80/entercloudsuite/aurora-gateway) |
20 | | Manager | [https://github.com/entercloudsuite/aurora-manager](https://github.com/entercloudsuite/aurora-manager) |[](http://185.48.34.80/entercloudsuite/aurora-manager) |
21 | | Core | [https://github.com/entercloudsuite/aurora-core](https://github.com/entercloudsuite/aurora-core) |[](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 | [](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
--------------------------------------------------------------------------------