Merge pull request #2 from xarses/deployment
Building blocks of the deployment
This commit is contained in:
commit
3f4806d649
@ -1,21 +0,0 @@
|
||||
---
|
||||
|
||||
id: mariadb
|
||||
type: service
|
||||
version: v1
|
||||
handler: ansible
|
||||
resources:
|
||||
- id: mariadb_settings
|
||||
type: service
|
||||
handler: ansible
|
||||
run:
|
||||
- template: src=mariadb dest=mariadb.conf
|
||||
parameters:
|
||||
port: 8000
|
||||
host: localhost
|
||||
password: admin
|
||||
user: admin
|
||||
- ref: compose
|
||||
overwrite:
|
||||
item: maridb.yml
|
||||
endpoint: {{node.management.ip}}:4324
|
@ -1,86 +0,0 @@
|
||||
|
||||
First draft of fully functional specification for new deployment tool.
|
||||
By this specification it is proposed that new solution should be fully
|
||||
plugable right from the start.
|
||||
|
||||
Fuel should be splitted at least in several repositories.
|
||||
First one would fuel-api and will store only core api functionality
|
||||
of the new tool.
|
||||
|
||||
Second one should be named something like fuel-core
|
||||
(similarly to ansible-core-modules). This is what will be our verified
|
||||
tools to deploy openstack in a way we want to deploy it.
|
||||
|
||||
Inventory api
|
||||
==============
|
||||
|
||||
Do we want to reuse existing entities but in a new way? Or we need to
|
||||
reconsider them? I am sure that we can do better with networking,
|
||||
current solution just masks bad decisions that was done in past.
|
||||
|
||||
Orchestration api
|
||||
====================
|
||||
|
||||
Resources
|
||||
---------
|
||||
Each resource should define deployment logic in a known (to fuel) tool,
|
||||
and parameters that can be modified by user or another layer of inventory.
|
||||
|
||||
Services
|
||||
--------
|
||||
Single or several resources wrapped by additional data structure.
|
||||
The primary purpose of service is to provide loose coupling between
|
||||
roles and resources. And that can be achieved by using additional
|
||||
parameters like endpoints.
|
||||
|
||||
::
|
||||
endpoints: {{node.management.ip}}:5000
|
||||
|
||||
Installing fully functional service is not only a matter of running
|
||||
docker-compose, but as well we need to execute some additional
|
||||
tasks on the host system.
|
||||
|
||||
One more challenge - verify that service started to work
|
||||
(how and when it should be performed?)
|
||||
|
||||
Role
|
||||
-----
|
||||
Combination of services and resources.
|
||||
The main reason to introduce one - is to allow user an easy way
|
||||
to map nodes in the cluster to the functionality that is desired.
|
||||
|
||||
How to handle primary-{{role}} and {{role}} difference?
|
||||
|
||||
Profiles
|
||||
--------
|
||||
|
||||
Profile is the main entity that user will work with.
|
||||
|
||||
Several opinionated profile will be provided by us, and they should
|
||||
be valuable mainly because of our expertise in deploying openstack.
|
||||
|
||||
Each of this entity will have parameter that process provided data
|
||||
with plugable pythonic architecture
|
||||
|
||||
::
|
||||
# profile handler
|
||||
handler: ansible
|
||||
|
||||
::
|
||||
# network_schema will require some amount of modifications and transformations, that is easier to accomplish within python code
|
||||
handler: network_schema
|
||||
|
||||
|
||||
Modular architecture
|
||||
====================
|
||||
|
||||
Every piece in fuel-core will be developed in a modular style,
|
||||
and within that module - developer should be able to add/change
|
||||
entities like:
|
||||
- deployment logic (ansible or other deployment code)
|
||||
- fuel pythonic handlers or other interfaces for pythonic plugins
|
||||
- resources
|
||||
- profiles
|
||||
- services
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
|
||||
Core API
|
||||
==========
|
||||
|
||||
1. Register extensions
|
||||
|
60
spec/deployment_blocks.spec
Normal file
60
spec/deployment_blocks.spec
Normal file
@ -0,0 +1,60 @@
|
||||
|
||||
|
||||
Profile is a global wrapper for all resources in environment.
|
||||
Profile is versioned and executed by particular driver.
|
||||
Profile is a container for resources.
|
||||
Resources can be grouped by roles entities.
|
||||
|
||||
::
|
||||
|
||||
id: HA
|
||||
type: profile
|
||||
version: 0.1
|
||||
# adapter for any application that satisfies our requirements
|
||||
driver: ansible
|
||||
|
||||
|
||||
Role is a logical wrapper of resources.
|
||||
We will provide "opinionated" wrappers, but user should
|
||||
be able to compose resource in any way.
|
||||
|
||||
::
|
||||
|
||||
roles:
|
||||
- id: controller
|
||||
type: role
|
||||
resources: []
|
||||
|
||||
|
||||
Resource should have deployment logic for several events:
|
||||
main deployment, removal of resource, scale up of resource ?
|
||||
Resource should have list of input parameters that resource provides.
|
||||
Resources are isolated, and should be executable as long as
|
||||
required data provided.
|
||||
|
||||
::
|
||||
id: rabbitmq
|
||||
type: resource
|
||||
driver: ansible_playbook
|
||||
actions:
|
||||
run: $install_rabbitmq_playbook
|
||||
input:
|
||||
image: fuel/rabbitmq
|
||||
port: 5572
|
||||
# we need to be able to select ip addresses
|
||||
listen: [{{management.ip}}, {{public.ip}}]
|
||||
|
||||
|
||||
::
|
||||
id: nova_compute
|
||||
type: resource
|
||||
driver: ansible_playbook
|
||||
actions:
|
||||
run: $link_to_ansible_playbook
|
||||
remove: $link_to_another_playbook_that_will_migrate_vms
|
||||
maintenance: $link_to_playbook_that_will_put_into_maintenance
|
||||
input:
|
||||
image: fuel/compute
|
||||
driver: kvm
|
||||
rabbitmq_hosts: []
|
||||
|
@ -1,6 +0,0 @@
|
||||
|
||||
|
||||
Extensions
|
||||
============
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user