Add support for ansible: openstack-juno
Change-Id: I41fc56862073af6f925248244870b32c8cd2c8e8
This commit is contained in:
parent
3e9c75ff81
commit
b599f60020
@ -58,6 +58,15 @@ class CobblerInstaller(object):
|
|||||||
logging.exception(error)
|
logging.exception(error)
|
||||||
|
|
||||||
|
|
||||||
|
class AnsibleInstaller(object):
|
||||||
|
|
||||||
|
def __init__(self, settings):
|
||||||
|
return
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ChefInstaller(object):
|
class ChefInstaller(object):
|
||||||
DATABAGS = "databags"
|
DATABAGS = "databags"
|
||||||
CHEFSERVER_URL = "chef_url"
|
CHEFSERVER_URL = "chef_url"
|
||||||
@ -136,7 +145,8 @@ OS_INSTALLERS = {
|
|||||||
'cobbler': CobblerInstaller
|
'cobbler': CobblerInstaller
|
||||||
}
|
}
|
||||||
PK_INSTALLERS = {
|
PK_INSTALLERS = {
|
||||||
'chef_installer': ChefInstaller
|
'chef_installer': ChefInstaller,
|
||||||
|
'ansible_installer': AnsibleInstaller
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,3 +55,14 @@ class PackageInstallerCheck(base.BaseCheck):
|
|||||||
self._set_status(0, message)
|
self._set_status(0, message)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def ansible_check(self):
|
||||||
|
"""Placeholder for ansible check."""
|
||||||
|
print "Checking ansible......"
|
||||||
|
print ("[Done]")
|
||||||
|
self.code == 1
|
||||||
|
self.messages.append(
|
||||||
|
"[%s]Info: Package installer health check "
|
||||||
|
"has completed. No problems found, all systems "
|
||||||
|
"go." % self.NAME)
|
||||||
|
return (self.code, self.messages)
|
||||||
|
189
compass/actions/install_callback.py
Normal file
189
compass/actions/install_callback.py
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
# Copyright 2014 Huawei Technologies Co. Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
"""Module to reinstall a given cluster
|
||||||
|
|
||||||
|
.. moduleauthor:: Xiaodong Wang <xiaodongwang@huawei.com>
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from compass.actions import util
|
||||||
|
from compass.db.api import cluster as cluster_api
|
||||||
|
from compass.db.api import host as host_api
|
||||||
|
from compass.db.api import user as user_db
|
||||||
|
from compass.deployment.deploy_manager import DeployManager
|
||||||
|
from compass.deployment.utils import constants as const
|
||||||
|
|
||||||
|
|
||||||
|
def os_installed(
|
||||||
|
host_id, clusterhosts_ready, clusters_os_ready,
|
||||||
|
username=None
|
||||||
|
):
|
||||||
|
"""Callback when os is installed.
|
||||||
|
|
||||||
|
:param host_id: host that os is installed.
|
||||||
|
:type host_id: integer
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The function should be called out of database session.
|
||||||
|
"""
|
||||||
|
with util.lock('serialized_action') as lock:
|
||||||
|
if not lock:
|
||||||
|
raise Exception(
|
||||||
|
'failed to acquire lock to '
|
||||||
|
'do the post action after os installation'
|
||||||
|
)
|
||||||
|
logging.info(
|
||||||
|
'os installed on host %s '
|
||||||
|
'with cluster host ready %s cluster os ready %s',
|
||||||
|
host_id, clusterhosts_ready, clusters_os_ready
|
||||||
|
)
|
||||||
|
if username:
|
||||||
|
user = user_db.get_user_object(username)
|
||||||
|
else:
|
||||||
|
user = None
|
||||||
|
os_installed_triggered = False
|
||||||
|
for cluster_id, clusterhost_ready in clusterhosts_ready.items():
|
||||||
|
if not clusterhost_ready and os_installed_triggered:
|
||||||
|
continue
|
||||||
|
|
||||||
|
cluster_info = util.ActionHelper.get_cluster_info(
|
||||||
|
cluster_id, user)
|
||||||
|
adapter_id = cluster_info[const.ADAPTER_ID]
|
||||||
|
|
||||||
|
adapter_info = util.ActionHelper.get_adapter_info(
|
||||||
|
adapter_id, cluster_id, user)
|
||||||
|
hosts_info = util.ActionHelper.get_hosts_info(
|
||||||
|
cluster_id, [host_id], user)
|
||||||
|
|
||||||
|
deploy_manager = DeployManager(
|
||||||
|
adapter_info, cluster_info, hosts_info)
|
||||||
|
if not os_installed_triggered:
|
||||||
|
deploy_manager.os_installed()
|
||||||
|
util.ActionHelper.host_ready(host_id, True, user)
|
||||||
|
os_installed_triggered = True
|
||||||
|
|
||||||
|
if clusterhost_ready:
|
||||||
|
deploy_manager.cluster_os_installed()
|
||||||
|
util.ActionHelper.cluster_host_ready(
|
||||||
|
cluster_id, host_id, False, user
|
||||||
|
)
|
||||||
|
|
||||||
|
for cluster_id, cluster_os_ready in clusters_os_ready.items():
|
||||||
|
if not cluster_os_ready and os_installed_triggered:
|
||||||
|
continue
|
||||||
|
|
||||||
|
cluster_info = util.ActionHelper.get_cluster_info(
|
||||||
|
cluster_id, user)
|
||||||
|
adapter_id = cluster_info[const.ADAPTER_ID]
|
||||||
|
|
||||||
|
adapter_info = util.ActionHelper.get_adapter_info(
|
||||||
|
adapter_id, cluster_id, user)
|
||||||
|
hosts_info = util.ActionHelper.get_hosts_info(
|
||||||
|
cluster_id, [host_id], user)
|
||||||
|
|
||||||
|
deploy_manager = DeployManager(
|
||||||
|
adapter_info, cluster_info, hosts_info)
|
||||||
|
if not os_installed_triggered:
|
||||||
|
deploy_manager.os_installed()
|
||||||
|
util.ActionHelper.host_ready(host_id, True, user)
|
||||||
|
os_installed_triggered = True
|
||||||
|
|
||||||
|
if cluster_os_ready:
|
||||||
|
deploy_manager.cluster_os_installed()
|
||||||
|
|
||||||
|
|
||||||
|
def package_installed(
|
||||||
|
cluster_id, host_id, cluster_ready,
|
||||||
|
host_ready, username=None
|
||||||
|
):
|
||||||
|
"""Callback when package is installed.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The function should be called out of database session.
|
||||||
|
"""
|
||||||
|
with util.lock('serialized_action') as lock:
|
||||||
|
if not lock:
|
||||||
|
raise Exception(
|
||||||
|
'failed to acquire lock to '
|
||||||
|
'do the post action after package installation'
|
||||||
|
)
|
||||||
|
logging.info(
|
||||||
|
'package installed on cluster %s host %s '
|
||||||
|
'with cluster ready %s host ready %s',
|
||||||
|
cluster_id, host_id, cluster_ready, host_ready
|
||||||
|
)
|
||||||
|
|
||||||
|
if username:
|
||||||
|
user = user_db.get_user_object(username)
|
||||||
|
else:
|
||||||
|
user = None
|
||||||
|
cluster_info = util.ActionHelper.get_cluster_info(cluster_id, user)
|
||||||
|
adapter_id = cluster_info[const.ADAPTER_ID]
|
||||||
|
|
||||||
|
adapter_info = util.ActionHelper.get_adapter_info(
|
||||||
|
adapter_id, cluster_id, user)
|
||||||
|
hosts_info = util.ActionHelper.get_hosts_info(
|
||||||
|
cluster_id, [host_id], user)
|
||||||
|
|
||||||
|
deploy_manager = DeployManager(adapter_info, cluster_info, hosts_info)
|
||||||
|
|
||||||
|
deploy_manager.package_installed()
|
||||||
|
util.ActionHelper.cluster_host_ready(cluster_id, host_id, True, user)
|
||||||
|
if cluster_ready:
|
||||||
|
util.ActionHelper.cluster_ready(cluster_id, False, user)
|
||||||
|
if host_ready:
|
||||||
|
util.ActionHelper.host_ready(host_id, False, user)
|
||||||
|
|
||||||
|
|
||||||
|
def cluster_installed(
|
||||||
|
cluster_id, clusterhosts_ready,
|
||||||
|
username=None
|
||||||
|
):
|
||||||
|
"""Callback when cluster is installed.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The function should be called out of database session.
|
||||||
|
"""
|
||||||
|
with util.lock('serialized_action') as lock:
|
||||||
|
if not lock:
|
||||||
|
raise Exception(
|
||||||
|
'failed to acquire lock to '
|
||||||
|
'do the post action after cluster installation'
|
||||||
|
)
|
||||||
|
logging.info(
|
||||||
|
'package installed on cluster %s with clusterhosts ready %s',
|
||||||
|
cluster_id, clusterhosts_ready
|
||||||
|
)
|
||||||
|
if username:
|
||||||
|
user = user_db.get_user_object(username)
|
||||||
|
else:
|
||||||
|
user = None
|
||||||
|
cluster_info = util.ActionHelper.get_cluster_info(cluster_id, user)
|
||||||
|
adapter_id = cluster_info[const.ADAPTER_ID]
|
||||||
|
|
||||||
|
adapter_info = util.ActionHelper.get_adapter_info(
|
||||||
|
adapter_id, cluster_id, user)
|
||||||
|
hosts_info = util.ActionHelper.get_hosts_info(
|
||||||
|
cluster_id, clusterhosts_ready.keys(), user)
|
||||||
|
|
||||||
|
deploy_manager = DeployManager(adapter_info, cluster_info, hosts_info)
|
||||||
|
|
||||||
|
deploy_manager.cluster_installed()
|
||||||
|
util.ActionHelper.cluster_ready(cluster_id, True, user)
|
||||||
|
for host_id, clusterhost_ready in clusterhosts_ready.items():
|
||||||
|
if clusterhost_ready:
|
||||||
|
util.ActionHelper.cluster_host_ready(
|
||||||
|
cluster_id, host_id, False, user
|
||||||
|
)
|
@ -280,6 +280,29 @@ class ActionHelper(object):
|
|||||||
host_id, True, True, user=user
|
host_id, True, True, user=user
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def host_ready(host_id, from_database_only, user):
|
||||||
|
host_db.update_host_state_internal(
|
||||||
|
host_id, from_database_only=from_database_only,
|
||||||
|
user=user, ready=True
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def cluster_host_ready(
|
||||||
|
cluster_id, host_id, from_database_only, user
|
||||||
|
):
|
||||||
|
cluster_db.update_cluster_host_state_internal(
|
||||||
|
cluster_id, host_id, from_database_only=from_database_only,
|
||||||
|
user=user, ready=True
|
||||||
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def cluster_ready(cluster_id, from_database_only, user):
|
||||||
|
cluster_db.update_cluster_state_internal(
|
||||||
|
cluster_id, from_database_only=from_database_only,
|
||||||
|
user=user, ready=True
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_machine_IPMI(machine_id, user):
|
def get_machine_IPMI(machine_id, user):
|
||||||
machine_info = machine_db.get_machine(user, machine_id)
|
machine_info = machine_db.get_machine(user, machine_id)
|
||||||
|
@ -2009,7 +2009,7 @@ def show_clusterhost_state(clusterhost_id):
|
|||||||
|
|
||||||
@app.route(
|
@app.route(
|
||||||
"/clusters/<int:cluster_id>/hosts/<int:host_id>/state",
|
"/clusters/<int:cluster_id>/hosts/<int:host_id>/state",
|
||||||
methods=['PUT']
|
methods=['PUT', 'POST']
|
||||||
)
|
)
|
||||||
@log_user_action
|
@log_user_action
|
||||||
@login_required
|
@login_required
|
||||||
@ -2025,7 +2025,25 @@ def update_cluster_host_state(cluster_id, host_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/clusterhosts/<int:clusterhost_id>/state", methods=['PUT'])
|
@app.route(
|
||||||
|
"/clusters/<clustername>/hosts/<hostname>/state_internal",
|
||||||
|
methods=['PUT', 'POST']
|
||||||
|
)
|
||||||
|
def update_cluster_host_state_internal(clustername, hostname):
|
||||||
|
"""update clusterhost state."""
|
||||||
|
data = _get_request_data()
|
||||||
|
return utils.make_json_response(
|
||||||
|
200,
|
||||||
|
cluster_api.update_clusterhost_state_internal(
|
||||||
|
clustername, hostname, **data
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route(
|
||||||
|
"/clusterhosts/<int:clusterhost_id>/state",
|
||||||
|
methods=['PUT', 'POST']
|
||||||
|
)
|
||||||
@log_user_action
|
@log_user_action
|
||||||
@login_required
|
@login_required
|
||||||
@update_user_token
|
@update_user_token
|
||||||
@ -2040,6 +2058,21 @@ def update_clusterhost_state(clusterhost_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route(
|
||||||
|
"/clusterhosts/<clusterhost_name>/state_internal",
|
||||||
|
methods=['PUT', 'POST']
|
||||||
|
)
|
||||||
|
def update_clusterhost_state_internal(clusterhost_name):
|
||||||
|
"""update clusterhost state."""
|
||||||
|
data = _get_request_data()
|
||||||
|
return utils.make_json_response(
|
||||||
|
200,
|
||||||
|
cluster_api.update_clusterhost_state_internal(
|
||||||
|
clusterhost_name, **data
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/hosts", methods=['GET'])
|
@app.route("/hosts", methods=['GET'])
|
||||||
@log_user_action
|
@log_user_action
|
||||||
@login_required
|
@login_required
|
||||||
@ -2399,7 +2432,7 @@ def show_host_state(host_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/hosts/<int:host_id>/state", methods=['PUT'])
|
@app.route("/hosts/<int:host_id>/state", methods=['PUT', 'POST'])
|
||||||
@log_user_action
|
@log_user_action
|
||||||
@login_required
|
@login_required
|
||||||
@update_user_token
|
@update_user_token
|
||||||
@ -2414,6 +2447,18 @@ def update_host_state(host_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/hosts/<hostname>/state_internal", methods=['PUT', 'POST'])
|
||||||
|
def update_host_state_internal(hostname):
|
||||||
|
"""update host state."""
|
||||||
|
data = _get_request_data()
|
||||||
|
return utils.make_json_response(
|
||||||
|
200,
|
||||||
|
host_api.update_host_state_internal(
|
||||||
|
hostname, **data
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _poweron_host(*args, **kwargs):
|
def _poweron_host(*args, **kwargs):
|
||||||
return utils.make_json_response(
|
return utils.make_json_response(
|
||||||
202,
|
202,
|
||||||
|
@ -85,12 +85,12 @@ RESP_CLUSTERHOST_DEPLOYED_CONFIG_FIELDS = [
|
|||||||
]
|
]
|
||||||
RESP_STATE_FIELDS = [
|
RESP_STATE_FIELDS = [
|
||||||
'id', 'state', 'percentage', 'message', 'severity',
|
'id', 'state', 'percentage', 'message', 'severity',
|
||||||
'status',
|
'status', 'ready',
|
||||||
'created_at', 'updated_at'
|
'created_at', 'updated_at'
|
||||||
]
|
]
|
||||||
RESP_CLUSTERHOST_STATE_FIELDS = [
|
RESP_CLUSTERHOST_STATE_FIELDS = [
|
||||||
'id', 'state', 'percentage', 'message', 'severity',
|
'id', 'state', 'percentage', 'message', 'severity',
|
||||||
'created_at', 'updated_at'
|
'ready', 'created_at', 'updated_at'
|
||||||
]
|
]
|
||||||
RESP_REVIEW_FIELDS = [
|
RESP_REVIEW_FIELDS = [
|
||||||
'cluster', 'hosts'
|
'cluster', 'hosts'
|
||||||
@ -130,9 +130,11 @@ UPDATED_CLUSTERHOST_DEPLOYED_CONFIG_FIELDS = [
|
|||||||
UPDATED_CLUSTERHOST_STATE_FIELDS = [
|
UPDATED_CLUSTERHOST_STATE_FIELDS = [
|
||||||
'state', 'percentage', 'message', 'severity'
|
'state', 'percentage', 'message', 'severity'
|
||||||
]
|
]
|
||||||
UPDATED_CLUSTER_STATE_FIELDS = [
|
UPDATED_CLUSTERHOST_STATE_INTERNAL_FIELDS = [
|
||||||
'state'
|
'ready'
|
||||||
]
|
]
|
||||||
|
UPDATED_CLUSTER_STATE_FIELDS = ['state']
|
||||||
|
UPDATED_CLUSTER_STATE_INTERNAL_FIELDS = ['ready']
|
||||||
RESP_CLUSTERHOST_LOG_FIELDS = [
|
RESP_CLUSTERHOST_LOG_FIELDS = [
|
||||||
'clusterhost_id', 'id', 'host_id', 'cluster_id',
|
'clusterhost_id', 'id', 'host_id', 'cluster_id',
|
||||||
'filename', 'position', 'partial_line',
|
'filename', 'position', 'partial_line',
|
||||||
@ -1400,6 +1402,8 @@ def update_cluster_hosts(
|
|||||||
session, models.ClusterHost, cluster_id=cluster.id
|
session, models.ClusterHost, cluster_id=cluster.id
|
||||||
)
|
)
|
||||||
logging.info('updated clusterhosts: %s', clusterhosts)
|
logging.info('updated clusterhosts: %s', clusterhosts)
|
||||||
|
for clusterhost in clusterhosts:
|
||||||
|
logging.info('clusterhost state: %s', clusterhost.state)
|
||||||
return {
|
return {
|
||||||
'hosts': clusterhosts
|
'hosts': clusterhosts
|
||||||
}
|
}
|
||||||
@ -1722,6 +1726,90 @@ def update_cluster_host_state(
|
|||||||
return clusterhost.state_dict()
|
return clusterhost.state_dict()
|
||||||
|
|
||||||
|
|
||||||
|
@utils.supported_filters(
|
||||||
|
optional_support_keys=UPDATED_CLUSTERHOST_STATE_INTERNAL_FIELDS,
|
||||||
|
ignore_support_keys=IGNORE_FIELDS
|
||||||
|
)
|
||||||
|
@database.run_in_session()
|
||||||
|
@user_api.check_user_permission_in_session(
|
||||||
|
permission.PERMISSION_UPDATE_CLUSTERHOST_STATE
|
||||||
|
)
|
||||||
|
@utils.wrap_to_dict(['status', 'clusterhost'])
|
||||||
|
def update_cluster_host_state_internal(
|
||||||
|
clustername, hostname, from_database_only=False,
|
||||||
|
user=None, session=None, **kwargs
|
||||||
|
):
|
||||||
|
"""Update a clusterhost state."""
|
||||||
|
if isinstance(clustername, (int, long)):
|
||||||
|
cluster = utils.get_db_object(
|
||||||
|
session, models.Cluster, id=clustername
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
cluster = utils.get_db_object(
|
||||||
|
session, models.Cluster, name=clustername
|
||||||
|
)
|
||||||
|
if isinstance(hostname, (int, long)):
|
||||||
|
host = utils.get_db_object(
|
||||||
|
session, models.Host, id=hostname
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
host = utils.get_db_object(
|
||||||
|
session, models.Host, name=hostname
|
||||||
|
)
|
||||||
|
clusterhost = utils.get_db_object(
|
||||||
|
session, models.ClusterHost,
|
||||||
|
cluster_id=cluster.id, host_id=host.id
|
||||||
|
)
|
||||||
|
if 'ready' in kwargs and kwargs['ready'] and not clusterhost.state.ready:
|
||||||
|
ready_triggered = True
|
||||||
|
else:
|
||||||
|
ready_triggered = False
|
||||||
|
cluster_ready = False
|
||||||
|
host_ready = not host.state.ready
|
||||||
|
if ready_triggered:
|
||||||
|
cluster_ready = True
|
||||||
|
for clusterhost_in_cluster in cluster.clusterhosts:
|
||||||
|
if (
|
||||||
|
clusterhost_in_cluster.clusterhost_id
|
||||||
|
==
|
||||||
|
clusterhost.clusterhost_id
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
if not clusterhost_in_cluster.state.ready:
|
||||||
|
cluster_ready = False
|
||||||
|
|
||||||
|
logging.info(
|
||||||
|
'cluster %s host %s ready: %s',
|
||||||
|
clustername, hostname, ready_triggered
|
||||||
|
)
|
||||||
|
logging.info('cluster ready: %s', cluster_ready)
|
||||||
|
logging.info('host ready: %s', host_ready)
|
||||||
|
if not ready_triggered or from_database_only:
|
||||||
|
logging.info('%s state is set to %s', clusterhost.name, kwargs)
|
||||||
|
utils.update_db_object(session, clusterhost.state, **kwargs)
|
||||||
|
if not clusterhost.state.ready:
|
||||||
|
logging.info('%s state ready is set to False', cluster.name)
|
||||||
|
utils.update_db_object(session, cluster.state, ready=False)
|
||||||
|
status = '%s state is updated' % clusterhost.name
|
||||||
|
else:
|
||||||
|
from compass.tasks import client as celery_client
|
||||||
|
celery_client.celery.send_task(
|
||||||
|
'compass.tasks.package_installed',
|
||||||
|
(
|
||||||
|
clusterhost.cluster_id, clusterhost.host_id,
|
||||||
|
cluster_ready, host_ready
|
||||||
|
)
|
||||||
|
)
|
||||||
|
status = '%s: cluster ready %s host ready %s' % (
|
||||||
|
clusterhost.name, cluster_ready, host_ready
|
||||||
|
)
|
||||||
|
logging.info('action status: %s', status)
|
||||||
|
return {
|
||||||
|
'status': status,
|
||||||
|
'clusterhost': clusterhost.state_dict()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@utils.supported_filters(
|
@utils.supported_filters(
|
||||||
optional_support_keys=UPDATED_CLUSTERHOST_STATE_FIELDS,
|
optional_support_keys=UPDATED_CLUSTERHOST_STATE_FIELDS,
|
||||||
ignore_support_keys=IGNORE_FIELDS
|
ignore_support_keys=IGNORE_FIELDS
|
||||||
@ -1743,6 +1831,89 @@ def update_clusterhost_state(
|
|||||||
return clusterhost.state_dict()
|
return clusterhost.state_dict()
|
||||||
|
|
||||||
|
|
||||||
|
@utils.supported_filters(
|
||||||
|
optional_support_keys=UPDATED_CLUSTERHOST_STATE_INTERNAL_FIELDS,
|
||||||
|
ignore_support_keys=IGNORE_FIELDS
|
||||||
|
)
|
||||||
|
@database.run_in_session()
|
||||||
|
@user_api.check_user_permission_in_session(
|
||||||
|
permission.PERMISSION_UPDATE_CLUSTERHOST_STATE
|
||||||
|
)
|
||||||
|
@utils.wrap_to_dict(['status', 'clusterhost'])
|
||||||
|
def update_clusterhost_state_internal(
|
||||||
|
clusterhost_name, from_database_only=False,
|
||||||
|
user=None, session=None, **kwargs
|
||||||
|
):
|
||||||
|
"""Update a clusterhost state."""
|
||||||
|
if isinstance(clusterhost_name, (int, long)):
|
||||||
|
clusterhost = utils.get_db_object(
|
||||||
|
session, models.ClusterHost,
|
||||||
|
clusterhost_id=clusterhost_name
|
||||||
|
)
|
||||||
|
cluster = clusterhost.cluster
|
||||||
|
host = clusterhost.host
|
||||||
|
else:
|
||||||
|
hostname, clustername = clusterhost_name.split('.', 1)
|
||||||
|
cluster = utils.get_db_object(
|
||||||
|
session, models.Cluster, name=clustername
|
||||||
|
)
|
||||||
|
host = utils.get_db_object(
|
||||||
|
session, models.Host, name=hostname
|
||||||
|
)
|
||||||
|
clusterhost = utils.get_db_object(
|
||||||
|
session, models.ClusterHost,
|
||||||
|
cluster_id=cluster.id, host_id=host.id
|
||||||
|
)
|
||||||
|
if 'ready' in kwargs and kwargs['ready'] and not clusterhost.state.ready:
|
||||||
|
ready_triggered = True
|
||||||
|
else:
|
||||||
|
ready_triggered = False
|
||||||
|
cluster_ready = False
|
||||||
|
host_ready = not host.state.ready
|
||||||
|
if ready_triggered:
|
||||||
|
cluster_ready = True
|
||||||
|
for clusterhost_in_cluster in cluster.clusterhosts:
|
||||||
|
if (
|
||||||
|
clusterhost_in_cluster.clusterhost_id
|
||||||
|
==
|
||||||
|
clusterhost.clusterhost_id
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
if not clusterhost_in_cluster.state.ready:
|
||||||
|
cluster_ready = False
|
||||||
|
|
||||||
|
logging.info(
|
||||||
|
'clusterhost %s ready: %s',
|
||||||
|
clusterhost_name, ready_triggered
|
||||||
|
)
|
||||||
|
logging.info('cluster ready: %s', cluster_ready)
|
||||||
|
logging.info('host ready: %s', host_ready)
|
||||||
|
if not ready_triggered or from_database_only:
|
||||||
|
logging.info('%s set state to %s', clusterhost.name, kwargs)
|
||||||
|
utils.update_db_object(session, clusterhost.state, **kwargs)
|
||||||
|
if not clusterhost.state.ready:
|
||||||
|
logging.info('%s state ready is to False', cluster.name)
|
||||||
|
utils.update_db_object(session, cluster.state, ready=False)
|
||||||
|
status = '%s state is updated' % clusterhost.name
|
||||||
|
else:
|
||||||
|
from compass.tasks import client as celery_client
|
||||||
|
celery_client.celery.send_task(
|
||||||
|
'compass.tasks.package_installed',
|
||||||
|
(
|
||||||
|
clusterhost.cluster_id, clusterhost.host_id,
|
||||||
|
cluster_ready, host_ready
|
||||||
|
)
|
||||||
|
)
|
||||||
|
status = '%s: cluster ready %s host ready %s' % (
|
||||||
|
clusterhost.name, cluster_ready, host_ready
|
||||||
|
)
|
||||||
|
logging.info('action status: %s', status)
|
||||||
|
return {
|
||||||
|
'status': status,
|
||||||
|
'clusterhost': clusterhost.state_dict()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@utils.supported_filters(
|
@utils.supported_filters(
|
||||||
optional_support_keys=UPDATED_CLUSTER_STATE_FIELDS,
|
optional_support_keys=UPDATED_CLUSTER_STATE_FIELDS,
|
||||||
ignore_support_keys=IGNORE_FIELDS
|
ignore_support_keys=IGNORE_FIELDS
|
||||||
@ -1763,6 +1934,68 @@ def update_cluster_state(
|
|||||||
return cluster.state_dict()
|
return cluster.state_dict()
|
||||||
|
|
||||||
|
|
||||||
|
@utils.supported_filters(
|
||||||
|
optional_support_keys=UPDATED_CLUSTER_STATE_INTERNAL_FIELDS,
|
||||||
|
ignore_support_keys=IGNORE_FIELDS
|
||||||
|
)
|
||||||
|
@database.run_in_session()
|
||||||
|
@user_api.check_user_permission_in_session(
|
||||||
|
permission.PERMISSION_UPDATE_CLUSTER_STATE
|
||||||
|
)
|
||||||
|
@utils.wrap_to_dict(['status', 'cluster'])
|
||||||
|
def update_cluster_state_internal(
|
||||||
|
clustername, from_database_only=False,
|
||||||
|
user=None, session=None, **kwargs
|
||||||
|
):
|
||||||
|
"""Update a cluster state."""
|
||||||
|
if isinstance(clustername, (int, long)):
|
||||||
|
cluster = utils.get_db_object(
|
||||||
|
session, models.Cluster, id=clustername
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
cluster = utils.get_db_object(
|
||||||
|
session, models.Cluster, name=clustername
|
||||||
|
)
|
||||||
|
if 'ready' in kwargs and kwargs['ready'] and not cluster.state.ready:
|
||||||
|
ready_triggered = True
|
||||||
|
else:
|
||||||
|
ready_triggered = False
|
||||||
|
clusterhost_ready = {}
|
||||||
|
if ready_triggered:
|
||||||
|
for clusterhost in cluster.clusterhosts:
|
||||||
|
clusterhost_ready[clusterhost.host_id] = (
|
||||||
|
not clusterhost.state.ready
|
||||||
|
)
|
||||||
|
|
||||||
|
logging.info('cluster %s ready: %s', clustername, ready_triggered)
|
||||||
|
logging.info('clusterhost ready: %s', clusterhost_ready)
|
||||||
|
|
||||||
|
if not ready_triggered or from_database_only:
|
||||||
|
logging.info('%s state is set to %s', cluster.name, kwargs)
|
||||||
|
utils.update_db_object(session, cluster.state, **kwargs)
|
||||||
|
if not cluster.state.ready:
|
||||||
|
for clusterhost in cluster.clusterhosts:
|
||||||
|
logging.info('%s state ready is to False', clusterhost.name)
|
||||||
|
utils.update_db_object(
|
||||||
|
session, clusterhost.state, ready=False
|
||||||
|
)
|
||||||
|
status = '%s state is updated' % cluster.name
|
||||||
|
else:
|
||||||
|
from compass.tasks import client as celery_client
|
||||||
|
celery_client.celery.send_task(
|
||||||
|
'compass.tasks.cluster_installed',
|
||||||
|
(clusterhost.cluster_id, clusterhost_ready)
|
||||||
|
)
|
||||||
|
status = '%s installed action set clusterhost ready %s' % (
|
||||||
|
cluster.name, clusterhost_ready
|
||||||
|
)
|
||||||
|
logging.info('action status: %s', status)
|
||||||
|
return {
|
||||||
|
'status': status,
|
||||||
|
'cluster': cluster.state_dict()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@utils.supported_filters([])
|
@utils.supported_filters([])
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@utils.wrap_to_dict(RESP_CLUSTERHOST_LOG_FIELDS)
|
@utils.wrap_to_dict(RESP_CLUSTERHOST_LOG_FIELDS)
|
||||||
|
@ -83,11 +83,14 @@ IGNORE_FIELDS = [
|
|||||||
'id', 'created_at', 'updated_at'
|
'id', 'created_at', 'updated_at'
|
||||||
]
|
]
|
||||||
RESP_STATE_FIELDS = [
|
RESP_STATE_FIELDS = [
|
||||||
'id', 'state', 'percentage', 'message', 'severity'
|
'id', 'state', 'percentage', 'message', 'severity', 'ready'
|
||||||
]
|
]
|
||||||
UPDATED_STATE_FIELDS = [
|
UPDATED_STATE_FIELDS = [
|
||||||
'state', 'percentage', 'message', 'severity'
|
'state', 'percentage', 'message', 'severity'
|
||||||
]
|
]
|
||||||
|
UPDATED_STATE_INTERNAL_FIELDS = [
|
||||||
|
'ready'
|
||||||
|
]
|
||||||
RESP_LOG_FIELDS = [
|
RESP_LOG_FIELDS = [
|
||||||
'id', 'filename', 'position', 'partial_line', 'percentage',
|
'id', 'filename', 'position', 'partial_line', 'percentage',
|
||||||
'message', 'severity', 'line_matcher_name'
|
'message', 'severity', 'line_matcher_name'
|
||||||
@ -788,6 +791,84 @@ def update_host_state(host_id, user=None, session=None, **kwargs):
|
|||||||
return host.state_dict()
|
return host.state_dict()
|
||||||
|
|
||||||
|
|
||||||
|
@utils.supported_filters(
|
||||||
|
optional_support_keys=UPDATED_STATE_INTERNAL_FIELDS,
|
||||||
|
ignore_support_keys=IGNORE_FIELDS
|
||||||
|
)
|
||||||
|
@database.run_in_session()
|
||||||
|
@user_api.check_user_permission_in_session(
|
||||||
|
permission.PERMISSION_UPDATE_HOST_STATE
|
||||||
|
)
|
||||||
|
@utils.wrap_to_dict(['status', 'host'])
|
||||||
|
def update_host_state_internal(
|
||||||
|
hostname, from_database_only=False,
|
||||||
|
user=None, session=None, **kwargs
|
||||||
|
):
|
||||||
|
"""Update a host state."""
|
||||||
|
if isinstance(hostname, (int, long)):
|
||||||
|
host = utils.get_db_object(
|
||||||
|
session, models.Host, id=hostname
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
host = utils.get_db_object(
|
||||||
|
session, models.Host, name=hostname
|
||||||
|
)
|
||||||
|
if 'ready' in kwargs and kwargs['ready'] and not host.state.ready:
|
||||||
|
ready_triggered = True
|
||||||
|
else:
|
||||||
|
ready_triggered = False
|
||||||
|
clusterhost_ready = {}
|
||||||
|
cluster_os_ready = {}
|
||||||
|
if ready_triggered:
|
||||||
|
for clusterhost in host.clusterhosts:
|
||||||
|
cluster = clusterhost.cluster
|
||||||
|
if cluster.distributed_system:
|
||||||
|
clusterhost_ready[cluster.id] = False
|
||||||
|
else:
|
||||||
|
clusterhost_ready[cluster.id] = True
|
||||||
|
all_os_ready = True
|
||||||
|
for clusterhost_in_cluster in cluster.clusterhosts:
|
||||||
|
host_in_cluster = clusterhost_in_cluster.host
|
||||||
|
if host_in_cluster.id == host.id:
|
||||||
|
continue
|
||||||
|
if not host_in_cluster.state.ready:
|
||||||
|
all_os_ready = False
|
||||||
|
cluster_os_ready[cluster.id] = all_os_ready
|
||||||
|
logging.info('host %s ready: %s', hostname, ready_triggered)
|
||||||
|
logging.info("clusterhost_ready is: %s", clusterhost_ready)
|
||||||
|
logging.info("cluster_os_ready is %s", cluster_os_ready)
|
||||||
|
|
||||||
|
if not ready_triggered or from_database_only:
|
||||||
|
logging.info('%s state is set to %s', host.name, kwargs)
|
||||||
|
utils.update_db_object(session, host.state, **kwargs)
|
||||||
|
if not host.state.ready:
|
||||||
|
for clusterhost in host.clusterhosts:
|
||||||
|
utils.update_db_object(
|
||||||
|
session, clusterhost.state, ready=False
|
||||||
|
)
|
||||||
|
utils.update_db_object(
|
||||||
|
session, clusterhost.cluster.state, ready=False
|
||||||
|
)
|
||||||
|
status = '%s state is updated' % host.name
|
||||||
|
else:
|
||||||
|
from compass.tasks import client as celery_client
|
||||||
|
celery_client.celery.send_task(
|
||||||
|
'compass.tasks.os_installed',
|
||||||
|
(
|
||||||
|
host.id, clusterhost_ready,
|
||||||
|
cluster_os_ready
|
||||||
|
)
|
||||||
|
)
|
||||||
|
status = '%s: clusterhost ready %s cluster os ready %s' % (
|
||||||
|
host.name, clusterhost_ready, cluster_os_ready
|
||||||
|
)
|
||||||
|
logging.info('action status: %s', status)
|
||||||
|
return {
|
||||||
|
'status': status,
|
||||||
|
'host': host.state_dict()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@utils.supported_filters([])
|
@utils.supported_filters([])
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@utils.wrap_to_dict(RESP_LOG_FIELDS)
|
@utils.wrap_to_dict(RESP_LOG_FIELDS)
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
"""User database operations."""
|
"""User database operations."""
|
||||||
import datetime
|
import datetime
|
||||||
import functools
|
import functools
|
||||||
|
import logging
|
||||||
|
|
||||||
from flask.ext.login import UserMixin
|
from flask.ext.login import UserMixin
|
||||||
|
|
||||||
@ -83,6 +84,9 @@ def add_user_internal(
|
|||||||
|
|
||||||
def _check_user_permission(session, user, permission):
|
def _check_user_permission(session, user, permission):
|
||||||
"""Check user has permission."""
|
"""Check user has permission."""
|
||||||
|
if not user:
|
||||||
|
logging.info('empty user means the call is from internal')
|
||||||
|
return
|
||||||
if user.is_admin:
|
if user.is_admin:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -421,8 +421,11 @@ class StateMixin(TimestampMixin, HelperMixin):
|
|||||||
Enum('INFO', 'WARNING', 'ERROR'),
|
Enum('INFO', 'WARNING', 'ERROR'),
|
||||||
ColumnDefault('INFO')
|
ColumnDefault('INFO')
|
||||||
)
|
)
|
||||||
|
ready = Column(Boolean, default=False)
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
|
if self.ready:
|
||||||
|
self.state = 'SUCCESSFUL'
|
||||||
if self.state in ['UNINITIALIZED', 'INITIALIZED']:
|
if self.state in ['UNINITIALIZED', 'INITIALIZED']:
|
||||||
self.percentage = 0.0
|
self.percentage = 0.0
|
||||||
self.severity = 'INFO'
|
self.severity = 'INFO'
|
||||||
@ -792,6 +795,7 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def os_installed(self):
|
def os_installed(self):
|
||||||
|
logging.debug('os installed: %s' % self.host.os_installed)
|
||||||
return self.host.os_installed
|
return self.host.os_installed
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -1184,8 +1188,17 @@ class ClusterState(BASE, StateMixin):
|
|||||||
)
|
)
|
||||||
if self.failed_hosts:
|
if self.failed_hosts:
|
||||||
self.severity = 'ERROR'
|
self.severity = 'ERROR'
|
||||||
|
|
||||||
super(ClusterState, self).update()
|
super(ClusterState, self).update()
|
||||||
|
|
||||||
|
if self.state == 'SUCCESSFUL':
|
||||||
|
self.completed_hosts = self.total_hosts
|
||||||
|
for clusterhost in clusterhosts:
|
||||||
|
clusterhost_state = clusterhost.state
|
||||||
|
if clusterhost_state.state != 'SUCCESSFUL':
|
||||||
|
clusterhost_state.state = 'SUCCESSFUL'
|
||||||
|
clusterhost.state.update()
|
||||||
|
|
||||||
|
|
||||||
class Cluster(BASE, TimestampMixin, HelperMixin):
|
class Cluster(BASE, TimestampMixin, HelperMixin):
|
||||||
"""Cluster table."""
|
"""Cluster table."""
|
||||||
|
@ -151,6 +151,26 @@ class DeployManager(object):
|
|||||||
if self.pk_installer:
|
if self.pk_installer:
|
||||||
self.pk_installer.delete_hosts(delete_cluster=delete_cluster)
|
self.pk_installer.delete_hosts(delete_cluster=delete_cluster)
|
||||||
|
|
||||||
|
def os_installed(self):
|
||||||
|
if self.os_installer:
|
||||||
|
self.os_installer.ready()
|
||||||
|
if self.pk_installer:
|
||||||
|
self.pk_installer.os_ready()
|
||||||
|
|
||||||
|
def cluster_os_installed(self):
|
||||||
|
if self.os_installer:
|
||||||
|
self.os_installer.cluster_ready()
|
||||||
|
if self.pk_installer:
|
||||||
|
self.pk_installer.cluster_os_ready()
|
||||||
|
|
||||||
|
def package_installed(self):
|
||||||
|
if self.pk_installer:
|
||||||
|
self.pk_installer.ready()
|
||||||
|
|
||||||
|
def cluster_installed(self):
|
||||||
|
if self.pk_installer:
|
||||||
|
self.pk_installer.cluster_ready()
|
||||||
|
|
||||||
|
|
||||||
class PowerManager(object):
|
class PowerManager(object):
|
||||||
"""Manage host to power on, power off, and reset."""
|
"""Manage host to power on, power off, and reset."""
|
||||||
|
@ -352,7 +352,7 @@ class BaseConfigManager(object):
|
|||||||
def _get_cluster_roles_mapping_helper(self):
|
def _get_cluster_roles_mapping_helper(self):
|
||||||
"""The ouput format will be as below, for example:
|
"""The ouput format will be as below, for example:
|
||||||
{
|
{
|
||||||
"controller": {
|
"controller": [{
|
||||||
"hostname": "xxx",
|
"hostname": "xxx",
|
||||||
"management": {
|
"management": {
|
||||||
"interface": "eth0",
|
"interface": "eth0",
|
||||||
@ -363,7 +363,7 @@ class BaseConfigManager(object):
|
|||||||
"is_promiscuous": False
|
"is_promiscuous": False
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
},
|
}],
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
@ -375,10 +375,8 @@ class BaseConfigManager(object):
|
|||||||
|
|
||||||
for host_id in hosts_id_list:
|
for host_id in hosts_id_list:
|
||||||
roles_mapping = self.get_host_roles_mapping(host_id)
|
roles_mapping = self.get_host_roles_mapping(host_id)
|
||||||
for role in roles_mapping:
|
for role, value in roles_mapping.items():
|
||||||
if role not in mapping:
|
mapping.setdefault(role, []).append(value)
|
||||||
mapping[role] = roles_mapping[role]
|
|
||||||
|
|
||||||
return mapping
|
return mapping
|
||||||
|
|
||||||
def _get_host_roles_mapping_helper(self, host_id):
|
def _get_host_roles_mapping_helper(self, host_id):
|
||||||
|
@ -52,6 +52,12 @@ class BaseInstaller(object):
|
|||||||
def redeploy(self, **kwargs):
|
def redeploy(self, **kwargs):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def ready(self, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def cluster_ready(self, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
def get_tmpl_vars_from_metadata(self, metadata, config):
|
def get_tmpl_vars_from_metadata(self, metadata, config):
|
||||||
"""Get variables dictionary for rendering templates from metadata.
|
"""Get variables dictionary for rendering templates from metadata.
|
||||||
:param dict metadata: The metadata dictionary.
|
:param dict metadata: The metadata dictionary.
|
||||||
@ -219,6 +225,12 @@ class PKInstaller(BaseInstaller):
|
|||||||
NAME = 'PKInstaller'
|
NAME = 'PKInstaller'
|
||||||
INSTALLER_BASE_DIR = os.path.join(CURRENT_DIR, 'pk_installers')
|
INSTALLER_BASE_DIR = os.path.join(CURRENT_DIR, 'pk_installers')
|
||||||
|
|
||||||
|
def generate_installer_config(self):
|
||||||
|
raise NotImplementedError(
|
||||||
|
'generate_installer_config is not defined in %s',
|
||||||
|
self.__class__.__name__
|
||||||
|
)
|
||||||
|
|
||||||
def get_target_systems(self):
|
def get_target_systems(self):
|
||||||
"""virtual method to get available target_systems for each os.
|
"""virtual method to get available target_systems for each os.
|
||||||
|
|
||||||
@ -239,6 +251,16 @@ class PKInstaller(BaseInstaller):
|
|||||||
"""
|
"""
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
def os_ready(self, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def cluster_os_ready(self, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def serialize_config(self, config, destination):
|
||||||
|
with open(destination, "w") as f:
|
||||||
|
f.write(config)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_installer(cls, name, adapter_info, cluster_info, hosts_info):
|
def get_installer(cls, name, adapter_info, cluster_info, hosts_info):
|
||||||
if name is None:
|
if name is None:
|
||||||
|
@ -0,0 +1,335 @@
|
|||||||
|
# Copyright 2014 Huawei Technologies Co. Ltd
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
__auther__ = "Compass Dev Team (dev-team@syscompass.org)"
|
||||||
|
|
||||||
|
"""package installer: ansible plugin."""
|
||||||
|
|
||||||
|
from Cheetah.Template import Template
|
||||||
|
from copy import deepcopy
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from compass.deployment.installers.installer import PKInstaller
|
||||||
|
from compass.deployment.utils import constants as const
|
||||||
|
from compass.utils import setting_wrapper as compass_setting
|
||||||
|
from compass.utils import util
|
||||||
|
|
||||||
|
NAME = "AnsibleInstaller"
|
||||||
|
|
||||||
|
|
||||||
|
class AnsibleInstaller(PKInstaller):
|
||||||
|
INVENTORY_TMPL_DIR = 'inventories'
|
||||||
|
GROUPVARS_TMPL_DIR = 'vars'
|
||||||
|
|
||||||
|
# keywords in package installer settings
|
||||||
|
ANSIBLE_DIR = 'ansible_dir'
|
||||||
|
ANSIBLE_RUN_DIR = 'ansible_run_dir'
|
||||||
|
LOG_FILE = 'ansible_log_file'
|
||||||
|
ANSIBLE_CONFIG = 'ansible_config'
|
||||||
|
INVENTORY = 'inventory_file'
|
||||||
|
GROUP_VARIABLE = 'group_variable'
|
||||||
|
HOSTS_PATH = 'etc_hosts_path'
|
||||||
|
RUNNER_DIRS = 'runner_dirs'
|
||||||
|
|
||||||
|
def __init__(self, config_manager):
|
||||||
|
super(AnsibleInstaller, self).__init__()
|
||||||
|
|
||||||
|
self.config_manager = config_manager
|
||||||
|
self.tmpl_name = self.config_manager.get_cluster_flavor_template()
|
||||||
|
self.installer_settings = (
|
||||||
|
self.config_manager.get_pk_installer_settings()
|
||||||
|
)
|
||||||
|
settings = self.installer_settings
|
||||||
|
self.ansible_dir = settings.setdefault(self.ANSIBLE_DIR, None)
|
||||||
|
self.ansible_run_dir = (
|
||||||
|
settings.setdefault(self.ANSIBLE_RUN_DIR, None)
|
||||||
|
)
|
||||||
|
self.log_file = settings.setdefault(self.LOG_FILE, None)
|
||||||
|
self.ansible_config = (
|
||||||
|
settings.setdefault(self.ANSIBLE_CONFIG, None)
|
||||||
|
)
|
||||||
|
self.inventory = settings.setdefault(self.INVENTORY, None)
|
||||||
|
self.group_variable = (
|
||||||
|
settings.setdefault(self.GROUP_VARIABLE, None)
|
||||||
|
)
|
||||||
|
self.hosts_path = (
|
||||||
|
settings.setdefault(self.HOSTS_PATH, None)
|
||||||
|
)
|
||||||
|
self.runner_dirs = (
|
||||||
|
settings.setdefault(self.RUNNER_DIRS, None)
|
||||||
|
)
|
||||||
|
self.playbook = self.tmpl_name.replace('tmpl', 'yml')
|
||||||
|
self.runner_files = [self.playbook]
|
||||||
|
|
||||||
|
adapter_name = self.config_manager.get_dist_system_name()
|
||||||
|
self.tmpl_dir = AnsibleInstaller.get_tmpl_path(adapter_name)
|
||||||
|
self.adapter_dir = os.path.join(self.ansible_dir, adapter_name)
|
||||||
|
logging.debug('%s instance created', self)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_tmpl_path(cls, adapter_name):
|
||||||
|
tmpl_path = os.path.join(
|
||||||
|
os.path.join(compass_setting.TMPL_DIR, 'ansible_installer'),
|
||||||
|
adapter_name
|
||||||
|
)
|
||||||
|
return tmpl_path
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '%s[name=%s,installer_url=%s]' % (
|
||||||
|
self.__class__.__name__, self.NAME, self.installer_url)
|
||||||
|
|
||||||
|
def generate_installer_config(self):
|
||||||
|
"""Render ansible config file by OS installing right after
|
||||||
|
OS is installed successfully.
|
||||||
|
The output format:
|
||||||
|
{
|
||||||
|
'1'($host_id/clusterhost_id):{
|
||||||
|
'tool': 'ansible',
|
||||||
|
},
|
||||||
|
.....
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
host_ids = self.config_manager.get_host_id_list()
|
||||||
|
os_installer_configs = {}
|
||||||
|
for host_id in host_ids:
|
||||||
|
temp = {
|
||||||
|
"tool": "ansible",
|
||||||
|
}
|
||||||
|
os_installer_configs[host_id] = temp
|
||||||
|
|
||||||
|
return os_installer_configs
|
||||||
|
|
||||||
|
def get_env_name(self, dist_sys_name, cluster_name):
|
||||||
|
return "-".join((dist_sys_name, cluster_name))
|
||||||
|
|
||||||
|
def _get_cluster_tmpl_vars(self):
|
||||||
|
"""Generate template variables dict based on cluster level config.
|
||||||
|
The vars_dict will be:
|
||||||
|
{
|
||||||
|
"baseinfo": {
|
||||||
|
"id":1,
|
||||||
|
"name": "cluster01",
|
||||||
|
...
|
||||||
|
},
|
||||||
|
"package_config": {
|
||||||
|
.... //mapped from original package config based on metadata
|
||||||
|
},
|
||||||
|
"role_mapping": {
|
||||||
|
....
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
cluster_vars_dict = {}
|
||||||
|
# set cluster basic information to vars_dict
|
||||||
|
cluster_baseinfo = self.config_manager.get_cluster_baseinfo()
|
||||||
|
cluster_vars_dict[const.BASEINFO] = cluster_baseinfo
|
||||||
|
|
||||||
|
# get and set template variables from cluster package config.
|
||||||
|
pk_metadata = self.config_manager.get_pk_config_meatadata()
|
||||||
|
pk_config = self.config_manager.get_cluster_package_config()
|
||||||
|
|
||||||
|
# get os config as ansible needs them
|
||||||
|
os_metadata = self.config_manager.get_os_config_metadata()
|
||||||
|
os_config = self.config_manager.get_cluster_os_config()
|
||||||
|
|
||||||
|
pk_meta_dict = self.get_tmpl_vars_from_metadata(pk_metadata, pk_config)
|
||||||
|
os_meta_dict = self.get_tmpl_vars_from_metadata(os_metadata, os_config)
|
||||||
|
util.merge_dict(pk_meta_dict, os_meta_dict)
|
||||||
|
|
||||||
|
cluster_vars_dict[const.PK_CONFIG] = pk_meta_dict
|
||||||
|
|
||||||
|
# get and set roles_mapping to vars_dict
|
||||||
|
mapping = self.config_manager.get_cluster_roles_mapping()
|
||||||
|
logging.info("cluster role mapping is %s", mapping)
|
||||||
|
cluster_vars_dict[const.ROLES_MAPPING] = mapping
|
||||||
|
|
||||||
|
return cluster_vars_dict
|
||||||
|
|
||||||
|
def _generate_inventory_attributes(self, global_vars_dict):
|
||||||
|
inventory_tmpl_path = os.path.join(
|
||||||
|
os.path.join(self.tmpl_dir, self.INVENTORY_TMPL_DIR),
|
||||||
|
self.tmpl_name
|
||||||
|
)
|
||||||
|
if not os.path.exists(inventory_tmpl_path):
|
||||||
|
logging.error(
|
||||||
|
"Inventory template '%s' does not exist", self.tmpl_name
|
||||||
|
)
|
||||||
|
raise Exception("Template '%s' does not exist!" % self.tmpl_name)
|
||||||
|
|
||||||
|
return self.get_config_from_template(
|
||||||
|
inventory_tmpl_path, global_vars_dict
|
||||||
|
)
|
||||||
|
|
||||||
|
def _generate_group_vars_attributes(self, global_vars_dict):
|
||||||
|
group_vars_tmpl_path = os.path.join(
|
||||||
|
os.path.join(self.tmpl_dir, self.GROUPVARS_TMPL_DIR),
|
||||||
|
self.tmpl_name
|
||||||
|
)
|
||||||
|
if not os.path.exists(group_vars_tmpl_path):
|
||||||
|
logging.error("Vars template '%s' does not exist",
|
||||||
|
self.tmpl_name)
|
||||||
|
raise Exception("Template '%s' does not exist!" % self.tmpl_name)
|
||||||
|
|
||||||
|
return self.get_config_from_template(
|
||||||
|
group_vars_tmpl_path, global_vars_dict
|
||||||
|
)
|
||||||
|
|
||||||
|
def _generate_hosts_attributes(self, global_vars_dict):
|
||||||
|
hosts_tmpl_path = os.path.join(
|
||||||
|
os.path.join(self.tmpl_dir, 'hosts'), self.tmpl_name
|
||||||
|
)
|
||||||
|
if not os.path.exists(hosts_tmpl_path):
|
||||||
|
logging.error("Hosts template '%s' does not exist", self.tmpl_name)
|
||||||
|
raise Exception("Template '%s' does not exist!" % self.tmpl_name)
|
||||||
|
|
||||||
|
return self.get_config_from_template(hosts_tmpl_path, global_vars_dict)
|
||||||
|
|
||||||
|
def get_config_from_template(self, tmpl_path, vars_dict):
|
||||||
|
logging.debug("vars_dict is %s", vars_dict)
|
||||||
|
|
||||||
|
if not os.path.exists(tmpl_path) or not vars_dict:
|
||||||
|
logging.info("Template dir or vars_dict is None!")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
searchList = []
|
||||||
|
copy_vars_dict = deepcopy(vars_dict)
|
||||||
|
for key, value in vars_dict.iteritems():
|
||||||
|
if isinstance(value, dict):
|
||||||
|
temp = copy_vars_dict[key]
|
||||||
|
del copy_vars_dict[key]
|
||||||
|
searchList.append(temp)
|
||||||
|
searchList.append(copy_vars_dict)
|
||||||
|
|
||||||
|
# Load specific template for current adapter
|
||||||
|
tmpl = Template(file=tmpl_path, searchList=searchList)
|
||||||
|
return tmpl.respond()
|
||||||
|
|
||||||
|
def _create_ansible_run_env(self, env_name):
|
||||||
|
ansible_run_destination = os.path.join(self.ansible_run_dir, env_name)
|
||||||
|
os.mkdir(ansible_run_destination)
|
||||||
|
|
||||||
|
ansible_log_path = os.path.join(
|
||||||
|
ansible_run_destination,
|
||||||
|
self.log_file
|
||||||
|
)
|
||||||
|
log_option = "log_path = %s" % ansible_log_path
|
||||||
|
ansible_cfg_file = os.path.join(
|
||||||
|
ansible_run_destination,
|
||||||
|
self.ansible_config
|
||||||
|
)
|
||||||
|
with open(ansible_cfg_file, 'w') as cfg:
|
||||||
|
cfg.write('[defaults]\n')
|
||||||
|
cfg.write(log_option)
|
||||||
|
|
||||||
|
# copy roles to run env
|
||||||
|
dirs = self.runner_dirs
|
||||||
|
files = self.runner_files
|
||||||
|
for dir in dirs:
|
||||||
|
shutil.copytree(
|
||||||
|
os.path.join(self.adapter_dir, dir),
|
||||||
|
os.path.join(
|
||||||
|
ansible_run_destination,
|
||||||
|
dir
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for file in files:
|
||||||
|
logging.info('file is %s', file)
|
||||||
|
shutil.copy(
|
||||||
|
os.path.join(self.adapter_dir, file),
|
||||||
|
os.path.join(
|
||||||
|
ansible_run_destination,
|
||||||
|
file
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def prepare_ansible(self, env_name, global_vars_dict):
|
||||||
|
ansible_run_destination = os.path.join(self.ansible_run_dir, env_name)
|
||||||
|
self._create_ansible_run_env(env_name)
|
||||||
|
inv_config = self._generate_inventory_attributes(global_vars_dict)
|
||||||
|
inventory_dir = os.path.join(ansible_run_destination, 'inventories')
|
||||||
|
|
||||||
|
vars_config = self._generate_group_vars_attributes(global_vars_dict)
|
||||||
|
vars_dir = os.path.join(ansible_run_destination, 'group_vars')
|
||||||
|
|
||||||
|
hosts_config = self._generate_hosts_attributes(global_vars_dict)
|
||||||
|
hosts_destination = os.path.join(
|
||||||
|
ansible_run_destination, self.hosts_path
|
||||||
|
)
|
||||||
|
|
||||||
|
os.mkdir(inventory_dir)
|
||||||
|
os.mkdir(vars_dir)
|
||||||
|
|
||||||
|
inventory_destination = os.path.join(inventory_dir, self.inventory)
|
||||||
|
group_vars_destination = os.path.join(vars_dir, self.group_variable)
|
||||||
|
self.serialize_config(inv_config, inventory_destination)
|
||||||
|
self.serialize_config(vars_config, group_vars_destination)
|
||||||
|
self.serialize_config(hosts_config, hosts_destination)
|
||||||
|
|
||||||
|
def deploy(self):
|
||||||
|
"""Start to deploy a distributed system. Return both cluster and hosts
|
||||||
|
deployed configs. The return format:
|
||||||
|
{
|
||||||
|
"cluster": {
|
||||||
|
"id": 1,
|
||||||
|
"deployed_package_config": {
|
||||||
|
"roles_mapping": {...},
|
||||||
|
"service_credentials": {...},
|
||||||
|
....
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hosts": {
|
||||||
|
1($clusterhost_id): {
|
||||||
|
"deployed_package_config": {...}
|
||||||
|
},
|
||||||
|
....
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
host_list = self.config_manager.get_host_id_list()
|
||||||
|
if not host_list:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
adapter_name = self.config_manager.get_adapter_name()
|
||||||
|
cluster_name = self.config_manager.get_clustername()
|
||||||
|
env_name = self.get_env_name(adapter_name, cluster_name)
|
||||||
|
|
||||||
|
global_vars_dict = self._get_cluster_tmpl_vars()
|
||||||
|
logging.info(
|
||||||
|
'%s var dict: %s', self.__class__.__name__, global_vars_dict
|
||||||
|
)
|
||||||
|
# Create ansible related files
|
||||||
|
self.prepare_ansible(env_name, global_vars_dict)
|
||||||
|
|
||||||
|
def cluster_os_ready(self):
|
||||||
|
adapter_name = self.config_manager.get_adapter_name()
|
||||||
|
cluster_name = self.config_manager.get_clustername()
|
||||||
|
env_name = self.get_env_name(adapter_name, cluster_name)
|
||||||
|
ansible_run_destination = os.path.join(self.ansible_run_dir, env_name)
|
||||||
|
inventory_dir = os.path.join(ansible_run_destination, 'inventories')
|
||||||
|
inventory_file = os.path.join(inventory_dir, self.inventory)
|
||||||
|
playbook_file = os.path.join(ansible_run_destination, self.playbook)
|
||||||
|
log_file = os.path.join(ansible_run_destination, 'run.log')
|
||||||
|
config_file = os.path.join(
|
||||||
|
ansible_run_destination, self.ansible_config
|
||||||
|
)
|
||||||
|
cmd = "ANSIBLE_CONFIG=%s ansible-playbook -i %s %s" % (config_file,
|
||||||
|
inventory_file,
|
||||||
|
playbook_file)
|
||||||
|
with open(log_file, 'w') as logfile:
|
||||||
|
subprocess.Popen(cmd, shell=True, stdout=logfile, stderr=logfile)
|
@ -33,6 +33,7 @@ USERNAME = 'username'
|
|||||||
DIST_SYS_NAME = 'distributed_system_name'
|
DIST_SYS_NAME = 'distributed_system_name'
|
||||||
FLAVOR = 'flavor'
|
FLAVOR = 'flavor'
|
||||||
FLAVORS = 'flavors'
|
FLAVORS = 'flavors'
|
||||||
|
PLAYBOOK = 'playbook'
|
||||||
FLAVOR_NAME = 'flavor_name'
|
FLAVOR_NAME = 'flavor_name'
|
||||||
HEALTH_CHECK_CMD = 'health_check_cmd'
|
HEALTH_CHECK_CMD = 'health_check_cmd'
|
||||||
TMPL = 'template'
|
TMPL = 'template'
|
||||||
@ -61,6 +62,7 @@ MGMT_NIC_FLAG = 'is_mgmt'
|
|||||||
NETMASK = 'netmask'
|
NETMASK = 'netmask'
|
||||||
NETWORKS = 'networks'
|
NETWORKS = 'networks'
|
||||||
NIC = 'interface'
|
NIC = 'interface'
|
||||||
|
CLUSTER_ID = 'cluster_id'
|
||||||
ORIGIN_CLUSTER_ID = 'origin_cluster_id'
|
ORIGIN_CLUSTER_ID = 'origin_cluster_id'
|
||||||
PROMISCUOUS_FLAG = 'is_promiscuous'
|
PROMISCUOUS_FLAG = 'is_promiscuous'
|
||||||
REINSTALL_OS_FLAG = 'reinstall_os'
|
REINSTALL_OS_FLAG = 'reinstall_os'
|
||||||
|
@ -24,6 +24,7 @@ from celery.signals import setup_logging
|
|||||||
from compass.actions import clean
|
from compass.actions import clean
|
||||||
from compass.actions import delete
|
from compass.actions import delete
|
||||||
from compass.actions import deploy
|
from compass.actions import deploy
|
||||||
|
from compass.actions import install_callback
|
||||||
from compass.actions import poll_switch
|
from compass.actions import poll_switch
|
||||||
from compass.actions import update_progress
|
from compass.actions import update_progress
|
||||||
from compass.db.api import adapter_holder as adapter_api
|
from compass.db.api import adapter_holder as adapter_api
|
||||||
@ -176,7 +177,7 @@ def delete_host(deleter_email, host_id, cluster_ids):
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
delete.delete_host(
|
delete.delete_host(
|
||||||
host_id, deleter_email, cluster_ids
|
host_id, cluster_ids, deleter_email
|
||||||
)
|
)
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
logging.exception(error)
|
logging.exception(error)
|
||||||
@ -250,6 +251,50 @@ def reset_machine(machine_id):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@celery.task(name='compass.tasks.os_installed')
|
||||||
|
def os_installed(
|
||||||
|
host_id, clusterhosts_ready,
|
||||||
|
clusters_os_ready
|
||||||
|
):
|
||||||
|
"""callback when os is installed.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
install_callback.os_installed(
|
||||||
|
host_id, clusterhosts_ready,
|
||||||
|
clusters_os_ready
|
||||||
|
)
|
||||||
|
except Exception as error:
|
||||||
|
logging.exception(error)
|
||||||
|
|
||||||
|
|
||||||
|
@celery.task(name='compass.tasks.package_installed')
|
||||||
|
def package_installed(
|
||||||
|
cluster_id, host_id, cluster_ready, host_ready
|
||||||
|
):
|
||||||
|
"""callback when package is installed.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
install_callback.package_installed(
|
||||||
|
cluster_id, host_id, cluster_ready, host_ready
|
||||||
|
)
|
||||||
|
except Exception as error:
|
||||||
|
logging.exception(error)
|
||||||
|
|
||||||
|
|
||||||
|
@celery.task(name='compass.tasks.cluster_installed')
|
||||||
|
def cluster_installed(
|
||||||
|
cluster_id, clusterhosts_ready
|
||||||
|
):
|
||||||
|
"""callback when package is installed.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
install_callback.cluster_installed(
|
||||||
|
cluster_id, clusterhosts_ready
|
||||||
|
)
|
||||||
|
except Exception as error:
|
||||||
|
logging.exception(error)
|
||||||
|
|
||||||
|
|
||||||
@celery.task(name='compass.tasks.update_progress')
|
@celery.task(name='compass.tasks.update_progress')
|
||||||
def update_clusters_progress():
|
def update_clusters_progress():
|
||||||
"""Calculate the installing progress of the given cluster.
|
"""Calculate the installing progress of the given cluster.
|
||||||
|
@ -60,6 +60,7 @@ from compass.log_analyzor import progress_calculator
|
|||||||
from compass.utils import flags
|
from compass.utils import flags
|
||||||
from compass.utils import logsetting
|
from compass.utils import logsetting
|
||||||
|
|
||||||
|
ADAPTER_NAME = 'openstack_icehouse'
|
||||||
OS_NAME = 'CentOS-6.5-x86_64'
|
OS_NAME = 'CentOS-6.5-x86_64'
|
||||||
SWITCH_IP = '172.29.8.40'
|
SWITCH_IP = '172.29.8.40'
|
||||||
MACHINE_MAC = '00:0c:29:bf:eb:1d'
|
MACHINE_MAC = '00:0c:29:bf:eb:1d'
|
||||||
@ -87,18 +88,40 @@ class TestProgressCalculator(unittest2.TestCase):
|
|||||||
# get adapter information
|
# get adapter information
|
||||||
list_adapters = adapter.list_adapters(user=self.user_object)
|
list_adapters = adapter.list_adapters(user=self.user_object)
|
||||||
for adptr in list_adapters:
|
for adptr in list_adapters:
|
||||||
if ('package_installer' in adptr.keys() and
|
self.adapter_id = None
|
||||||
adptr['flavors'] != [] and
|
if adptr['name'] != ADAPTER_NAME:
|
||||||
adptr['distributed_system_name'] == 'openstack'):
|
continue
|
||||||
self.adapter_id = adptr['id']
|
self.adapter_id = adptr['id']
|
||||||
for flavor in adptr['flavors']:
|
self.os_id = None
|
||||||
if flavor['name'] == 'allinone':
|
|
||||||
self.flavor_id = flavor['id']
|
|
||||||
break
|
|
||||||
for supported_os in adptr['supported_oses']:
|
for supported_os in adptr['supported_oses']:
|
||||||
if supported_os['name'] == OS_NAME:
|
if supported_os['name'] == OS_NAME:
|
||||||
self.os_id = supported_os['os_id']
|
self.os_id = supported_os['os_id']
|
||||||
break
|
break
|
||||||
|
if not self.os_id:
|
||||||
|
continue
|
||||||
|
if (
|
||||||
|
'package_installer' in adptr.keys() and
|
||||||
|
adptr['flavors'] != [] and
|
||||||
|
adptr['distributed_system_name'] == 'openstack'
|
||||||
|
):
|
||||||
|
self.flavor_id = None
|
||||||
|
for flavor in adptr['flavors']:
|
||||||
|
if flavor['name'] == 'allinone':
|
||||||
|
self.flavor_id = flavor['id']
|
||||||
|
break
|
||||||
|
if not self.flavor_id:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
if self.adapter_id and self.os_id and self.flavor_id:
|
||||||
|
break
|
||||||
|
|
||||||
|
if not self.adapter_id:
|
||||||
|
raise Exception('adapter id not found')
|
||||||
|
if not self.os_id:
|
||||||
|
raise Exception('os id not found')
|
||||||
|
if not self.flavor_id:
|
||||||
|
raise Exception('flavor id not found')
|
||||||
|
|
||||||
#add cluster
|
#add cluster
|
||||||
cluster.add_cluster(
|
cluster.add_cluster(
|
||||||
|
@ -94,6 +94,7 @@ class ApiTestCase(unittest2.TestCase):
|
|||||||
data['name'] = 'test_cluster1'
|
data['name'] = 'test_cluster1'
|
||||||
data['adapter_id'] = adapter_id
|
data['adapter_id'] = adapter_id
|
||||||
data['os_id'] = os_id
|
data['os_id'] = os_id
|
||||||
|
self.os_id = os_id
|
||||||
data['flavor_id'] = flavor_id
|
data['flavor_id'] = flavor_id
|
||||||
self.post(url, data)
|
self.post(url, data)
|
||||||
data = {}
|
data = {}
|
||||||
@ -1014,7 +1015,7 @@ class TestMetadataAPI(ApiTestCase):
|
|||||||
super(TestMetadataAPI, self).tearDown()
|
super(TestMetadataAPI, self).tearDown()
|
||||||
|
|
||||||
def test_get_os_ui_metadata(self):
|
def test_get_os_ui_metadata(self):
|
||||||
url = '/oses/1/ui_metadata'
|
url = '/oses/%s/ui_metadata' % self.os_id
|
||||||
return_value = self.get(url)
|
return_value = self.get(url)
|
||||||
self.assertEqual(return_value.status_code, 200)
|
self.assertEqual(return_value.status_code, 200)
|
||||||
self.assertIn('os_global_config', return_value.get_data())
|
self.assertIn('os_global_config', return_value.get_data())
|
||||||
|
@ -95,24 +95,33 @@ class TestChefInstaller(unittest2.TestCase):
|
|||||||
|
|
||||||
def test_get_env_attributes(self):
|
def test_get_env_attributes(self):
|
||||||
expected_env = {
|
expected_env = {
|
||||||
|
"chef_type": "environment",
|
||||||
"name": "testing",
|
"name": "testing",
|
||||||
"description": "Environment",
|
"description": "Environment",
|
||||||
"cookbook_versions": {
|
"cookbook_versions": {
|
||||||
},
|
},
|
||||||
"json_class": "Chef::Environment",
|
"json_class": "Chef::Environment",
|
||||||
"chef_type": "environment",
|
"override_attributes": {
|
||||||
|
"compass": {
|
||||||
|
"cluster_id": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"default_attributes": {
|
"default_attributes": {
|
||||||
|
"local_repo": "",
|
||||||
|
"memcached": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
"compute": {
|
"compute": {
|
||||||
|
"xvpvnc_proxy": {
|
||||||
|
"bind_interface": "eth0"
|
||||||
|
},
|
||||||
"syslog": {
|
"syslog": {
|
||||||
"use": False
|
"use": False
|
||||||
},
|
},
|
||||||
"libvirt": {
|
|
||||||
"bind_interface": "eth0"
|
|
||||||
},
|
|
||||||
"novnc_proxy": {
|
"novnc_proxy": {
|
||||||
"bind_interface": "vnet0"
|
"bind_interface": "vnet0"
|
||||||
},
|
},
|
||||||
"xvpvnc_proxy": {
|
"libvirt": {
|
||||||
"bind_interface": "eth0"
|
"bind_interface": "eth0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -121,21 +130,299 @@ class TestChefInstaller(unittest2.TestCase):
|
|||||||
"external_network_bridge_interface": "eth2"
|
"external_network_bridge_interface": "eth2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mysql": {
|
||||||
|
"server_root_password": "root",
|
||||||
|
"server_repl_password": "root",
|
||||||
|
"root_network_acl": "%",
|
||||||
|
"allow_remote_root": True,
|
||||||
|
"server_debian_password": "root"
|
||||||
|
},
|
||||||
|
"mq": {
|
||||||
|
"vhost": "/nova",
|
||||||
|
"password": "test",
|
||||||
|
"user": "guest",
|
||||||
|
"network": {
|
||||||
|
"service_type": "rabbitmq"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"openstack": {
|
||||||
|
"image": {
|
||||||
|
"upload_images": ["cirros"],
|
||||||
|
"syslog": {
|
||||||
|
"use": False
|
||||||
|
},
|
||||||
|
"api": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"registry": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"debug": True,
|
||||||
|
"upload_image": {
|
||||||
|
"cirros": "http://download.cirros-cloud.net"
|
||||||
|
"/0.3.2/cirros-0.3.2-x86_64-disk.img"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"db": {
|
||||||
|
"volume": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"compute": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"orchestration": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"bind_interface": "vnet0",
|
||||||
|
"image": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"identity": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"validate_certs": False
|
||||||
|
},
|
||||||
|
"use_databags": False,
|
||||||
|
"developer_mode": True,
|
||||||
|
"block-storage": {
|
||||||
|
"debug": True,
|
||||||
|
"syslog": {
|
||||||
|
"use": False
|
||||||
|
},
|
||||||
|
"api": {
|
||||||
|
"ratelimit": "False"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"compute": {
|
||||||
|
"xvpvnc_proxy": {
|
||||||
|
"bind_interface": "eth0"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"service_type": "neutron"
|
||||||
|
},
|
||||||
|
"libvirt": {
|
||||||
|
"bind_interface": "eth0"
|
||||||
|
},
|
||||||
|
"syslog": {
|
||||||
|
"use": False
|
||||||
|
},
|
||||||
|
"ratelimit": {
|
||||||
|
"volume": {
|
||||||
|
"enabled": False
|
||||||
|
},
|
||||||
|
"api": {
|
||||||
|
"enabled": False
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"novnc_proxy": {
|
||||||
|
"bind_interface": "eth0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"verbose": "True",
|
||||||
|
"openvswitch": {
|
||||||
|
"network_vlan_ranges": "",
|
||||||
|
"enable_tunneling": "True",
|
||||||
|
"bind_interface": "eth1",
|
||||||
|
"tenant_network_type": "gre",
|
||||||
|
"bridge_mappings": "",
|
||||||
|
"tunnel_id_ranges": "1:1000"
|
||||||
|
},
|
||||||
|
"ml2": {
|
||||||
|
"type_drivers": "gre",
|
||||||
|
"tenant_network_types": "gre",
|
||||||
|
"enable_security_group": "True",
|
||||||
|
"network_vlan_ranges": "",
|
||||||
|
"tunnel_id_ranges": "1:1000"
|
||||||
|
},
|
||||||
|
"l3": {
|
||||||
|
"external_network_bridge_interface": "eth2"
|
||||||
|
},
|
||||||
|
"debug": "True",
|
||||||
|
"service_plugins": ["router"]
|
||||||
|
},
|
||||||
|
"mq": {
|
||||||
|
"vhost": "/nova",
|
||||||
|
"password": "guest",
|
||||||
|
"user": "guest",
|
||||||
|
"network": {
|
||||||
|
"service_type": "rabbitmq"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"use_ssl": "false"
|
||||||
|
},
|
||||||
|
"identity": {
|
||||||
|
"syslog": {
|
||||||
|
"use": False
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"backend": "sql"
|
||||||
|
},
|
||||||
|
"admin_user": "admin",
|
||||||
|
"users": {
|
||||||
|
"admin": {
|
||||||
|
"password": "admin",
|
||||||
|
"default_tenant": "admin",
|
||||||
|
"roles": {
|
||||||
|
"admin": ["admin"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"demo": {
|
||||||
|
"password": "demo",
|
||||||
|
"default_tenant": "demo",
|
||||||
|
"roles": {
|
||||||
|
"member": ["demo"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"roles": ["admin", "member"],
|
||||||
|
"bind_interface": "vnet0",
|
||||||
|
"debug": True,
|
||||||
|
"tenants": ["admin", "service", "demo"],
|
||||||
|
"catalog": {
|
||||||
|
"backend": "sql"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"endpoints": {
|
||||||
|
"telemetry-api": {
|
||||||
|
"path": "/v1",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8777"
|
||||||
|
},
|
||||||
|
"compute-api": {
|
||||||
|
"path": "/v2/%(tenant_id)s",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8774"
|
||||||
|
},
|
||||||
|
"identity-admin": {
|
||||||
|
"path": "/v2.0",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "35357"
|
||||||
|
},
|
||||||
|
"image-api-bind": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"image-registry": {
|
||||||
|
"path": "/v2",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "9191"
|
||||||
|
},
|
||||||
|
"orchestration-api-cfn": {
|
||||||
|
"path": "/v1",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8000"
|
||||||
|
},
|
||||||
|
"vnc_bind": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"image-registry-bind": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"orchestration-api": {
|
||||||
|
"path": "/v1/%(tenant_id)s",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8004"
|
||||||
|
},
|
||||||
|
"block-storage-api-bind": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"identity-api": {
|
||||||
|
"path": "/v2.0",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "5000"
|
||||||
|
},
|
||||||
|
"network-api-bind": {
|
||||||
|
"bind_interface": "eth0"
|
||||||
|
},
|
||||||
|
"block-storage-api": {
|
||||||
|
"path": "/v1/%(tenant_id)s",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8776"
|
||||||
|
},
|
||||||
|
"db": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"compute-api-bind": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"compute-novnc": {
|
||||||
|
"path": "/vnc_auto.html",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "6080"
|
||||||
|
},
|
||||||
|
"image-api": {
|
||||||
|
"path": "/v2",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "9292"
|
||||||
|
},
|
||||||
|
"compute-vnc-bind": {
|
||||||
|
"bind_interface": "eth0"
|
||||||
|
},
|
||||||
|
"identity-bind": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"network-api": {
|
||||||
|
"path": "",
|
||||||
|
"host": "12.234.32.103",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "9696"
|
||||||
|
},
|
||||||
|
"mq": {
|
||||||
|
"host": "12.234.32.100"
|
||||||
|
},
|
||||||
|
"compute-ec2-admin": {
|
||||||
|
"path": "/services/Admin",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8773"
|
||||||
|
},
|
||||||
|
"compute-novnc-bind": {
|
||||||
|
"bind_interface": "vnet0"
|
||||||
|
},
|
||||||
|
"compute-ec2-api": {
|
||||||
|
"path": "/services/Cloud",
|
||||||
|
"host": "12.234.32.100",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8773"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"db": {
|
"db": {
|
||||||
"bind_interface": "vnet0",
|
|
||||||
"compute": {
|
"compute": {
|
||||||
"host": "12.234.32.100"
|
"host": "12.234.32.100"
|
||||||
},
|
},
|
||||||
"identity": {
|
"identity": {
|
||||||
"host": "12.234.32.100"
|
"host": "12.234.32.100"
|
||||||
}
|
},
|
||||||
|
"bind_interface": "vnet0"
|
||||||
},
|
},
|
||||||
"mq": {
|
"collectd": {
|
||||||
"user": "guest",
|
"server": {
|
||||||
"password": "test",
|
"host": "metrics",
|
||||||
"vhost": "/nova",
|
"protocol": "tcp",
|
||||||
"network": {
|
"port": "4242"
|
||||||
"service_type": "rabbitmq"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -221,7 +508,7 @@ class TestChefInstaller(unittest2.TestCase):
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"roles_mapping": {
|
"roles_mapping": {
|
||||||
"os_controller": {
|
"os_controller": [{
|
||||||
"hostname": "server01",
|
"hostname": "server01",
|
||||||
"management": {
|
"management": {
|
||||||
"interface": "vnet0",
|
"interface": "vnet0",
|
||||||
@ -239,8 +526,8 @@ class TestChefInstaller(unittest2.TestCase):
|
|||||||
"is_promiscuous": False,
|
"is_promiscuous": False,
|
||||||
"subnet": "172.16.1.0/24"
|
"subnet": "172.16.1.0/24"
|
||||||
}
|
}
|
||||||
},
|
}],
|
||||||
"os_compute_worker": {
|
"os_compute_worker": [{
|
||||||
"hostname": "server02",
|
"hostname": "server02",
|
||||||
"management": {
|
"management": {
|
||||||
"interface": "eth0",
|
"interface": "eth0",
|
||||||
@ -258,8 +545,7 @@ class TestChefInstaller(unittest2.TestCase):
|
|||||||
"is_promiscuous": False,
|
"is_promiscuous": False,
|
||||||
"subnet": "172.16.1.0/24"
|
"subnet": "172.16.1.0/24"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"os_network": {
|
|
||||||
"hostname": "server03",
|
"hostname": "server03",
|
||||||
"management": {
|
"management": {
|
||||||
"interface": "eth0",
|
"interface": "eth0",
|
||||||
@ -285,7 +571,34 @@ class TestChefInstaller(unittest2.TestCase):
|
|||||||
"is_promiscuous": True,
|
"is_promiscuous": True,
|
||||||
"subnet": "10.0.0.0/24"
|
"subnet": "10.0.0.0/24"
|
||||||
}
|
}
|
||||||
}
|
}],
|
||||||
|
"os_network": [{
|
||||||
|
"hostname": "server03",
|
||||||
|
"management": {
|
||||||
|
"interface": "eth0",
|
||||||
|
"ip": "12.234.32.103",
|
||||||
|
"netmask": "255.255.255.0",
|
||||||
|
"is_mgmt": True,
|
||||||
|
"is_promiscuous": False,
|
||||||
|
"subnet": "12.234.32.0/24"
|
||||||
|
},
|
||||||
|
"tenant": {
|
||||||
|
"interface": "eth1",
|
||||||
|
"ip": "172.16.1.3",
|
||||||
|
"netmask": "255.255.255.0",
|
||||||
|
"is_mgmt": False,
|
||||||
|
"is_promiscuous": False,
|
||||||
|
"subnet": "172.16.1.0/24"
|
||||||
|
},
|
||||||
|
"public": {
|
||||||
|
"interface": "eth2",
|
||||||
|
"ip": "10.0.0.1",
|
||||||
|
"netmask": "255.255.255.0",
|
||||||
|
"is_mgmt": False,
|
||||||
|
"is_promiscuous": True,
|
||||||
|
"subnet": "10.0.0.0/24"
|
||||||
|
}
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -63,7 +63,7 @@ class TestConfigManager(unittest2.TestCase):
|
|||||||
|
|
||||||
def test_get_cluster_roles_mapping(self):
|
def test_get_cluster_roles_mapping(self):
|
||||||
expected_output = {
|
expected_output = {
|
||||||
"os_controller": {
|
"os_controller": [{
|
||||||
"hostname": "server01",
|
"hostname": "server01",
|
||||||
"management": {
|
"management": {
|
||||||
"interface": "vnet0",
|
"interface": "vnet0",
|
||||||
@ -81,8 +81,8 @@ class TestConfigManager(unittest2.TestCase):
|
|||||||
"is_promiscuous": False,
|
"is_promiscuous": False,
|
||||||
"subnet": "172.16.1.0/24"
|
"subnet": "172.16.1.0/24"
|
||||||
}
|
}
|
||||||
},
|
}],
|
||||||
"os_compute_worker": {
|
"os_compute_worker": [{
|
||||||
"hostname": "server02",
|
"hostname": "server02",
|
||||||
"management": {
|
"management": {
|
||||||
"interface": "eth0",
|
"interface": "eth0",
|
||||||
@ -100,8 +100,34 @@ class TestConfigManager(unittest2.TestCase):
|
|||||||
"is_promiscuous": False,
|
"is_promiscuous": False,
|
||||||
"subnet": "172.16.1.0/24"
|
"subnet": "172.16.1.0/24"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"os_network": {
|
"hostname": "server03",
|
||||||
|
"management": {
|
||||||
|
"interface": "eth0",
|
||||||
|
"ip": "12.234.32.103",
|
||||||
|
"is_mgmt": True,
|
||||||
|
"is_promiscuous": False,
|
||||||
|
"netmask": "255.255.255.0",
|
||||||
|
"subnet": "12.234.32.0/24"
|
||||||
|
},
|
||||||
|
'public': {
|
||||||
|
"interface": "eth2",
|
||||||
|
"ip": "10.0.0.1",
|
||||||
|
"is_mgmt": False,
|
||||||
|
"is_promiscuous": True,
|
||||||
|
"netmask": "255.255.255.0",
|
||||||
|
"subnet": "10.0.0.0/24"
|
||||||
|
},
|
||||||
|
"tenant": {
|
||||||
|
"interface": "eth1",
|
||||||
|
"ip": "172.16.1.3",
|
||||||
|
"netmask": "255.255.255.0",
|
||||||
|
"is_mgmt": False,
|
||||||
|
"is_promiscuous": False,
|
||||||
|
"subnet": "172.16.1.0/24"
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
"os_network": [{
|
||||||
"hostname": "server03",
|
"hostname": "server03",
|
||||||
"management": {
|
"management": {
|
||||||
"interface": "eth0",
|
"interface": "eth0",
|
||||||
@ -127,7 +153,7 @@ class TestConfigManager(unittest2.TestCase):
|
|||||||
"is_promiscuous": True,
|
"is_promiscuous": True,
|
||||||
"subnet": "10.0.0.0/24"
|
"subnet": "10.0.0.0/24"
|
||||||
}
|
}
|
||||||
}
|
}]
|
||||||
}
|
}
|
||||||
self.maxDiff = None
|
self.maxDiff = None
|
||||||
output = self.test_config_manager.get_cluster_roles_mapping()
|
output = self.test_config_manager.get_cluster_roles_mapping()
|
||||||
|
@ -0,0 +1,427 @@
|
|||||||
|
#set controller = $get_role('os_compute_controller', [$get_role('os_controller', None), $get_role('allinone_compute', None)])
|
||||||
|
|
||||||
|
## Contoller node management IP/interface
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_nic = $controller.management.interface
|
||||||
|
|
||||||
|
## Compute node management IP/interface
|
||||||
|
#set compute = $get_role('os_compute_worker', $get_role('allinone_compute', None))
|
||||||
|
#set compute_nic = $compute.management.interface
|
||||||
|
|
||||||
|
## Network server/worker node IP/interface
|
||||||
|
#set network = $get_role('os_network', None)
|
||||||
|
#set network_server = $get_role('os_network_server', [$network, $controller])
|
||||||
|
#set network_worker = $get_role('os_network_worker', [$network, $compute])
|
||||||
|
|
||||||
|
#set network_server_ip = $network_server.management.ip
|
||||||
|
#set network_server_nic = $network_server.management.interface
|
||||||
|
|
||||||
|
## Network worker node management IP/interface
|
||||||
|
#set network_worker_ip = $network_worker.management.ip
|
||||||
|
#set network_worker_nic = $network_worker.management.interface
|
||||||
|
#set network_worker_tenant_nic = $network_worker.tenant.interface
|
||||||
|
#set network_worker_public_nic = $network_worker.public.interface
|
||||||
|
|
||||||
|
## Database node management IP
|
||||||
|
#set db_role = $get_role('os_ops_database', $controller)
|
||||||
|
#set db_ip = $db_role.management.ip
|
||||||
|
#set db_nic = $db_role.management.interface
|
||||||
|
|
||||||
|
## Message queue node management IP/interface
|
||||||
|
#set msg_queue = $get_role('os_ops_messaging', $controller)
|
||||||
|
#set msg_queue_ip = $msg_queue.management.ip
|
||||||
|
|
||||||
|
## Identity (keystone) node IP/interface
|
||||||
|
#set identity = $get_role('os_identity', $controller)
|
||||||
|
#set identity_ip = $identity.management.ip
|
||||||
|
#set identity_nic = $identity.management.interface
|
||||||
|
|
||||||
|
## Glance node management IP/interface
|
||||||
|
#set glance = $get_role('os_image', $controller)
|
||||||
|
#set glance_ip = $glance.management.ip
|
||||||
|
#set glance_nic = $glance.management.interface
|
||||||
|
|
||||||
|
## Cinder node management IP/interface
|
||||||
|
#set cinder = $get_role('os_block_storage_controller', $controller)
|
||||||
|
#set cinder_controller_ip = $cinder.management.ip
|
||||||
|
#set cinder_controller_nic = $cinder.management.interface
|
||||||
|
|
||||||
|
## Dashboard node management IP/interface
|
||||||
|
#set dash = $get_role('os_dashboard', $controller)
|
||||||
|
#set dash_ip = $dash.management.ip
|
||||||
|
|
||||||
|
## Set services credentials
|
||||||
|
#set db_pass = $getDictValue('service_credentials/mysql/password', 'root')
|
||||||
|
#set mq_username = $getDictValue('service_credentials/rabbitmq/username', 'guest')
|
||||||
|
#set mq_pass = $getDictValue('service_credentials/rabbitmq/password', 'guest')
|
||||||
|
|
||||||
|
## Set Openstack neutron config
|
||||||
|
#set tenant_network_type = $getDictValue('neutron_config/openvswitch/tenant_network_type', 'gre')
|
||||||
|
#set enable_tunneling = True
|
||||||
|
#set tunnel_id_ranges = ''
|
||||||
|
#set vlan_ranges = ''
|
||||||
|
#set bridge_mappings = ''
|
||||||
|
|
||||||
|
#if $tenant_network_type == 'vlan'
|
||||||
|
#set enable_tunneling = False
|
||||||
|
#set bridge_mappings = ','.join($getDictValue('neutron_config/openvswitch/bridge_mappings', ['physnet1:br-eth1']))
|
||||||
|
#set vlan_ranges = ','.join($getDictValue('neutron_config/openvswitch/vlan_ranges', ['physnet1:2700:2999']))
|
||||||
|
#else
|
||||||
|
#set tunnel_id_ranges = ','.join($getDictValue('neutron_config/openvswitch/tunnel_id_ranges', ['1:1000']))
|
||||||
|
#end if
|
||||||
|
|
||||||
|
## Utility functions definition
|
||||||
|
#def get_role($role_name, $default_roles=None)
|
||||||
|
#set target_role = $getVar($role_name, None)
|
||||||
|
#if isinstance($target_role, list)
|
||||||
|
#if $target_role
|
||||||
|
#set target_role = $target_role[0]
|
||||||
|
#else
|
||||||
|
#set target_role = None
|
||||||
|
#end if
|
||||||
|
#end if
|
||||||
|
#if $target_role is None and $default_roles is not None
|
||||||
|
#if isinstance($default_roles, list)
|
||||||
|
#for $role in $default_roles
|
||||||
|
#if $role is not None
|
||||||
|
#set target_role = $role
|
||||||
|
#break
|
||||||
|
#end if
|
||||||
|
#end for
|
||||||
|
#else
|
||||||
|
#set target_role = $default_roles
|
||||||
|
#end if
|
||||||
|
#end if
|
||||||
|
#return $target_role
|
||||||
|
#end def
|
||||||
|
|
||||||
|
#def getDictValue($path, $default_value="")
|
||||||
|
#set keys = str($path).split('/')
|
||||||
|
#set value = $getVar($keys[0], {})
|
||||||
|
|
||||||
|
#if not $value
|
||||||
|
#return $default_value
|
||||||
|
#else
|
||||||
|
#for $key in $keys[1:]
|
||||||
|
#try
|
||||||
|
#set value = $value[$key]
|
||||||
|
#except
|
||||||
|
#return $default_value
|
||||||
|
#end try
|
||||||
|
#end for
|
||||||
|
#end if
|
||||||
|
|
||||||
|
#return $value
|
||||||
|
|
||||||
|
#end def
|
||||||
|
{
|
||||||
|
"name": "base",
|
||||||
|
"description": "Environment used in testing the upstream cookbooks and reference Chef repository",
|
||||||
|
"cookbook_versions": {
|
||||||
|
},
|
||||||
|
"json_class": "Chef::Environment",
|
||||||
|
"chef_type": "environment",
|
||||||
|
"override_attributes": {
|
||||||
|
"compass": {
|
||||||
|
"cluster_id": "$id"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default_attributes": {
|
||||||
|
"local_repo": "",
|
||||||
|
"mysql": {
|
||||||
|
"server_root_password": "$db_pass",
|
||||||
|
"server_debian_password": "$db_pass",
|
||||||
|
"server_repl_password": "$db_pass",
|
||||||
|
"allow_remote_root": true,
|
||||||
|
"root_network_acl": "%"
|
||||||
|
},
|
||||||
|
"collectd": {
|
||||||
|
"server": {
|
||||||
|
"host": "metrics",
|
||||||
|
"port": "4242",
|
||||||
|
"protocol": "tcp"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"memcached": {
|
||||||
|
"bind_interface": "$identity_nic"
|
||||||
|
},
|
||||||
|
"openstack": {
|
||||||
|
"use_databags": false,
|
||||||
|
"auth": {
|
||||||
|
"validate_certs": false
|
||||||
|
},
|
||||||
|
"block-storage": {
|
||||||
|
"syslog": {
|
||||||
|
"use": false
|
||||||
|
},
|
||||||
|
"api": {
|
||||||
|
"ratelimit": "False"
|
||||||
|
},
|
||||||
|
"debug": true
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"use_ssl": "false"
|
||||||
|
},
|
||||||
|
"compute": {
|
||||||
|
"syslog": {
|
||||||
|
"use": false
|
||||||
|
},
|
||||||
|
"libvirt": {
|
||||||
|
"bind_interface": "$compute_nic"
|
||||||
|
},
|
||||||
|
"novnc_proxy": {
|
||||||
|
"bind_interface": "$compute_nic"
|
||||||
|
},
|
||||||
|
"xvpvnc_proxy": {
|
||||||
|
"bind_interface": "$compute_nic"
|
||||||
|
},
|
||||||
|
"ratelimit": {
|
||||||
|
"api": {
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"enabled": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"service_type": "neutron"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"verbose": "True",
|
||||||
|
"debug": "True",
|
||||||
|
"service_plugins": [
|
||||||
|
"router"
|
||||||
|
],
|
||||||
|
"ml2": {
|
||||||
|
"type_drivers": "$tenant_network_type",
|
||||||
|
"tenant_network_types": "$tenant_network_type",
|
||||||
|
"tunnel_id_ranges": "$tunnel_id_ranges",
|
||||||
|
"network_vlan_ranges": "$vlan_ranges",
|
||||||
|
"enable_security_group": "True"
|
||||||
|
},
|
||||||
|
"openvswitch": {
|
||||||
|
"tenant_network_type": "$tenant_network_type",
|
||||||
|
"enable_tunneling": "$enable_tunneling",
|
||||||
|
"tunnel_id_ranges": "$tunnel_id_ranges",
|
||||||
|
"network_vlan_ranges": "$vlan_ranges",
|
||||||
|
"bridge_mappings": "$bridge_mappings",
|
||||||
|
"bind_interface": "$network_worker_tenant_nic"
|
||||||
|
},
|
||||||
|
"l3": {
|
||||||
|
"external_network_bridge_interface": "$network_worker_public_nic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"db": {
|
||||||
|
"bind_interface": "$db_nic",
|
||||||
|
"compute": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"identity": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"orchestration": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"developer_mode": true,
|
||||||
|
"endpoints": {
|
||||||
|
"db": {
|
||||||
|
"host": "$db_ip"
|
||||||
|
},
|
||||||
|
"mq": {
|
||||||
|
"host": "$msg_queue_ip"
|
||||||
|
},
|
||||||
|
"compute-api": {
|
||||||
|
"host": "$controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8774",
|
||||||
|
"path": "/v2/%(tenant_id)s"
|
||||||
|
},
|
||||||
|
"compute-api-bind": {
|
||||||
|
"bind_interface": "$controller_nic"
|
||||||
|
},
|
||||||
|
"compute-ec2-admin": {
|
||||||
|
"host": "$controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8773",
|
||||||
|
"path": "/services/Admin"
|
||||||
|
},
|
||||||
|
"compute-ec2-api": {
|
||||||
|
"host": "$controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8773",
|
||||||
|
"path": "/services/Cloud"
|
||||||
|
},
|
||||||
|
"compute-novnc": {
|
||||||
|
"host": "$controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "6080",
|
||||||
|
"path": "/vnc_auto.html"
|
||||||
|
},
|
||||||
|
"compute-novnc-bind": {
|
||||||
|
"bind_interface": "$controller_nic"
|
||||||
|
},
|
||||||
|
"compute-vnc-bind": {
|
||||||
|
"bind_interface" : "$compute_nic"
|
||||||
|
},
|
||||||
|
"vnc_bind": {
|
||||||
|
"bind_interface": "$controller_nic"
|
||||||
|
},
|
||||||
|
"image-api": {
|
||||||
|
"host": "$glance_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "9292",
|
||||||
|
"path": "/v2"
|
||||||
|
},
|
||||||
|
"image-api-bind": {
|
||||||
|
"bind_interface": "$glance_nic"
|
||||||
|
},
|
||||||
|
"image-registry": {
|
||||||
|
"host": "$glance_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "9191",
|
||||||
|
"path": "/v2"
|
||||||
|
},
|
||||||
|
"image-registry-bind": {
|
||||||
|
"bind_interface": "$glance_nic"
|
||||||
|
},
|
||||||
|
"identity-bind": {
|
||||||
|
"bind_interface": "$identity_nic"
|
||||||
|
},
|
||||||
|
"identity-api": {
|
||||||
|
"host": "$identity_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "5000",
|
||||||
|
"path": "/v2.0"
|
||||||
|
},
|
||||||
|
"identity-admin": {
|
||||||
|
"host": "$identity_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "35357",
|
||||||
|
"path": "/v2.0"
|
||||||
|
},
|
||||||
|
"block-storage-api": {
|
||||||
|
"host": "$cinder_controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8776",
|
||||||
|
"path": "/v1/%(tenant_id)s"
|
||||||
|
},
|
||||||
|
"block-storage-api-bind": {
|
||||||
|
"bind_interface": "$cinder_controller_nic"
|
||||||
|
},
|
||||||
|
"telemetry-api": {
|
||||||
|
"host": "$controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8777",
|
||||||
|
"path": "/v1"
|
||||||
|
},
|
||||||
|
"network-api": {
|
||||||
|
"host": "$network_server_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "9696",
|
||||||
|
"path": ""
|
||||||
|
},
|
||||||
|
"network-api-bind": {
|
||||||
|
"bind_interface": "$network_server_nic"
|
||||||
|
},
|
||||||
|
"orchestration-api": {
|
||||||
|
"host": "$controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8004",
|
||||||
|
"path": "/v1/%(tenant_id)s"
|
||||||
|
},
|
||||||
|
"orchestration-api-cfn": {
|
||||||
|
"host": "$controller_ip",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": "8000",
|
||||||
|
"path": "/v1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"identity": {
|
||||||
|
"admin_user": "admin",
|
||||||
|
"bind_interface": "$identity_nic",
|
||||||
|
"catalog": {
|
||||||
|
"backend": "sql"
|
||||||
|
},
|
||||||
|
"debug": true,
|
||||||
|
"roles": [
|
||||||
|
"admin",
|
||||||
|
"member"
|
||||||
|
],
|
||||||
|
"syslog": {
|
||||||
|
"use": false
|
||||||
|
},
|
||||||
|
"tenants": [
|
||||||
|
"admin",
|
||||||
|
"service",
|
||||||
|
"demo"
|
||||||
|
],
|
||||||
|
"token": {
|
||||||
|
"backend": "sql"
|
||||||
|
},
|
||||||
|
"users": {
|
||||||
|
"admin": {
|
||||||
|
"password": "admin",
|
||||||
|
"default_tenant": "admin",
|
||||||
|
"roles": {
|
||||||
|
"admin": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"demo": {
|
||||||
|
"password": "demo",
|
||||||
|
"default_tenant": "demo",
|
||||||
|
"roles": {
|
||||||
|
"member": [
|
||||||
|
"demo"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"api": {
|
||||||
|
"bind_interface": "$glance_nic"
|
||||||
|
},
|
||||||
|
"debug": true,
|
||||||
|
"registry": {
|
||||||
|
"bind_interface": "$glance_nic"
|
||||||
|
},
|
||||||
|
"syslog": {
|
||||||
|
"use": false
|
||||||
|
},
|
||||||
|
"upload_image": {
|
||||||
|
"cirros": "http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img"
|
||||||
|
},
|
||||||
|
"upload_images": [
|
||||||
|
"cirros"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mq": {
|
||||||
|
"user": "$mq_username",
|
||||||
|
"password": "$mq_pass",
|
||||||
|
"vhost": "/nova",
|
||||||
|
"network": {
|
||||||
|
"service_type": "rabbitmq"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,15 +1,15 @@
|
|||||||
#set controller_role = $get_role('os_compute_controller', $getVar('os_controller', None))
|
#set controller_role = $get_role('os_compute_controller', $get_role('os_controller', None))
|
||||||
|
|
||||||
## Contoller node management IP/interface
|
## Contoller node management IP/interface
|
||||||
#set controller_ip = $controller_role.management.ip
|
#set controller_ip = $controller_role.management.ip
|
||||||
#set controller_nic = $controller_role.management.interface
|
#set controller_nic = $controller_role.management.interface
|
||||||
|
|
||||||
## Compute node management IP/interface
|
## Compute node management IP/interface
|
||||||
#set compute_role = $getVar('os_compute_worker', None)
|
#set compute_role = $get_role('os_compute_worker', None)
|
||||||
#set compute_nic = $compute_role.management.interface
|
#set compute_nic = $compute_role.management.interface
|
||||||
|
|
||||||
## Network server/worker node IP/interface
|
## Network server/worker node IP/interface
|
||||||
#set network = $getVar('os_network', None)
|
#set network = $get_role('os_network', None)
|
||||||
#set network_server_role = $get_role('os_network_server', [$network, $controller_role])
|
#set network_server_role = $get_role('os_network_server', [$network, $controller_role])
|
||||||
#set network_worker_role = $get_role('os_network_worker', [$network, $compute_role])
|
#set network_worker_role = $get_role('os_network_worker', [$network, $compute_role])
|
||||||
|
|
||||||
@ -27,6 +27,13 @@
|
|||||||
|
|
||||||
#def get_role($role_name, $default_roles=None)
|
#def get_role($role_name, $default_roles=None)
|
||||||
#set target_role = $getVar($role_name, None)
|
#set target_role = $getVar($role_name, None)
|
||||||
|
#if isinstance($target_role, list)
|
||||||
|
#if $target_role
|
||||||
|
#set target_role = $target_role[0]
|
||||||
|
#else
|
||||||
|
#set target_role = None
|
||||||
|
#end if
|
||||||
|
#end if
|
||||||
#if $target_role is None and $default_roles is not None:
|
#if $target_role is None and $default_roles is not None:
|
||||||
#if isinstance($default_roles, list)
|
#if isinstance($default_roles, list)
|
||||||
#for $role in $default_roles
|
#for $role in $default_roles
|
||||||
|
7
conf/adapter/ansible_openstack.conf
Normal file
7
conf/adapter/ansible_openstack.conf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
NAME = 'openstack_juno'
|
||||||
|
DISPLAY_NAME = 'Openstack Juno'
|
||||||
|
PARENT = 'openstack'
|
||||||
|
PACKAGE_INSTALLER = 'ansible_installer'
|
||||||
|
OS_INSTALLER = 'cobbler'
|
||||||
|
SUPPORTED_OS_PATTERNS = ['(?i)ubuntu-14\.04.*']
|
||||||
|
DEPLOYABLE = True
|
23
conf/flavor/openstack_ansible.conf
Normal file
23
conf/flavor/openstack_ansible.conf
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
ADAPTER_NAME = 'openstack_juno'
|
||||||
|
FLAVORS = [{
|
||||||
|
'flavor': 'allinone',
|
||||||
|
'display_name': 'All-In-One',
|
||||||
|
'template': 'allinone.tmpl',
|
||||||
|
'roles': ['allinone-compute'],
|
||||||
|
}, {
|
||||||
|
'flavor': 'single-controller',
|
||||||
|
'display_name': 'Single Controller',
|
||||||
|
'template': 'single-controller.tmpl',
|
||||||
|
'roles': [
|
||||||
|
'controller', 'compute', 'network', 'storage'
|
||||||
|
],
|
||||||
|
}, {
|
||||||
|
'flavor': 'multinodes',
|
||||||
|
'display_name': 'Multi-nodes',
|
||||||
|
'template': 'multinodes.tmpl',
|
||||||
|
'roles': [
|
||||||
|
'compute-controller', 'compute-worker', 'network-server',
|
||||||
|
'network-worker', 'database', 'messaging', 'image',
|
||||||
|
'dashboard', 'identity', 'storage-controller', 'storage-volume'
|
||||||
|
],
|
||||||
|
}]
|
14
conf/package_installer/ansible-juno.conf
Normal file
14
conf/package_installer/ansible-juno.conf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
NAME = 'ansible_installer'
|
||||||
|
INSTANCE_NAME = 'ansible_installer'
|
||||||
|
SETTINGS = {
|
||||||
|
'ansible_dir': '/var/ansible',
|
||||||
|
'ansible_run_dir': '/var/ansible/run',
|
||||||
|
'ansible_log_file': 'ansible.log',
|
||||||
|
'ansible_config': 'ansible.cfg',
|
||||||
|
'playbook_file': 'site.yml',
|
||||||
|
'inventory_file': 'inventory.yml',
|
||||||
|
'group_variable': 'all',
|
||||||
|
'etc_hosts_path': 'roles/common/templates/hosts',
|
||||||
|
'runner_dirs': ['global_files', 'roles']
|
||||||
|
}
|
||||||
|
|
66
conf/role/openstack_ansible.conf
Normal file
66
conf/role/openstack_ansible.conf
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
ADAPTER_NAME = 'openstack_juno'
|
||||||
|
ROLES = [{
|
||||||
|
'role': 'allinone-compute',
|
||||||
|
'display_name': 'all in one',
|
||||||
|
'description': 'All in One'
|
||||||
|
}, {
|
||||||
|
'role': 'controller',
|
||||||
|
'display_name': 'controller node',
|
||||||
|
'description': 'Controller Node'
|
||||||
|
}, {
|
||||||
|
'role': 'compute',
|
||||||
|
'display_name': 'compute node',
|
||||||
|
'description': 'Compute Node'
|
||||||
|
}, {
|
||||||
|
'role': 'storage',
|
||||||
|
'display_name': 'storage node',
|
||||||
|
'description': 'Storage Node'
|
||||||
|
}, {
|
||||||
|
'role': 'network',
|
||||||
|
'display_name': 'network node',
|
||||||
|
'description': 'Network Node'
|
||||||
|
}, {
|
||||||
|
'role': 'compute-worker',
|
||||||
|
'display_name': 'Compute worker node',
|
||||||
|
'description': 'Compute worker node'
|
||||||
|
}, {
|
||||||
|
'role': 'compute-controller',
|
||||||
|
'display_name': 'Compute controller node',
|
||||||
|
'description': 'Compute controller node'
|
||||||
|
}, {
|
||||||
|
'role': 'network-server',
|
||||||
|
'display_name': 'Network server node',
|
||||||
|
'description': 'Network server node'
|
||||||
|
}, {
|
||||||
|
'role': 'database',
|
||||||
|
'display_name': 'Database node',
|
||||||
|
'description': 'Database node'
|
||||||
|
}, {
|
||||||
|
'role': 'messaging',
|
||||||
|
'display_name': 'Messaging queue node',
|
||||||
|
'description': 'Messaging queue node'
|
||||||
|
}, {
|
||||||
|
'role': 'image',
|
||||||
|
'display': 'Image node',
|
||||||
|
'description': 'Image node'
|
||||||
|
}, {
|
||||||
|
'role': 'dashboard',
|
||||||
|
'display': 'Dashboard node',
|
||||||
|
'description': 'Dashboard node'
|
||||||
|
}, {
|
||||||
|
'role': 'identity',
|
||||||
|
'display': 'Identity node',
|
||||||
|
'description': 'Identity node'
|
||||||
|
}, {
|
||||||
|
'role': 'storage-controller',
|
||||||
|
'display': 'Storage controller node',
|
||||||
|
'description': 'Storage controller node'
|
||||||
|
}, {
|
||||||
|
'role': 'storage-volume',
|
||||||
|
'display': 'Storage volume node',
|
||||||
|
'description': 'Storage volume node'
|
||||||
|
}, {
|
||||||
|
'role': 'network-worker',
|
||||||
|
'display': 'Network worker node',
|
||||||
|
'description': 'Network worker node'
|
||||||
|
}]
|
@ -0,0 +1,10 @@
|
|||||||
|
#set controllers = $getVar('allinone_compute', [])
|
||||||
|
#if not $isinstance($controllers, list)
|
||||||
|
#set controllers = [$controllers]
|
||||||
|
#end if
|
||||||
|
# allinone
|
||||||
|
#for controller in $controllers
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_hostname = $controller.hostname
|
||||||
|
$controller_ip $controller_hostname
|
||||||
|
#end for
|
@ -0,0 +1,110 @@
|
|||||||
|
#set compute_controllers = $getVar('compute_controller', [])
|
||||||
|
#set compute_workers = $getVar('compute_worker', [])
|
||||||
|
#set network_servers = $getVar('network_server', [])
|
||||||
|
#set network_workers = $getVar('network_worker', [])
|
||||||
|
#set databases = $getVar('database', [])
|
||||||
|
#set messagings = $getVar('messaging', [])
|
||||||
|
#set images = $getVar('image', [])
|
||||||
|
#set dashboards = $getVar('dashboard', [])
|
||||||
|
#set identities = $getVar('identity', [])
|
||||||
|
#set storage_controllers = $getVar('storage_controller', [])
|
||||||
|
#set storage_volumes = $getVar('storage_volume', [])
|
||||||
|
#if not $isinstance($compute_controllers, list)
|
||||||
|
#set compute_controllers = [$compute_controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($compute_workers, list)
|
||||||
|
#set compute_workers = [$compute_workers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($network_servers, list)
|
||||||
|
#set network_servers = [$network_servers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($network_workers, list)
|
||||||
|
#set network_workers = [$network_workers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($databases, list)
|
||||||
|
#set databases = [$databases]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($messagings, list)
|
||||||
|
#set messagings = [$messagings]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($images, list)
|
||||||
|
#set images = [$images]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($dashboards, list)
|
||||||
|
#set dashboards = [$dashboards]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($identities, list)
|
||||||
|
#set identities = [$identities]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storage_controllers, list)
|
||||||
|
#set storage_controllers = [$storage_controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storage_volumes, list)
|
||||||
|
#set storage_volumes = [$storage_volumes]
|
||||||
|
#end if
|
||||||
|
# compute-controller
|
||||||
|
#for worker in $compute_controllers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# database
|
||||||
|
#for worker in $databases
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# messaging
|
||||||
|
#for worker in $messagings
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# storage-controller
|
||||||
|
#for worker in $storage_controllers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# image
|
||||||
|
#for worker in $images
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# identity
|
||||||
|
#for worker in $identities
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# network-server
|
||||||
|
#for worker in $network_servers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# dashboard
|
||||||
|
#for worker in $dashboards
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# storage-volume
|
||||||
|
#for worker in $storage_volumes
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# network-worker
|
||||||
|
#for worker in $network_workers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# compute-worker
|
||||||
|
#for worker in $compute_workers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
@ -0,0 +1,40 @@
|
|||||||
|
#set controllers = $getVar('controller', [])
|
||||||
|
#set computes = $getVar('compute', [])
|
||||||
|
#set storages = $getVar('storage', [])
|
||||||
|
#set networks = $getVar('network', [])
|
||||||
|
#if not $isinstance($controllers, list)
|
||||||
|
#set controllers = [$controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($computes, list)
|
||||||
|
#set computes = [$computes]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storages, list)
|
||||||
|
#set storages = [$storages]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($networks, list)
|
||||||
|
#set networks = [$networks]
|
||||||
|
#end if
|
||||||
|
# controller
|
||||||
|
#for controller in $controllers
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_hostname = $controller.hostname
|
||||||
|
$controller_ip $controller_hostname
|
||||||
|
#end for
|
||||||
|
# compute
|
||||||
|
#for worker in $computes
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# storage
|
||||||
|
#for worker in $storages
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
||||||
|
# network
|
||||||
|
#for worker in $networks
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_ip $worker_hostname
|
||||||
|
#end for
|
@ -0,0 +1,47 @@
|
|||||||
|
#set controllers = $getVar('allinone_compute', [])
|
||||||
|
#set computes = $getVar('allinone_compute', [])
|
||||||
|
#set storages = $getVar('allinone_compute', [])
|
||||||
|
#set networks = $getVar('allinone_compute', [])
|
||||||
|
#if not $isinstance($controllers, list)
|
||||||
|
#set controllers = [$controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($computes, list)
|
||||||
|
#set computes = [$computes]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storages, list)
|
||||||
|
#set storages = [$storages]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($networks, list)
|
||||||
|
#set networks = [$networks]
|
||||||
|
#end if
|
||||||
|
|
||||||
|
#set credentials = $getVar('server_credentials', {})
|
||||||
|
#set username = $credentials.get('username', 'root')
|
||||||
|
#set password = $credentials.get('password', 'root')
|
||||||
|
[controller]
|
||||||
|
#for controller in $controllers
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_hostname = $controller.hostname
|
||||||
|
$controller_hostname ansible_ssh_host=$controller_ip ansible_ssh_user=$username ansible_ssh_passowrd=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[compute]
|
||||||
|
#for compute in $computes
|
||||||
|
#set compute_ip = $compute.management.ip
|
||||||
|
#set compute_hostname = $compute.hostname
|
||||||
|
$compute_hostname ansible_ssh_host=$compute_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[network]
|
||||||
|
#for network in $networks
|
||||||
|
#set network_ip = $network.management.ip
|
||||||
|
#set network_hostname = $network.hostname
|
||||||
|
$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[storage]
|
||||||
|
#for storage in storages
|
||||||
|
#set storage_ip = $storage.management.ip
|
||||||
|
#set storage_hostname = $storage.hostname
|
||||||
|
$storage_hostname ansible_ssh_host=$storage_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
@ -0,0 +1,123 @@
|
|||||||
|
#set compute_controllers = $getVar('compute_controller', [])
|
||||||
|
#set compute_workers = $getVar('compute_worker', [])
|
||||||
|
#set network_servers = $getVar('network_server', [])
|
||||||
|
#set network_workers = $getVar('network_worker', [])
|
||||||
|
#set databases = $getVar('database', [])
|
||||||
|
#set messagings = $getVar('messaging', [])
|
||||||
|
#set images = $getVar('image', [])
|
||||||
|
#set dashboards = $getVar('dashboard', [])
|
||||||
|
#set identities = $getVar('identity', [])
|
||||||
|
#set storage_controllers = $getVar('storage_controller', [])
|
||||||
|
#set storage_volumes = $getVar('storage_volume', [])
|
||||||
|
#if not $isinstance($compute_controllers, list)
|
||||||
|
#set compute_controllers = [$compute_controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($compute_workers, list)
|
||||||
|
#set compute_workers = [$compute_workers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($network_servers, list)
|
||||||
|
#set network_servers = [$network_servers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($network_workers, list)
|
||||||
|
#set network_workers = [$network_workers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($databases, list)
|
||||||
|
#set databases = [$databases]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($messagings, list)
|
||||||
|
#set messagings = [$messagings]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($images, list)
|
||||||
|
#set images = [$images]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($dashboards, list)
|
||||||
|
#set dashboards = [$dashboards]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($identities, list)
|
||||||
|
#set identities = [$identities]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storage_controllers, list)
|
||||||
|
#set storage_controllers = [$storage_controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storage_volumes, list)
|
||||||
|
#set storage_volumes = [$storage_volumes]
|
||||||
|
#end if
|
||||||
|
#set credentials = $getVar('server_credentials', {})
|
||||||
|
#set username = $credentials.get('username', 'root')
|
||||||
|
#set password = $credentials.get('password', 'root')
|
||||||
|
[compute-controller]
|
||||||
|
#for controller in $compute_controllers
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_hostname = $controller.hostname
|
||||||
|
$controller_hostname ansible_ssh_host=$controller_ip ansible_ssh_user=$username ansible_ssh_passowrd=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[compute-worker]
|
||||||
|
#for compute in $compute_workers
|
||||||
|
#set compute_ip = $compute.management.ip
|
||||||
|
#set compute_hostname = $compute.hostname
|
||||||
|
$compute_hostname ansible_ssh_host=$compute_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[network-server]
|
||||||
|
#for network in $network_servers
|
||||||
|
#set network_ip = $network.management.ip
|
||||||
|
#set network_hostname = $network.hostname
|
||||||
|
$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[network-worker]
|
||||||
|
#for network in $network_workers
|
||||||
|
#set network_ip = $network.management.ip
|
||||||
|
#set network_hostname = $network.hostname
|
||||||
|
$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[database]
|
||||||
|
#for worker in $databases
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[messaging]
|
||||||
|
#for worker in $messagings
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[image]
|
||||||
|
#for worker in $images
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[dashboard]
|
||||||
|
#for worker in $dashboards
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[identity]
|
||||||
|
#for worker in $identities
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[storage-controller]
|
||||||
|
#for worker in $storage_controllers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[storage-volume]
|
||||||
|
#for worker in $storage_volumes
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
#set worker_hostname = $worker.hostname
|
||||||
|
$worker_hostname ansible_ssh_host=$worker_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
@ -0,0 +1,47 @@
|
|||||||
|
#set controllers = $getVar('controller', [])
|
||||||
|
#set computes = $getVar('compute', [])
|
||||||
|
#set storages = $getVar('storage', [])
|
||||||
|
#set networks = $getVar('network', [])
|
||||||
|
#if not $isinstance($controllers, list)
|
||||||
|
#set controllers = [$controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($computes, list)
|
||||||
|
#set computes = [$computes]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storages, list)
|
||||||
|
#set storages = [$storages]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($networks, list)
|
||||||
|
#set networks = [$networks]
|
||||||
|
#end if
|
||||||
|
|
||||||
|
#set credentials = $getVar('server_credentials', {})
|
||||||
|
#set username = $credentials.get('username', 'root')
|
||||||
|
#set password = $credentials.get('password', 'root')
|
||||||
|
[controller]
|
||||||
|
#for controller in $controllers
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_hostname = $controller.hostname
|
||||||
|
$controller_hostname ansible_ssh_host=$controller_ip ansible_ssh_user=$username ansible_ssh_passowrd=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[compute]
|
||||||
|
#for compute in $computes
|
||||||
|
#set compute_ip = $compute.management.ip
|
||||||
|
#set compute_hostname = $compute.hostname
|
||||||
|
$compute_hostname ansible_ssh_host=$compute_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[network]
|
||||||
|
#for network in $networks
|
||||||
|
#set network_ip = $network.management.ip
|
||||||
|
#set network_hostname = $network.hostname
|
||||||
|
$network_hostname ansible_ssh_host=$network_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
||||||
|
|
||||||
|
[storage]
|
||||||
|
#for storage in storages
|
||||||
|
#set storage_ip = $storage.management.ip
|
||||||
|
#set storage_hostname = $storage.hostname
|
||||||
|
$storage_hostname ansible_ssh_host=$storage_ip ansible_ssh_user=$username ansible_ssh_password=$password
|
||||||
|
#end for
|
@ -0,0 +1,80 @@
|
|||||||
|
#set controllers = $getVar('allinone_compute', [])
|
||||||
|
#if not $isinstance($controllers, list)
|
||||||
|
#set controllers = [$controllers]
|
||||||
|
#end if
|
||||||
|
|
||||||
|
#for controller in $controllers
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_hostname = $controller.hostname
|
||||||
|
controller_host: $controller_ip
|
||||||
|
#end for
|
||||||
|
#for network in $controllers
|
||||||
|
#set network_external_nic = $network.external.interface
|
||||||
|
#set network_external_subnet = $network.external.subnet
|
||||||
|
#set network_internal_nic = $network.management.interface
|
||||||
|
INTERFACE_NAME: $network_external_nic
|
||||||
|
INTERNAL_INTERFACE: $network_internal_nic
|
||||||
|
#end for
|
||||||
|
|
||||||
|
#set credentials = $getVar('service_credentials', {})
|
||||||
|
#set rabbit_username = $credentials.rabbitmq.username
|
||||||
|
#set rabbit_password = $credentials.rabbitmq.password
|
||||||
|
|
||||||
|
compute_controller_host: "{{ controller_host }}"
|
||||||
|
db_host: "{{ controller_host }}"
|
||||||
|
rabbit_host: "{{ controller_host }}"
|
||||||
|
storage_controller_host: "{{ controller_host }}"
|
||||||
|
image_host: "{{ controller_host }}"
|
||||||
|
identity_host: "{{ controller_host }}"
|
||||||
|
network_server_host: "{{ controller_host }}"
|
||||||
|
dashboard_host: "{{ controller_host }}"
|
||||||
|
|
||||||
|
odl_controller: 10.1.0.15
|
||||||
|
|
||||||
|
DEBUG: False
|
||||||
|
VERBOSE: False
|
||||||
|
NTP_SERVER_LOCAL: "{{ controller_host }}"
|
||||||
|
DB_HOST: "{{ controller_host }}"
|
||||||
|
MQ_BROKER: rabbitmq
|
||||||
|
|
||||||
|
OPENSTACK_REPO: cloudarchive-juno.list
|
||||||
|
ADMIN_TOKEN: admin
|
||||||
|
CEILOMETER_TOKEN: c095d479023a0fd58a54
|
||||||
|
|
||||||
|
RABBIT_PASS: $rabbit_password
|
||||||
|
KEYSTONE_DBPASS: keystone_db_secret
|
||||||
|
DEMO_PASS: demo_secret
|
||||||
|
ADMIN_PASS: admin_secret
|
||||||
|
GLANCE_DBPASS: glance_db_secret
|
||||||
|
GLANCE_PASS: glance_secret
|
||||||
|
NOVA_DBPASS: nova_db_secret
|
||||||
|
NOVA_PASS: nova_secret
|
||||||
|
DASH_DBPASS: dash_db_secret
|
||||||
|
CINDER_DBPASS: cinder_db_secret
|
||||||
|
CINDER_PASS: cinder_secret
|
||||||
|
NEUTRON_DBPASS: neutron_db_secret
|
||||||
|
NEUTRON_PASS: netron_secret
|
||||||
|
NEUTRON_TYPE_DRIVERS: ['flat', 'gre', 'vxlan']
|
||||||
|
NEUTRON_TENANT_NETWORK_TYPES: ['vxlan']
|
||||||
|
#NEUTRON_MECHANISM_DRIVERS: ['opendaylight']
|
||||||
|
NEUTRON_MECHANISM_DRIVERS: ['openvswitch']
|
||||||
|
NEUTRON_TUNNEL_TYPES: ['vxlan']
|
||||||
|
METADATA_SECRET: metadata_secret
|
||||||
|
INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS: 10.1.1.21
|
||||||
|
|
||||||
|
EXTERNAL_NETWORK_CIDR: 203.0.113.0/24
|
||||||
|
EXTERNAL_NETWORK_GATEWAY: 203.0.113.1
|
||||||
|
FLOATING_IP_START: 203.0.113.101
|
||||||
|
FLOATING_IP_END: 203.0.113.200
|
||||||
|
|
||||||
|
build_in_image: http://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
|
||||||
|
build_in_image_name: cirros-0.3.3-x86_64-disk.img
|
||||||
|
|
||||||
|
physical_device: /dev/sdb
|
||||||
|
|
||||||
|
internal_interface: "ansible_{{ INTERNAL_INTERFACE }}"
|
||||||
|
internal_ip: "{{ hostvars[inventory_hostname][internal_interface]['ipv4']['address'] }}"
|
||||||
|
|
||||||
|
odl_username: admin
|
||||||
|
odl_password: admin
|
||||||
|
odl_api_port: 8080
|
@ -0,0 +1,140 @@
|
|||||||
|
#set compute_controllers = $getVar('compute_controller', [])
|
||||||
|
#set compute_workers = $getVar('compute_worker', [])
|
||||||
|
#set network_servers = $getVar('network_server', [])
|
||||||
|
#set network_workers = $getVar('network_worker', [])
|
||||||
|
#set databases = $getVar('database', [])
|
||||||
|
#set messagings = $getVar('messaging', [])
|
||||||
|
#set images = $getVar('image', [])
|
||||||
|
#set dashboards = $getVar('dashboard', [])
|
||||||
|
#set identities = $getVar('identity', [])
|
||||||
|
#set storage_controllers = $getVar('storage_controller', [])
|
||||||
|
#set storage_volumes = $getVar('storage_volume', [])
|
||||||
|
#if not $isinstance($compute_controllers, list)
|
||||||
|
#set compute_controllers = [$compute_controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($compute_workers, list)
|
||||||
|
#set compute_workers = [$compute_workers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($network_servers, list)
|
||||||
|
#set network_servers = [$network_servers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($network_workers, list)
|
||||||
|
#set network_workers = [$network_workers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($databases, list)
|
||||||
|
#set databases = [$databases]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($messagings, list)
|
||||||
|
#set messagings = [$messagings]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($images, list)
|
||||||
|
#set images = [$images]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($dashboards, list)
|
||||||
|
#set dashboards = [$dashboards]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($identities, list)
|
||||||
|
#set identities = [$identities]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storage_controllers, list)
|
||||||
|
#set storage_controllers = [$storage_controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storage_volumes, list)
|
||||||
|
#set storage_volumes = [$storage_volumes]
|
||||||
|
#end if
|
||||||
|
#for worker in $compute_controllers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
compute_controller_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $databases
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
db_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $messagings
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
rabbit_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $storage_controllers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
storage_controller_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $images
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
image_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $identities
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
identity_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $compute_controllers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
compute_controller_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $network_servers
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
network_server_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for worker in $dashboards
|
||||||
|
#set worker_ip = $worker.management.ip
|
||||||
|
dashboard_host: $worker_ip
|
||||||
|
#end for
|
||||||
|
#for network in $network_workers
|
||||||
|
#set network_external_nic = $network.external.interface
|
||||||
|
#set network_internal_nic = $network.management.interface
|
||||||
|
INTERFACE_NAME: $network_external_nic
|
||||||
|
INTERNAL_INTERFACE: $network_internal_nic
|
||||||
|
#end for
|
||||||
|
|
||||||
|
#set credentials = $getVar('service_credentials', {})
|
||||||
|
#set rabbit_username = $credentials.rabbitmq.username
|
||||||
|
#set rabbit_password = $credentials.rabbitmq.password
|
||||||
|
|
||||||
|
odl_controller: 10.1.0.15
|
||||||
|
|
||||||
|
DEBUG: False
|
||||||
|
VERBOSE: False
|
||||||
|
NTP_SERVER_LOCAL: "{{ compute_controller_host }}"
|
||||||
|
DB_HOST: "{{ db_host }}"
|
||||||
|
MQ_BROKER: rabbitmq
|
||||||
|
|
||||||
|
OPENSTACK_REPO: cloudarchive-juno.list
|
||||||
|
ADMIN_TOKEN: admin
|
||||||
|
CEILOMETER_TOKEN: c095d479023a0fd58a54
|
||||||
|
|
||||||
|
RABBIT_PASS: $rabbit_password
|
||||||
|
KEYSTONE_DBPASS: keystone_db_secret
|
||||||
|
DEMO_PASS: demo_secret
|
||||||
|
ADMIN_PASS: admin_secret
|
||||||
|
GLANCE_DBPASS: glance_db_secret
|
||||||
|
GLANCE_PASS: glance_secret
|
||||||
|
NOVA_DBPASS: nova_db_secret
|
||||||
|
NOVA_PASS: nova_secret
|
||||||
|
DASH_DBPASS: dash_db_secret
|
||||||
|
CINDER_DBPASS: cinder_db_secret
|
||||||
|
CINDER_PASS: cinder_secret
|
||||||
|
NEUTRON_DBPASS: neutron_db_secret
|
||||||
|
NEUTRON_PASS: netron_secret
|
||||||
|
NEUTRON_TYPE_DRIVERS: ['flat', 'gre', 'vxlan']
|
||||||
|
NEUTRON_TENANT_NETWORK_TYPES: ['vxlan']
|
||||||
|
#NEUTRON_MECHANISM_DRIVERS: ['opendaylight']
|
||||||
|
NEUTRON_MECHANISM_DRIVERS: ['openvswitch']
|
||||||
|
NEUTRON_TUNNEL_TYPES: ['vxlan']
|
||||||
|
METADATA_SECRET: metadata_secret
|
||||||
|
INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS: 10.1.1.21
|
||||||
|
|
||||||
|
EXTERNAL_NETWORK_CIDR: 203.0.113.0/24
|
||||||
|
EXTERNAL_NETWORK_GATEWAY: 203.0.113.1
|
||||||
|
FLOATING_IP_START: 203.0.113.101
|
||||||
|
FLOATING_IP_END: 203.0.113.200
|
||||||
|
|
||||||
|
build_in_image: http://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
|
||||||
|
build_in_image_name: cirros-0.3.3-x86_64-disk.img
|
||||||
|
|
||||||
|
physical_device: /dev/sdb
|
||||||
|
|
||||||
|
internal_interface: "ansible_{{ INTERNAL_INTERFACE }}"
|
||||||
|
internal_ip: "{{ hostvars[inventory_hostname][internal_interface]['ipv4']['address'] }}"
|
||||||
|
|
||||||
|
odl_username: admin
|
||||||
|
odl_password: admin
|
||||||
|
odl_api_port: 8080
|
@ -0,0 +1,92 @@
|
|||||||
|
#set controllers = $getVar('controller', [])
|
||||||
|
#set computes = $getVar('compute', [])
|
||||||
|
#set networks = $getVar('network', [])
|
||||||
|
#set storages = $getVar('storage', [])
|
||||||
|
#if not $isinstance($controllers, list)
|
||||||
|
#set controllers = [$controllers]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($computes, list)
|
||||||
|
#set computes = [$computes]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($networks, list)
|
||||||
|
#set networks = [$networks]
|
||||||
|
#end if
|
||||||
|
#if not $isinstance($storages, list)
|
||||||
|
#set storages = [$storages]
|
||||||
|
#end if
|
||||||
|
|
||||||
|
#for controller in $controllers
|
||||||
|
#set controller_ip = $controller.management.ip
|
||||||
|
#set controller_hostname = $controller.hostname
|
||||||
|
controller_host: $controller_ip
|
||||||
|
#end for
|
||||||
|
#for network in $networks
|
||||||
|
#set network_external_nic = $network.external.interface
|
||||||
|
#set network_external_subnet = $network.external.subnet
|
||||||
|
#set network_internal_nic = $network.management.interface
|
||||||
|
INTERFACE_NAME: $network_external_nic
|
||||||
|
INTERNAL_INTERFACE: $network_internal_nic
|
||||||
|
#end for
|
||||||
|
|
||||||
|
#set credentials = $getVar('service_credentials', {})
|
||||||
|
#set rabbit_username = $credentials.rabbitmq.username
|
||||||
|
#set rabbit_password = $credentials.rabbitmq.password
|
||||||
|
|
||||||
|
compute_controller_host: "{{ controller_host }}"
|
||||||
|
db_host: "{{ controller_host }}"
|
||||||
|
rabbit_host: "{{ controller_host }}"
|
||||||
|
storage_controller_host: "{{ controller_host }}"
|
||||||
|
image_host: "{{ controller_host }}"
|
||||||
|
identity_host: "{{ controller_host }}"
|
||||||
|
network_server_host: "{{ controller_host }}"
|
||||||
|
dashboard_host: "{{ controller_host }}"
|
||||||
|
odl_controller: 10.1.0.15
|
||||||
|
|
||||||
|
DEBUG: False
|
||||||
|
VERBOSE: False
|
||||||
|
NTP_SERVER_LOCAL: "{{ controller_host }}"
|
||||||
|
DB_HOST: "{{ controller_host }}"
|
||||||
|
MQ_BROKER: rabbitmq
|
||||||
|
|
||||||
|
OPENSTACK_REPO: cloudarchive-juno.list
|
||||||
|
ADMIN_TOKEN: admin
|
||||||
|
CEILOMETER_TOKEN: c095d479023a0fd58a54
|
||||||
|
|
||||||
|
RABBIT_PASS: $rabbit_password
|
||||||
|
KEYSTONE_DBPASS: keystone_db_secret
|
||||||
|
DEMO_PASS: demo_secret
|
||||||
|
ADMIN_PASS: admin_secret
|
||||||
|
GLANCE_DBPASS: glance_db_secret
|
||||||
|
GLANCE_PASS: glance_secret
|
||||||
|
NOVA_DBPASS: nova_db_secret
|
||||||
|
NOVA_PASS: nova_secret
|
||||||
|
DASH_DBPASS: dash_db_secret
|
||||||
|
CINDER_DBPASS: cinder_db_secret
|
||||||
|
CINDER_PASS: cinder_secret
|
||||||
|
NEUTRON_DBPASS: neutron_db_secret
|
||||||
|
NEUTRON_PASS: netron_secret
|
||||||
|
NEUTRON_TYPE_DRIVERS: ['flat', 'gre', 'vxlan']
|
||||||
|
NEUTRON_TENANT_NETWORK_TYPES: ['vxlan']
|
||||||
|
#NEUTRON_MECHANISM_DRIVERS: ['opendaylight']
|
||||||
|
NEUTRON_MECHANISM_DRIVERS: ['openvswitch']
|
||||||
|
NEUTRON_TUNNEL_TYPES: ['vxlan']
|
||||||
|
METADATA_SECRET: metadata_secret
|
||||||
|
INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS: 10.1.1.21
|
||||||
|
|
||||||
|
EXTERNAL_NETWORK_CIDR: 203.0.113.0/24
|
||||||
|
# EXTERNAL_NETWORK_CIDR: $network_external_subnet
|
||||||
|
EXTERNAL_NETWORK_GATEWAY: 203.0.113.1
|
||||||
|
FLOATING_IP_START: 203.0.113.101
|
||||||
|
FLOATING_IP_END: 203.0.113.200
|
||||||
|
|
||||||
|
build_in_image: http://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
|
||||||
|
build_in_image_name: cirros-0.3.3-x86_64-disk.img
|
||||||
|
|
||||||
|
physical_device: /dev/sdb
|
||||||
|
|
||||||
|
internal_interface: "ansible_{{ INTERNAL_INTERFACE }}"
|
||||||
|
internal_ip: "{{ hostvars[inventory_hostname][internal_interface]['ipv4']['address'] }}"
|
||||||
|
|
||||||
|
odl_username: admin
|
||||||
|
odl_password: admin
|
||||||
|
odl_api_port: 8080
|
@ -6,7 +6,7 @@
|
|||||||
#set fsid = str(uuid.uuid4())
|
#set fsid = str(uuid.uuid4())
|
||||||
#set rbd_secret_uuid = str(uuid.uuid4())
|
#set rbd_secret_uuid = str(uuid.uuid4())
|
||||||
|
|
||||||
#set ceph_osd = $getVar('ceph_osd', None)
|
#set ceph_osd = $get_role('ceph_osd', None)
|
||||||
#set public_network_subnet = $ceph_osd.public_network.subnet
|
#set public_network_subnet = $ceph_osd.public_network.subnet
|
||||||
#set cluster_network_subnet = $ceph_osd.cluster_network.subnet
|
#set cluster_network_subnet = $ceph_osd.cluster_network.subnet
|
||||||
|
|
||||||
@ -41,16 +41,16 @@
|
|||||||
|
|
||||||
## OpenStack config
|
## OpenStack config
|
||||||
## Contoller node management IP/interface
|
## Contoller node management IP/interface
|
||||||
#set controller = $get_role('os_compute_controller', $getVar('os_ceph_controller', None))
|
#set controller = $get_role('os_compute_controller', $get_role('os_ceph_controller', None))
|
||||||
#set controller_ip = $controller.management.ip
|
#set controller_ip = $controller.management.ip
|
||||||
#set controller_nic = $controller.management.interface
|
#set controller_nic = $controller.management.interface
|
||||||
|
|
||||||
## Compute node management IP/interface
|
## Compute node management IP/interface
|
||||||
#set compute = $getVar('os_ceph_compute_worker', None)
|
#set compute = $get_role('os_ceph_compute_worker', None)
|
||||||
#set compute_nic = $compute.management.interface
|
#set compute_nic = $compute.management.interface
|
||||||
|
|
||||||
## Network server/worker node IP/interface
|
## Network server/worker node IP/interface
|
||||||
#set network = $getVar('os_network', None)
|
#set network = $get_role('os_network', None)
|
||||||
#set network_server = $get_role('os_network_server', [$network, $controller])
|
#set network_server = $get_role('os_network_server', [$network, $controller])
|
||||||
#set network_worker = $get_role('os_network_worker', [$network, $compute])
|
#set network_worker = $get_role('os_network_worker', [$network, $compute])
|
||||||
|
|
||||||
@ -108,6 +108,13 @@
|
|||||||
## Utility functions definition
|
## Utility functions definition
|
||||||
#def get_role($role_name, $default_roles=None)
|
#def get_role($role_name, $default_roles=None)
|
||||||
#set target_role = $getVar($role_name, None)
|
#set target_role = $getVar($role_name, None)
|
||||||
|
#if isinstance($target_role, list)
|
||||||
|
#if $target_role
|
||||||
|
#set target_role = $target_role[0]
|
||||||
|
#else
|
||||||
|
#set target_role = None
|
||||||
|
#end if
|
||||||
|
#end if
|
||||||
#if $target_role is None and $default_roles is not None
|
#if $target_role is None and $default_roles is not None
|
||||||
#if isinstance($default_roles, list)
|
#if isinstance($default_roles, list)
|
||||||
#for $role in $default_roles
|
#for $role in $default_roles
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
#set controller = $get_role('os_compute_controller', [$getVar('os_controller', None), $getVar('allinone_compute', None)])
|
#set controller = $get_role('os_compute_controller', [$get_role('os_controller', None), $get_role('allinone_compute', None)])
|
||||||
|
|
||||||
## Contoller node management IP/interface
|
## Contoller node management IP/interface
|
||||||
#set controller_ip = $controller.management.ip
|
#set controller_ip = $controller.management.ip
|
||||||
#set controller_nic = $controller.management.interface
|
#set controller_nic = $controller.management.interface
|
||||||
|
|
||||||
## Compute node management IP/interface
|
## Compute node management IP/interface
|
||||||
#set compute = $get_role('os_compute_worker', $getVar('allinone_compute', None))
|
#set compute = $get_role('os_compute_worker', $get_role('allinone_compute', None))
|
||||||
#set compute_nic = $compute.management.interface
|
#set compute_nic = $compute.management.interface
|
||||||
|
|
||||||
## Network server/worker node IP/interface
|
## Network server/worker node IP/interface
|
||||||
#set network = $getVar('os_network', None)
|
#set network = $get_role('os_network', None)
|
||||||
#set network_server = $get_role('os_network_server', [$network, $controller])
|
#set network_server = $get_role('os_network_server', [$network, $controller])
|
||||||
#set network_worker = $get_role('os_network_worker', [$network, $compute])
|
#set network_worker = $get_role('os_network_worker', [$network, $compute])
|
||||||
|
|
||||||
@ -73,6 +73,13 @@
|
|||||||
## Utility functions definition
|
## Utility functions definition
|
||||||
#def get_role($role_name, $default_roles=None)
|
#def get_role($role_name, $default_roles=None)
|
||||||
#set target_role = $getVar($role_name, None)
|
#set target_role = $getVar($role_name, None)
|
||||||
|
#if isinstance($target_role, list)
|
||||||
|
#if $target_role
|
||||||
|
#set target_role = $target_role[0]
|
||||||
|
#else
|
||||||
|
#set target_role = None
|
||||||
|
#end if
|
||||||
|
#end if
|
||||||
#if $target_role is None and $default_roles is not None
|
#if $target_role is None and $default_roles is not None
|
||||||
#if isinstance($default_roles, list)
|
#if isinstance($default_roles, list)
|
||||||
#for $role in $default_roles
|
#for $role in $default_roles
|
||||||
|
Loading…
x
Reference in New Issue
Block a user