nova: Split out metadata to a separate container
This is needed for introducing standalone uWSGI Change-Id: I7c7213eed10dc408238071a43fd89d5e66665e7b
This commit is contained in:
parent
31ab71ac40
commit
5c975611f4
@ -211,6 +211,9 @@ nova
|
|||||||
[nova-conductor:children]
|
[nova-conductor:children]
|
||||||
nova
|
nova
|
||||||
|
|
||||||
|
[nova-metadata:children]
|
||||||
|
nova
|
||||||
|
|
||||||
[nova-super-conductor:children]
|
[nova-super-conductor:children]
|
||||||
nova
|
nova
|
||||||
|
|
||||||
|
@ -229,6 +229,9 @@ nova
|
|||||||
[nova-conductor:children]
|
[nova-conductor:children]
|
||||||
nova
|
nova
|
||||||
|
|
||||||
|
[nova-metadata:children]
|
||||||
|
nova
|
||||||
|
|
||||||
[nova-super-conductor:children]
|
[nova-super-conductor:children]
|
||||||
nova
|
nova
|
||||||
|
|
||||||
|
@ -25,6 +25,15 @@ nova_services:
|
|||||||
port: "{{ nova_api_public_port }}"
|
port: "{{ nova_api_public_port }}"
|
||||||
listen_port: "{{ nova_api_listen_port }}"
|
listen_port: "{{ nova_api_listen_port }}"
|
||||||
tls_backend: "{{ nova_enable_tls_backend }}"
|
tls_backend: "{{ nova_enable_tls_backend }}"
|
||||||
|
nova-metadata:
|
||||||
|
container_name: "nova_metadata"
|
||||||
|
group: "nova-metadata"
|
||||||
|
image: "{{ nova_api_image_full }}"
|
||||||
|
enabled: True
|
||||||
|
volumes: "{{ nova_metadata_default_volumes + nova_metadata_extra_volumes }}"
|
||||||
|
dimensions: "{{ nova_metadata_dimensions }}"
|
||||||
|
healthcheck: "{{ nova_metadata_healthcheck }}"
|
||||||
|
haproxy:
|
||||||
nova_metadata:
|
nova_metadata:
|
||||||
enabled: "{{ enable_nova }}"
|
enabled: "{{ enable_nova }}"
|
||||||
mode: "http"
|
mode: "http"
|
||||||
@ -118,6 +127,7 @@ nova_api_tag: "{{ nova_tag }}"
|
|||||||
nova_api_image_full: "{{ nova_api_image }}:{{ nova_api_tag }}"
|
nova_api_image_full: "{{ nova_api_image }}:{{ nova_api_tag }}"
|
||||||
|
|
||||||
nova_api_dimensions: "{{ default_container_dimensions }}"
|
nova_api_dimensions: "{{ default_container_dimensions }}"
|
||||||
|
nova_metadata_dimensions: "{{ default_container_dimensions }}"
|
||||||
nova_scheduler_dimensions: "{{ default_container_dimensions }}"
|
nova_scheduler_dimensions: "{{ default_container_dimensions }}"
|
||||||
nova_super_conductor_dimensions: "{{ default_container_dimensions }}"
|
nova_super_conductor_dimensions: "{{ default_container_dimensions }}"
|
||||||
|
|
||||||
@ -134,6 +144,19 @@ nova_api_healthcheck:
|
|||||||
test: "{% if nova_api_enable_healthchecks | bool %}{{ nova_api_healthcheck_test }}{% else %}NONE{% endif %}"
|
test: "{% if nova_api_enable_healthchecks | bool %}{{ nova_api_healthcheck_test }}{% else %}NONE{% endif %}"
|
||||||
timeout: "{{ nova_api_healthcheck_timeout }}"
|
timeout: "{{ nova_api_healthcheck_timeout }}"
|
||||||
|
|
||||||
|
nova_metadata_enable_healthchecks: "{{ enable_container_healthchecks }}"
|
||||||
|
nova_metadata_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
|
||||||
|
nova_metadata_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
|
||||||
|
nova_metadata_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
|
||||||
|
nova_metadata_healthcheck_test: ["CMD-SHELL", "healthcheck_curl {{ 'https' if nova_enable_tls_backend | bool else 'http' }}://{{ api_interface_address | put_address_in_context('url') }}:{{ nova_metadata_listen_port }} "]
|
||||||
|
nova_metadata_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
|
||||||
|
nova_metadata_healthcheck:
|
||||||
|
interval: "{{ nova_metadata_healthcheck_interval }}"
|
||||||
|
retries: "{{ nova_metadata_healthcheck_retries }}"
|
||||||
|
start_period: "{{ nova_metadata_healthcheck_start_period }}"
|
||||||
|
test: "{% if nova_metadata_enable_healthchecks | bool %}{{ nova_metadata_healthcheck_test }}{% else %}NONE{% endif %}"
|
||||||
|
timeout: "{{ nova_metadata_healthcheck_timeout }}"
|
||||||
|
|
||||||
nova_scheduler_enable_healthchecks: "{{ enable_container_healthchecks }}"
|
nova_scheduler_enable_healthchecks: "{{ enable_container_healthchecks }}"
|
||||||
nova_scheduler_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
|
nova_scheduler_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
|
||||||
nova_scheduler_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
|
nova_scheduler_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
|
||||||
@ -167,6 +190,12 @@ nova_api_default_volumes:
|
|||||||
- "/lib/modules:/lib/modules:ro"
|
- "/lib/modules:/lib/modules:ro"
|
||||||
- "kolla_logs:/var/log/kolla/"
|
- "kolla_logs:/var/log/kolla/"
|
||||||
- "{{ kolla_dev_repos_directory ~ '/nova:/dev-mode/nova' if nova_dev_mode | bool else '' }}"
|
- "{{ kolla_dev_repos_directory ~ '/nova:/dev-mode/nova' if nova_dev_mode | bool else '' }}"
|
||||||
|
nova_metadata_default_volumes:
|
||||||
|
- "{{ node_config_directory }}/nova-metadata/:{{ container_config_directory }}/:ro"
|
||||||
|
- "/etc/localtime:/etc/localtime:ro"
|
||||||
|
- "{{ '/etc/timezone:/etc/timezone:ro' if ansible_facts.os_family == 'Debian' else '' }}"
|
||||||
|
- "kolla_logs:/var/log/kolla/"
|
||||||
|
- "{{ kolla_dev_repos_directory ~ '/nova:/dev-mode/nova' if nova_dev_mode | bool else '' }}"
|
||||||
nova_scheduler_default_volumes:
|
nova_scheduler_default_volumes:
|
||||||
- "{{ node_config_directory }}/nova-scheduler/:{{ container_config_directory }}/:ro"
|
- "{{ node_config_directory }}/nova-scheduler/:{{ container_config_directory }}/:ro"
|
||||||
- "/etc/localtime:/etc/localtime:ro"
|
- "/etc/localtime:/etc/localtime:ro"
|
||||||
@ -189,6 +218,7 @@ nova_api_bootstrap_default_volumes:
|
|||||||
|
|
||||||
nova_extra_volumes: "{{ default_extra_volumes }}"
|
nova_extra_volumes: "{{ default_extra_volumes }}"
|
||||||
nova_api_extra_volumes: "{{ nova_extra_volumes }}"
|
nova_api_extra_volumes: "{{ nova_extra_volumes }}"
|
||||||
|
nova_metadata_extra_volumes: "{{ nova_extra_volumes }}"
|
||||||
nova_scheduler_extra_volumes: "{{ nova_extra_volumes }}"
|
nova_scheduler_extra_volumes: "{{ nova_extra_volumes }}"
|
||||||
nova_super_conductor_extra_volumes: "{{ nova_extra_volumes }}"
|
nova_super_conductor_extra_volumes: "{{ nova_extra_volumes }}"
|
||||||
# Used by bootstrapping containers.
|
# Used by bootstrapping containers.
|
||||||
|
@ -49,3 +49,20 @@
|
|||||||
healthcheck: "{{ service.healthcheck | default(omit) }}"
|
healthcheck: "{{ service.healthcheck | default(omit) }}"
|
||||||
when:
|
when:
|
||||||
- kolla_action != "upgrade" or not nova_safety_upgrade | bool
|
- kolla_action != "upgrade" or not nova_safety_upgrade | bool
|
||||||
|
|
||||||
|
- name: Restart nova-metadata container
|
||||||
|
vars:
|
||||||
|
service_name: "nova-metadata"
|
||||||
|
service: "{{ nova_services[service_name] }}"
|
||||||
|
become: true
|
||||||
|
kolla_container:
|
||||||
|
action: "recreate_or_restart_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
privileged: "{{ service.privileged | default(False) }}"
|
||||||
|
volumes: "{{ service.volumes | reject('equalto', '') | list }}"
|
||||||
|
dimensions: "{{ service.dimensions }}"
|
||||||
|
healthcheck: "{{ service.healthcheck | default(omit) }}"
|
||||||
|
when:
|
||||||
|
- kolla_action != "upgrade" or not nova_safety_upgrade | bool
|
||||||
|
@ -89,6 +89,16 @@
|
|||||||
become: true
|
become: true
|
||||||
when: service | service_enabled_and_mapped_to_host
|
when: service | service_enabled_and_mapped_to_host
|
||||||
|
|
||||||
|
- name: Copying over nova-metadata-wsgi.conf
|
||||||
|
vars:
|
||||||
|
service: "{{ nova_services['nova-metadata'] }}"
|
||||||
|
template:
|
||||||
|
src: "nova-metadata-wsgi.conf.j2"
|
||||||
|
dest: "{{ node_config_directory }}/nova-metadata/nova-metadata-wsgi.conf"
|
||||||
|
mode: "0660"
|
||||||
|
become: true
|
||||||
|
when: service | service_enabled_and_mapped_to_host
|
||||||
|
|
||||||
- name: Copying over vendordata file
|
- name: Copying over vendordata file
|
||||||
vars:
|
vars:
|
||||||
service: "{{ nova_services['nova-api'] }}"
|
service: "{{ nova_services['nova-api'] }}"
|
||||||
|
@ -8,7 +8,6 @@ LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
Listen {{ api_interface_address | put_address_in_context('url') }}:{{ nova_api_listen_port }}
|
Listen {{ api_interface_address | put_address_in_context('url') }}:{{ nova_api_listen_port }}
|
||||||
Listen {{ api_interface_address | put_address_in_context('url') }}:{{ nova_metadata_listen_port }}
|
|
||||||
|
|
||||||
ServerSignature Off
|
ServerSignature Off
|
||||||
ServerTokens Prod
|
ServerTokens Prod
|
||||||
@ -17,7 +16,7 @@ TimeOut {{ kolla_httpd_timeout }}
|
|||||||
KeepAliveTimeout {{ kolla_httpd_keep_alive }}
|
KeepAliveTimeout {{ kolla_httpd_keep_alive }}
|
||||||
|
|
||||||
<Directory "{{ wsgi_directory }}">
|
<Directory "{{ wsgi_directory }}">
|
||||||
<FilesMatch "^nova-(api-wsgi|metadata-wsgi)$">
|
<FilesMatch "^nova-api-wsgi$">
|
||||||
Options None
|
Options None
|
||||||
Require all granted
|
Require all granted
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
@ -50,22 +49,3 @@ LogLevel info
|
|||||||
SSLCertificateKeyFile /etc/nova/certs/nova-key.pem
|
SSLCertificateKeyFile /etc/nova/certs/nova-key.pem
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
|
|
||||||
<VirtualHost *:{{ nova_metadata_listen_port }}>
|
|
||||||
WSGIDaemonProcess nova-metadata processes={{ nova_metadata_api_workers }} threads=1 user=nova group=nova display-name=nova-metadata-api
|
|
||||||
WSGIProcessGroup nova-metadata
|
|
||||||
WSGIScriptAlias / {{ wsgi_directory }}/nova-metadata-wsgi
|
|
||||||
WSGIApplicationGroup %{GLOBAL}
|
|
||||||
WSGIPassAuthorization On
|
|
||||||
<IfVersion >= 2.4>
|
|
||||||
ErrorLogFormat "%{cu}t %M"
|
|
||||||
</IfVersion>
|
|
||||||
ErrorLog "{{ nova_log_dir }}/nova-metadata-error.log"
|
|
||||||
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" logformat
|
|
||||||
CustomLog "{{ nova_log_dir }}/nova-metadata-access.log" logformat
|
|
||||||
{% if nova_enable_tls_backend | bool %}
|
|
||||||
SSLEngine on
|
|
||||||
SSLCertificateFile /etc/nova/certs/nova-cert.pem
|
|
||||||
SSLCertificateKeyFile /etc/nova/certs/nova-key.pem
|
|
||||||
{% endif %}
|
|
||||||
</VirtualHost>
|
|
||||||
|
51
ansible/roles/nova/templates/nova-metadata-wsgi.conf.j2
Normal file
51
ansible/roles/nova/templates/nova-metadata-wsgi.conf.j2
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{% set nova_log_dir = '/var/log/kolla/nova' %}
|
||||||
|
{% set wsgi_directory = '/var/lib/kolla/venv/bin' %}
|
||||||
|
{% if nova_enable_tls_backend | bool %}
|
||||||
|
{% if kolla_base_distro in ['centos', 'rocky'] %}
|
||||||
|
LoadModule ssl_module /usr/lib64/httpd/modules/mod_ssl.so
|
||||||
|
{% else %}
|
||||||
|
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
Listen {{ api_interface_address | put_address_in_context('url') }}:{{ nova_metadata_listen_port }}
|
||||||
|
|
||||||
|
ServerSignature Off
|
||||||
|
ServerTokens Prod
|
||||||
|
TraceEnable off
|
||||||
|
TimeOut {{ kolla_httpd_timeout }}
|
||||||
|
KeepAliveTimeout {{ kolla_httpd_keep_alive }}
|
||||||
|
|
||||||
|
<Directory "{{ wsgi_directory }}">
|
||||||
|
<FilesMatch "^nova-metadata-wsgi$">
|
||||||
|
Options None
|
||||||
|
Require all granted
|
||||||
|
</FilesMatch>
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog "{{ nova_log_dir }}/apache-error.log"
|
||||||
|
<IfModule log_config_module>
|
||||||
|
CustomLog "{{ nova_log_dir }}/apache-access.log" common
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
{% if nova_logging_debug | bool %}
|
||||||
|
LogLevel info
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<VirtualHost *:{{ nova_metadata_listen_port }}>
|
||||||
|
WSGIDaemonProcess nova-metadata processes={{ nova_metadata_api_workers }} threads=1 user=nova group=nova display-name=nova-metadata-api
|
||||||
|
WSGIProcessGroup nova-metadata
|
||||||
|
WSGIScriptAlias / {{ wsgi_directory }}/nova-metadata-wsgi
|
||||||
|
WSGIApplicationGroup %{GLOBAL}
|
||||||
|
WSGIPassAuthorization On
|
||||||
|
<IfVersion >= 2.4>
|
||||||
|
ErrorLogFormat "%{cu}t %M"
|
||||||
|
</IfVersion>
|
||||||
|
ErrorLog "{{ nova_log_dir }}/nova-metadata-error.log"
|
||||||
|
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" logformat
|
||||||
|
CustomLog "{{ nova_log_dir }}/nova-metadata-access.log" logformat
|
||||||
|
{% if nova_enable_tls_backend | bool %}
|
||||||
|
SSLEngine on
|
||||||
|
SSLCertificateFile /etc/nova/certs/nova-cert.pem
|
||||||
|
SSLCertificateKeyFile /etc/nova/certs/nova-key.pem
|
||||||
|
{% endif %}
|
||||||
|
</VirtualHost>
|
50
ansible/roles/nova/templates/nova-metadata.json.j2
Normal file
50
ansible/roles/nova/templates/nova-metadata.json.j2
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{% set apache_binary = 'apache2' if kolla_base_distro in ['ubuntu', 'debian'] else 'httpd' %}
|
||||||
|
{% set apache_conf_dir = 'apache2/conf-enabled' if kolla_base_distro in ['ubuntu', 'debian'] else 'httpd/conf.d' %}
|
||||||
|
{
|
||||||
|
"command": "/usr/sbin/{{ apache_binary }} -DFOREGROUND",
|
||||||
|
"config_files": [
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/nova.conf",
|
||||||
|
"dest": "/etc/nova/nova.conf",
|
||||||
|
"owner": "nova",
|
||||||
|
"perm": "0600"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/nova-metadata-wsgi.conf",
|
||||||
|
"dest": "/etc/{{ apache_conf_dir }}/nova-metadata-wsgi.conf",
|
||||||
|
"owner": "nova",
|
||||||
|
"perm": "0600"
|
||||||
|
}{% if nova_policy_file is defined %},
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/{{ nova_policy_file }}",
|
||||||
|
"dest": "/etc/nova/{{ nova_policy_file }}",
|
||||||
|
"owner": "nova",
|
||||||
|
"perm": "0600"
|
||||||
|
}{% endif %}{% if nova_enable_tls_backend | bool %},
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/nova-cert.pem",
|
||||||
|
"dest": "/etc/nova/certs/nova-cert.pem",
|
||||||
|
"owner": "nova",
|
||||||
|
"perm": "0600"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/nova-key.pem",
|
||||||
|
"dest": "/etc/nova/certs/nova-key.pem",
|
||||||
|
"owner": "nova",
|
||||||
|
"perm": "0600"
|
||||||
|
}{% endif %}{% if vendordata_file_path is defined %},
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/vendordata.json",
|
||||||
|
"dest": "/etc/nova/vendordata.json",
|
||||||
|
"owner": "nova",
|
||||||
|
"perm": "0600"
|
||||||
|
}{% endif %}
|
||||||
|
],
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"path": "/var/log/kolla/nova",
|
||||||
|
"owner": "nova:nova",
|
||||||
|
"recurse": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -6,6 +6,8 @@ debug = {{ nova_logging_debug }}
|
|||||||
log_file = /var/log/kolla/nova/nova-super-conductor.log
|
log_file = /var/log/kolla/nova/nova-super-conductor.log
|
||||||
{% elif service_name == "nova-api" %}
|
{% elif service_name == "nova-api" %}
|
||||||
log_file = /var/log/kolla/nova/nova-api.log
|
log_file = /var/log/kolla/nova/nova-api.log
|
||||||
|
{% elif service_name == "nova-metadata" %}
|
||||||
|
log_file = /var/log/kolla/nova/nova-metadata.log
|
||||||
{% else %}
|
{% else %}
|
||||||
log_dir = /var/log/kolla/nova
|
log_dir = /var/log/kolla/nova
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
``nova-metadata`` service has been split into it's own container in
|
||||||
|
preparation for uWSGI support.
|
@ -281,6 +281,9 @@ nova
|
|||||||
[nova-conductor:children]
|
[nova-conductor:children]
|
||||||
nova
|
nova
|
||||||
|
|
||||||
|
[nova-metadata:children]
|
||||||
|
nova
|
||||||
|
|
||||||
[nova-super-conductor:children]
|
[nova-super-conductor:children]
|
||||||
nova
|
nova
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user