update nfv-vim puppet runtime manifests and config files
nfvi would raise openstack alarms/logs to the fm in pods, when it is availiable. following configure changes are required: 1. add "fault_mgmt_plugin_disabled" para in vim config file. Set it "True" when openstack application is not implement, and "False" when it is. 2. add "fault_mgmt_endpoint_disabled" para in alarm and event_log config file. rules are the same with "fault_mgmt_plugin_disabled" 3. add "openstack" and "fm" info to alarms and event_logs config file Story: 2004008 Task: 30954 Depends-On: https://review.opendev.org/#/c/661548/ Change-Id: Iee2a4515336f4ce9b6373d56d4f7a5779664233d Signed-off-by: SidneyAn <ran1.an@intel.com>
This commit is contained in:
parent
a974b35ce4
commit
4f406285e4
|
@ -35,6 +35,8 @@ class platform::nfv {
|
||||||
include ::nfv
|
include ::nfv
|
||||||
include ::nfv::vim
|
include ::nfv::vim
|
||||||
include ::nfv::nfvi
|
include ::nfv::nfvi
|
||||||
|
include ::nfv::alarm
|
||||||
|
include ::nfv::event_log
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,19 @@
|
||||||
class nfv::alarm (
|
class nfv::alarm (
|
||||||
$enabled = false,
|
$enabled = false,
|
||||||
$storage_file = '/var/log/nfv-vim-alarms.log',
|
$storage_file = '/var/log/nfv-vim-alarms.log',
|
||||||
|
$openstack_username = 'admin',
|
||||||
|
$openstack_tenant = 'admin',
|
||||||
|
$openstack_user_domain = 'Default',
|
||||||
|
$openstack_project_domain = 'Default',
|
||||||
|
$openstack_auth_protocol = 'http',
|
||||||
|
$openstack_auth_host = '127.0.0.1',
|
||||||
|
$openstack_auth_port = 5000,
|
||||||
|
$openstack_keyring_service = undef,
|
||||||
|
$fault_mgmt_region_name = 'RegionOne',
|
||||||
|
$fault_mgmt_service_name = 'fm',
|
||||||
|
$fault_mgmt_service_type = 'faultmanagement',
|
||||||
|
$fault_mgmt_endpoint_type = 'admin',
|
||||||
|
$fault_mgmt_endpoint_disabled = false,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
include nfv::params
|
include nfv::params
|
||||||
|
@ -14,6 +27,23 @@ class nfv::alarm (
|
||||||
nfv_plugin_alarm_config {
|
nfv_plugin_alarm_config {
|
||||||
# File-Storage Information
|
# File-Storage Information
|
||||||
'File-Storage/file': value => $storage_file;
|
'File-Storage/file': value => $storage_file;
|
||||||
|
|
||||||
|
# OpenStack Authentication Information
|
||||||
|
'openstack/username': value => $openstack_username;
|
||||||
|
'openstack/tenant': value => $openstack_tenant;
|
||||||
|
'openstack/user_domain_name': value => $openstack_user_domain;
|
||||||
|
'openstack/project_domain_name': value => $openstack_project_domain;
|
||||||
|
'openstack/authorization_protocol': value => $openstack_auth_protocol;
|
||||||
|
'openstack/authorization_ip': value => $openstack_auth_host;
|
||||||
|
'openstack/authorization_port': value => $openstack_auth_port;
|
||||||
|
'openstack/keyring_service': value => $openstack_keyring_service;
|
||||||
|
|
||||||
|
# Fault Management Information
|
||||||
|
'fm/region_name': value => $fault_mgmt_region_name;
|
||||||
|
'fm/service_name': value => $fault_mgmt_service_name;
|
||||||
|
'fm/service_type': value => $fault_mgmt_service_type;
|
||||||
|
'fm/endpoint_type': value => $fault_mgmt_endpoint_type;
|
||||||
|
'fm/endpoint_disabled': value => $fault_mgmt_endpoint_disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if $enabled {
|
if $enabled {
|
||||||
|
|
|
@ -7,6 +7,19 @@
|
||||||
class nfv::event_log (
|
class nfv::event_log (
|
||||||
$enabled = false,
|
$enabled = false,
|
||||||
$storage_file = '/var/log/nfv-vim-events.log',
|
$storage_file = '/var/log/nfv-vim-events.log',
|
||||||
|
$openstack_username = 'admin',
|
||||||
|
$openstack_tenant = 'admin',
|
||||||
|
$openstack_user_domain = 'Default',
|
||||||
|
$openstack_project_domain = 'Default',
|
||||||
|
$openstack_auth_protocol = 'http',
|
||||||
|
$openstack_auth_host = '127.0.0.1',
|
||||||
|
$openstack_auth_port = 5000,
|
||||||
|
$openstack_keyring_service = undef,
|
||||||
|
$fault_mgmt_region_name = 'RegionOne',
|
||||||
|
$fault_mgmt_service_name = 'fm',
|
||||||
|
$fault_mgmt_service_type = 'faultmanagement',
|
||||||
|
$fault_mgmt_endpoint_type = 'admin',
|
||||||
|
$fault_mgmt_endpoint_disabled = false,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
include nfv::params
|
include nfv::params
|
||||||
|
@ -14,6 +27,23 @@ class nfv::event_log (
|
||||||
nfv_plugin_event_log_config {
|
nfv_plugin_event_log_config {
|
||||||
# File-Storage Information
|
# File-Storage Information
|
||||||
'File-Storage/file': value => $storage_file;
|
'File-Storage/file': value => $storage_file;
|
||||||
|
|
||||||
|
# OpenStack Authentication Information
|
||||||
|
'openstack/username': value => $openstack_username;
|
||||||
|
'openstack/tenant': value => $openstack_tenant;
|
||||||
|
'openstack/user_domain_name': value => $openstack_user_domain;
|
||||||
|
'openstack/project_domain_name': value => $openstack_project_domain;
|
||||||
|
'openstack/authorization_protocol': value => $openstack_auth_protocol;
|
||||||
|
'openstack/authorization_ip': value => $openstack_auth_host;
|
||||||
|
'openstack/authorization_port': value => $openstack_auth_port;
|
||||||
|
'openstack/keyring_service': value => $openstack_keyring_service;
|
||||||
|
|
||||||
|
# Fault Management Information
|
||||||
|
'fm/region_name': value => $fault_mgmt_region_name;
|
||||||
|
'fm/service_name': value => $fault_mgmt_service_name;
|
||||||
|
'fm/service_type': value => $fault_mgmt_service_type;
|
||||||
|
'fm/endpoint_type': value => $fault_mgmt_endpoint_type;
|
||||||
|
'fm/endpoint_disabled': value => $fault_mgmt_endpoint_disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if $enabled {
|
if $enabled {
|
||||||
|
|
|
@ -25,6 +25,7 @@ class nfv::vim (
|
||||||
$compute_plugin_disabled = false,
|
$compute_plugin_disabled = false,
|
||||||
$network_plugin_disabled = false,
|
$network_plugin_disabled = false,
|
||||||
$guest_plugin_disabled = false,
|
$guest_plugin_disabled = false,
|
||||||
|
$fault_mgmt_plugin_disabled = false,
|
||||||
$vim_rpc_ip = '127.0.0.1',
|
$vim_rpc_ip = '127.0.0.1',
|
||||||
$vim_rpc_port = 4343,
|
$vim_rpc_port = 4343,
|
||||||
$vim_api_ip = '0.0.0.0',
|
$vim_api_ip = '0.0.0.0',
|
||||||
|
@ -70,6 +71,7 @@ class nfv::vim (
|
||||||
'nfvi/compute_plugin_disabled': value => $compute_plugin_disabled;
|
'nfvi/compute_plugin_disabled': value => $compute_plugin_disabled;
|
||||||
'nfvi/network_plugin_disabled': value => $network_plugin_disabled;
|
'nfvi/network_plugin_disabled': value => $network_plugin_disabled;
|
||||||
'nfvi/guest_plugin_disabled': value => $guest_plugin_disabled;
|
'nfvi/guest_plugin_disabled': value => $guest_plugin_disabled;
|
||||||
|
'nfvi/fault_mgmt_plugin_disabled': value => $fault_mgmt_plugin_disabled;
|
||||||
|
|
||||||
# INSTANCE CONFIGURATION
|
# INSTANCE CONFIGURATION
|
||||||
'instance-configuration/max_live_migrate_wait_in_secs': value => $instance_max_live_migrate_wait_in_secs;
|
'instance-configuration/max_live_migrate_wait_in_secs': value => $instance_max_live_migrate_wait_in_secs;
|
||||||
|
|
|
@ -83,145 +83,140 @@ class NfvPuppet(openstack.OpenstackBasePuppet):
|
||||||
self._to_create_services(),
|
self._to_create_services(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if self._kubernetes_enabled():
|
if utils.is_openstack_applied(self.dbapi):
|
||||||
if utils.is_openstack_applied(self.dbapi):
|
helm_data = helm.HelmOperatorData(self.dbapi)
|
||||||
helm_data = helm.HelmOperatorData(self.dbapi)
|
|
||||||
|
|
||||||
# The openstack services are authenticated with pod based
|
# The openstack services are authenticated with pod based
|
||||||
# keystone.
|
# keystone.
|
||||||
keystone_auth_data = helm_data.get_keystone_auth_data()
|
keystone_auth_data = helm_data.get_keystone_auth_data()
|
||||||
openstack_auth_config = {
|
openstack_auth_config = {
|
||||||
'nfv::nfvi::openstack_username':
|
'nfv::nfvi::openstack_username':
|
||||||
keystone_auth_data['admin_user_name'],
|
keystone_auth_data['admin_user_name'],
|
||||||
'nfv::nfvi::openstack_tenant':
|
'nfv::nfvi::openstack_tenant':
|
||||||
keystone_auth_data['admin_project_name'],
|
keystone_auth_data['admin_project_name'],
|
||||||
'nfv::nfvi::openstack_auth_host':
|
'nfv::nfvi::openstack_auth_host':
|
||||||
keystone_auth_data['auth_host'],
|
keystone_auth_data['auth_host'],
|
||||||
'nfv::nfvi::openstack_user_domain':
|
'nfv::nfvi::openstack_user_domain':
|
||||||
keystone_auth_data['admin_user_domain'],
|
keystone_auth_data['admin_user_domain'],
|
||||||
'nfv::nfvi::openstack_project_domain':
|
'nfv::nfvi::openstack_project_domain':
|
||||||
keystone_auth_data['admin_project_domain'],
|
keystone_auth_data['admin_project_domain'],
|
||||||
'nfv::nfvi::openstack_keyring_service':
|
'nfv::nfvi::openstack_keyring_service':
|
||||||
self.PLATFORM_KEYRING_SERVICE,
|
self.PLATFORM_KEYRING_SERVICE,
|
||||||
}
|
|
||||||
config.update(openstack_auth_config)
|
|
||||||
|
|
||||||
# Nova is running in a pod
|
'nfv::alarm::openstack_username':
|
||||||
nova_endpoint_data = helm_data.get_nova_endpoint_data()
|
keystone_auth_data['admin_user_name'],
|
||||||
nova_config = {
|
'nfv::alarm::openstack_tenant':
|
||||||
'nfv::nfvi::nova_endpoint_override':
|
keystone_auth_data['admin_project_name'],
|
||||||
nova_endpoint_data['endpoint_override'],
|
'nfv::alarm::openstack_auth_host':
|
||||||
'nfv::nfvi::nova_region_name':
|
keystone_auth_data['auth_host'],
|
||||||
nova_endpoint_data['region_name'],
|
'nfv::alarm::openstack_user_domain':
|
||||||
}
|
keystone_auth_data['admin_user_domain'],
|
||||||
config.update(nova_config)
|
'nfv::alarm::openstack_project_domain':
|
||||||
|
keystone_auth_data['admin_project_domain'],
|
||||||
|
'nfv::alarm::openstack_keyring_service':
|
||||||
|
self.PLATFORM_KEYRING_SERVICE,
|
||||||
|
|
||||||
# Cinder is running in a pod
|
'nfv::event_log::openstack_username':
|
||||||
cinder_endpoint_data = helm_data.get_cinder_endpoint_data()
|
keystone_auth_data['admin_user_name'],
|
||||||
cinder_config = {
|
'nfv::event_log::openstack_tenant':
|
||||||
'nfv::nfvi::cinder_region_name':
|
keystone_auth_data['admin_project_name'],
|
||||||
cinder_endpoint_data['region_name'],
|
'nfv::event_log::openstack_auth_host':
|
||||||
'nfv::nfvi::cinder_service_name':
|
keystone_auth_data['auth_host'],
|
||||||
cinder_endpoint_data['service_name'],
|
'nfv::event_log::openstack_user_domain':
|
||||||
'nfv::nfvi::cinder_service_type':
|
keystone_auth_data['admin_user_domain'],
|
||||||
cinder_endpoint_data['service_type'],
|
'nfv::event_log::openstack_project_domain':
|
||||||
}
|
keystone_auth_data['admin_project_domain'],
|
||||||
config.update(cinder_config)
|
'nfv::event_log::openstack_keyring_service':
|
||||||
|
self.PLATFORM_KEYRING_SERVICE,
|
||||||
|
}
|
||||||
|
config.update(openstack_auth_config)
|
||||||
|
|
||||||
# Glance is running in a pod
|
# Nova is running in a pod
|
||||||
glance_endpoint_data = helm_data.get_glance_endpoint_data()
|
nova_endpoint_data = helm_data.get_nova_endpoint_data()
|
||||||
glance_config = {
|
nova_config = {
|
||||||
'nfv::nfvi::glance_region_name':
|
'nfv::nfvi::nova_endpoint_override':
|
||||||
glance_endpoint_data['region_name'],
|
nova_endpoint_data['endpoint_override'],
|
||||||
'nfv::nfvi::glance_service_name':
|
'nfv::nfvi::nova_region_name':
|
||||||
glance_endpoint_data['service_name'],
|
nova_endpoint_data['region_name'],
|
||||||
'nfv::nfvi::glance_service_type':
|
}
|
||||||
glance_endpoint_data['service_type'],
|
config.update(nova_config)
|
||||||
}
|
|
||||||
config.update(glance_config)
|
|
||||||
|
|
||||||
# Neutron is running in a pod
|
# Cinder is running in a pod
|
||||||
neutron_endpoint_data = helm_data.get_neutron_endpoint_data()
|
cinder_endpoint_data = helm_data.get_cinder_endpoint_data()
|
||||||
neutron_config = {
|
cinder_config = {
|
||||||
'nfv::nfvi::neutron_region_name':
|
'nfv::nfvi::cinder_region_name':
|
||||||
neutron_endpoint_data['region_name'],
|
cinder_endpoint_data['region_name'],
|
||||||
}
|
'nfv::nfvi::cinder_service_name':
|
||||||
config.update(neutron_config)
|
cinder_endpoint_data['service_name'],
|
||||||
|
'nfv::nfvi::cinder_service_type':
|
||||||
|
cinder_endpoint_data['service_type'],
|
||||||
|
}
|
||||||
|
config.update(cinder_config)
|
||||||
|
|
||||||
# Heat is running in a pod
|
# Glance is running in a pod
|
||||||
heat_endpoint_data = helm_data.get_heat_endpoint_data()
|
glance_endpoint_data = helm_data.get_glance_endpoint_data()
|
||||||
heat_config = {
|
glance_config = {
|
||||||
'nfv::nfvi::heat_region_name':
|
'nfv::nfvi::glance_region_name':
|
||||||
heat_endpoint_data['region_name'],
|
glance_endpoint_data['region_name'],
|
||||||
}
|
'nfv::nfvi::glance_service_name':
|
||||||
config.update(heat_config)
|
glance_endpoint_data['service_name'],
|
||||||
|
'nfv::nfvi::glance_service_type':
|
||||||
|
glance_endpoint_data['service_type'],
|
||||||
|
}
|
||||||
|
config.update(glance_config)
|
||||||
|
|
||||||
# Ceilometer is running in a pod
|
# Neutron is running in a pod
|
||||||
ceilometer_endpoint_data = \
|
neutron_endpoint_data = helm_data.get_neutron_endpoint_data()
|
||||||
helm_data.get_ceilometer_endpoint_data()
|
neutron_config = {
|
||||||
ceilometer_config = {
|
'nfv::nfvi::neutron_region_name':
|
||||||
'nfv::nfvi::ceilometer_region_name':
|
neutron_endpoint_data['region_name'],
|
||||||
ceilometer_endpoint_data['region_name'],
|
}
|
||||||
}
|
config.update(neutron_config)
|
||||||
config.update(ceilometer_config)
|
|
||||||
|
|
||||||
# The openstack rabbitmq is running in a pod
|
# Heat is running in a pod
|
||||||
nova_oslo_messaging_data = \
|
heat_endpoint_data = helm_data.get_heat_endpoint_data()
|
||||||
helm_data.get_nova_oslo_messaging_data()
|
heat_config = {
|
||||||
rabbit_config = {
|
'nfv::nfvi::heat_region_name':
|
||||||
'nfv::nfvi::rabbit_host':
|
heat_endpoint_data['region_name'],
|
||||||
nova_oslo_messaging_data['host'],
|
}
|
||||||
'nfv::nfvi::rabbit_port':
|
config.update(heat_config)
|
||||||
nova_oslo_messaging_data['port'],
|
|
||||||
'nfv::nfvi::rabbit_virtual_host':
|
|
||||||
nova_oslo_messaging_data['virt_host'],
|
|
||||||
'nfv::nfvi::rabbit_userid':
|
|
||||||
nova_oslo_messaging_data['username'],
|
|
||||||
'nfv::nfvi::rabbit_password':
|
|
||||||
nova_oslo_messaging_data['password'],
|
|
||||||
}
|
|
||||||
config.update(rabbit_config)
|
|
||||||
|
|
||||||
# Listen to nova api proxy on management address
|
# Ceilometer is running in a pod
|
||||||
nova_api_proxy_config = {
|
ceilometer_endpoint_data = \
|
||||||
'nfv::nfvi::compute_rest_api_host':
|
helm_data.get_ceilometer_endpoint_data()
|
||||||
self._get_management_address(),
|
ceilometer_config = {
|
||||||
}
|
'nfv::nfvi::ceilometer_region_name':
|
||||||
config.update(nova_api_proxy_config)
|
ceilometer_endpoint_data['region_name'],
|
||||||
else:
|
}
|
||||||
# The openstack auth info is still required as the VIM will
|
config.update(ceilometer_config)
|
||||||
# audit some keystone entities (e.g. tenants). Point it to
|
|
||||||
# the platform keystone.
|
|
||||||
openstack_auth_config = {
|
|
||||||
'nfv::nfvi::openstack_username':
|
|
||||||
self._operator.keystone.get_admin_user_name(),
|
|
||||||
'nfv::nfvi::openstack_tenant':
|
|
||||||
self._operator.keystone.get_admin_project_name(),
|
|
||||||
'nfv::nfvi::openstack_auth_host':
|
|
||||||
self._keystone_auth_address(),
|
|
||||||
'nfv::nfvi::openstack_user_domain':
|
|
||||||
self._operator.keystone.get_admin_user_domain(),
|
|
||||||
'nfv::nfvi::openstack_project_domain':
|
|
||||||
self._operator.keystone.get_admin_project_domain(),
|
|
||||||
'nfv::nfvi::openstack_keyring_service':
|
|
||||||
self.PLATFORM_KEYRING_SERVICE,
|
|
||||||
}
|
|
||||||
config.update(openstack_auth_config)
|
|
||||||
|
|
||||||
vim_disabled = {
|
# The openstack rabbitmq is running in a pod
|
||||||
# Disable VIM plugins for resources not yet active.
|
nova_oslo_messaging_data = \
|
||||||
'nfv::vim::block_storage_plugin_disabled': True,
|
helm_data.get_nova_oslo_messaging_data()
|
||||||
'nfv::vim::compute_plugin_disabled': True,
|
rabbit_config = {
|
||||||
'nfv::vim::network_plugin_disabled': True,
|
'nfv::nfvi::rabbit_host':
|
||||||
'nfv::vim::image_plugin_disabled': True,
|
nova_oslo_messaging_data['host'],
|
||||||
'nfv::vim::guest_plugin_disabled': True,
|
'nfv::nfvi::rabbit_port':
|
||||||
'nfv::nfvi::nova_endpoint_disabled': True,
|
nova_oslo_messaging_data['port'],
|
||||||
'nfv::nfvi::neutron_endpoint_disabled': True,
|
'nfv::nfvi::rabbit_virtual_host':
|
||||||
'nfv::nfvi::cinder_endpoint_disabled': True,
|
nova_oslo_messaging_data['virt_host'],
|
||||||
}
|
'nfv::nfvi::rabbit_userid':
|
||||||
config.update(vim_disabled)
|
nova_oslo_messaging_data['username'],
|
||||||
|
'nfv::nfvi::rabbit_password':
|
||||||
|
nova_oslo_messaging_data['password'],
|
||||||
|
}
|
||||||
|
config.update(rabbit_config)
|
||||||
|
|
||||||
|
# Listen to nova api proxy on management address
|
||||||
|
nova_api_proxy_config = {
|
||||||
|
'nfv::nfvi::compute_rest_api_host':
|
||||||
|
self._get_management_address(),
|
||||||
|
}
|
||||||
|
config.update(nova_api_proxy_config)
|
||||||
else:
|
else:
|
||||||
# The openstack services are authenticated with platform keystone.
|
# The openstack auth info is still required as the VIM will
|
||||||
|
# audit some keystone entities (e.g. tenants). Point it to
|
||||||
|
# the platform keystone.
|
||||||
openstack_auth_config = {
|
openstack_auth_config = {
|
||||||
'nfv::nfvi::openstack_username':
|
'nfv::nfvi::openstack_username':
|
||||||
self._operator.keystone.get_admin_user_name(),
|
self._operator.keystone.get_admin_user_name(),
|
||||||
|
@ -238,33 +233,21 @@ class NfvPuppet(openstack.OpenstackBasePuppet):
|
||||||
}
|
}
|
||||||
config.update(openstack_auth_config)
|
config.update(openstack_auth_config)
|
||||||
|
|
||||||
openstack_config = {
|
vim_disabled = {
|
||||||
'nfv::nfvi::nova_endpoint_override':
|
# Disable VIM plugins for resources not yet active.
|
||||||
self._get_nova_endpoint_url(),
|
'nfv::vim::block_storage_plugin_disabled': True,
|
||||||
'nfv::nfvi::nova_region_name':
|
'nfv::vim::compute_plugin_disabled': True,
|
||||||
self._operator.nova.get_region_name(),
|
'nfv::vim::network_plugin_disabled': True,
|
||||||
'nfv::nfvi::cinder_region_name':
|
'nfv::vim::image_plugin_disabled': True,
|
||||||
self._operator.cinder.get_region_name(),
|
'nfv::vim::guest_plugin_disabled': True,
|
||||||
'nfv::nfvi::cinder_service_name':
|
'nfv::vim::fault_mgmt_plugin_disabled': True,
|
||||||
self._operator.cinder.get_service_name_v2(),
|
'nfv::nfvi::nova_endpoint_disabled': True,
|
||||||
'nfv::nfvi::cinder_service_type':
|
'nfv::nfvi::neutron_endpoint_disabled': True,
|
||||||
self._operator.cinder.get_service_type_v2(),
|
'nfv::nfvi::cinder_endpoint_disabled': True,
|
||||||
'nfv::nfvi::cinder_endpoint_disabled':
|
'nfv::alarm::fault_mgmt_endpoint_disabled': True,
|
||||||
not self._operator.cinder.is_service_enabled(),
|
'nfv::event_log::fault_mgmt_endpoint_disabled': True,
|
||||||
'nfv::nfvi::glance_region_name':
|
|
||||||
self._operator.glance.get_region_name(),
|
|
||||||
'nfv::nfvi::glance_service_name':
|
|
||||||
self._operator.glance.get_service_name(),
|
|
||||||
'nfv::nfvi::glance_service_type':
|
|
||||||
self._operator.glance.get_service_type(),
|
|
||||||
'nfv::nfvi::neutron_region_name':
|
|
||||||
self._operator.neutron.get_region_name(),
|
|
||||||
'nfv::nfvi::heat_region_name':
|
|
||||||
self._operator.heat.get_region_name(),
|
|
||||||
'nfv::nfvi::ceilometer_region_name':
|
|
||||||
self._operator.ceilometer.get_region_name(),
|
|
||||||
}
|
}
|
||||||
config.update(openstack_config)
|
config.update(vim_disabled)
|
||||||
|
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue