diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index c1a2940150..c976f0645c 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -517,6 +517,7 @@ enable_neutron_bgp_dragent: "no" enable_neutron_provider_networks: "no" enable_neutron_segments: "no" enable_neutron_sfc: "no" +enable_neutron_metering: "no" enable_neutron_infoblox_ipam_agent: "no" enable_nova_serialconsole_proxy: "no" enable_nova_ssh: "yes" diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one index 0fd9e7425f..abf78d4726 100644 --- a/ansible/inventory/all-in-one +++ b/ansible/inventory/all-in-one @@ -306,6 +306,9 @@ neutron [neutron-infoblox-ipam-agent:children] neutron +[neutron-metering-agent:children] +neutron + [ironic-neutron-agent:children] neutron diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode index 6c23e0b83a..bd10275140 100644 --- a/ansible/inventory/multinode +++ b/ansible/inventory/multinode @@ -325,6 +325,9 @@ neutron [neutron-infoblox-ipam-agent:children] neutron +[neutron-metering-agent:children] +neutron + [ironic-neutron-agent:children] neutron diff --git a/ansible/roles/neutron/defaults/main.yml b/ansible/roles/neutron/defaults/main.yml index c8a9118a39..1af74f0ecd 100644 --- a/ansible/roles/neutron/defaults/main.yml +++ b/ansible/roles/neutron/defaults/main.yml @@ -193,6 +193,19 @@ neutron_services: - "/run:/run:shared" - "kolla_logs:/var/log/kolla/" dimensions: "{{ neutron_infoblox_ipam_agent_dimensions }}" + neutron-metering-agent: + container_name: "neutron_metering_agent" + image: "{{ neutron_metering_agent_image_full }}" + privileged: True + enabled: "{{ enable_neutron_metering | bool }}" + group: "neutron-metering-agent" + host_in_groups: "{{ inventory_hostname in groups['neutron-metering-agent'] }}" + volumes: + - "{{ node_config_directory }}/neutron-metering-agent/:{{ container_config_directory }}/:ro" + - "/etc/localtime:/etc/localtime:ro" + - "/run:/run:shared" + - "kolla_logs:/var/log/kolla/" + dimensions: "{{ neutron_metering_agent_dimensions }}" ironic-neutron-agent: container_name: "ironic_neutron_agent" image: "{{ ironic_neutron_agent_image_full }}" @@ -260,6 +273,10 @@ neutron_infoblox_ipam_agent_image: "{{ docker_registry ~ '/' if docker_registry neutron_infoblox_ipam_agent_tag: "{{ neutron_tag }}" neutron_infoblox_ipam_agent_image_full: "{{ neutron_infoblox_ipam_agent_image }}:{{ neutron_infoblox_ipam_agent_tag }}" +neutron_metering_agent_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ neutron_install_type }}-neutron-metering-agent" +neutron_metering_agent_tag: "{{ neutron_tag }}" +neutron_metering_agent_image_full: "{{ neutron_metering_agent_image }}:{{ neutron_metering_agent_tag }}" + ironic_neutron_agent_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ neutron_install_type }}-ironic-neutron-agent" ironic_neutron_agent_tag: "{{ neutron_tag }}" ironic_neutron_agent_image_full: "{{ ironic_neutron_agent_image }}:{{ ironic_neutron_agent_tag }}" @@ -275,6 +292,7 @@ neutron_server_dimensions: "{{ default_container_dimensions }}" neutron_bgp_dragent_dimensions: "{{ default_container_dimensions }}" neutron_infoblox_ipam_agent_dimensions: "{{ default_container_dimensions }}" neutron_openvswitch_agent_xenapi_dimensions: "{{ default_container_dimensions }}" +neutron_metering_agent_dimensions: "{{ default_container_dimensions }}" ironic_neutron_agent_dimensions: "{{ default_container_dimensions }}" @@ -332,6 +350,8 @@ service_plugins: enabled: "{{ enable_neutron_lbaas | bool and not enable_octavia | bool }}" - name: "lbaasv2-proxy" enabled: "{{ enable_neutron_lbaas | bool and enable_octavia | bool }}" + - name: "metering" + enabled: "{{ enable_neutron_metering | bool }}" - name: "neutron_dynamic_routing.services.bgp.bgp_plugin.BgpPlugin" enabled: "{{ enable_neutron_bgp_dragent | bool }}" - name: "qos" diff --git a/ansible/roles/neutron/handlers/main.yml b/ansible/roles/neutron/handlers/main.yml index a9c95df438..0184532972 100644 --- a/ansible/roles/neutron/handlers/main.yml +++ b/ansible/roles/neutron/handlers/main.yml @@ -344,6 +344,31 @@ or neutron_ml2_conf | changed or neutron_infoblox_ipam_agent_container | changed +- name: Restart neutron-metering-agent container + vars: + service_name: "neutron-metering-agent" + service: "{{ neutron_services[service_name] }}" + config_json: "{{ neutron_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}" + neutron_conf: "{{ neutron_confs.results|selectattr('item.key', 'equalto', service_name)|first }}" + neutron_metering_agent_container: "{{ check_neutron_containers.results|selectattr('item.key', 'equalto', service_name)|first }}" + become: true + kolla_docker: + action: "recreate_or_restart_container" + common_options: "{{ docker_common_options }}" + name: "{{ service.container_name }}" + image: "{{ service.image }}" + volumes: "{{ service.volumes }}" + dimensions: "{{ service.dimensions }}" + privileged: "{{ service.privileged | default(False) }}" + when: + - kolla_action != "config" + - service.enabled | bool + - service.host_in_groups | bool + - config_json | changed + or neutron_conf | changed + or neutron_metering_agent_ini | changed + or neutron_metering_agent_container | changed + - name: Restart ironic-neutron-agent container vars: service_name: "ironic-neutron-agent" diff --git a/ansible/roles/neutron/tasks/config.yml b/ansible/roles/neutron/tasks/config.yml index 8f06a93001..c52b75934d 100644 --- a/ansible/roles/neutron/tasks/config.yml +++ b/ansible/roles/neutron/tasks/config.yml @@ -55,6 +55,7 @@ - "neutron-l3-agent" - "neutron-linuxbridge-agent" - "neutron-metadata-agent" + - "neutron-metering-agent" - "neutron-openvswitch-agent" - "neutron-openvswitch-agent-xenapi" - "neutron-server" @@ -306,6 +307,24 @@ notify: - "Restart {{ service_name }} container" +- name: Copying over metering_agent.ini + become: true + vars: + service_name: "neutron-metering-agent" + neutron_metering_agent: "{{ neutron_services[service_name] }}" + merge_configs: + sources: + - "{{ role_path }}/templates/metering_agent.ini.j2" + - "{{ node_custom_config }}/neutron/metering_agent.ini" + dest: "{{ node_config_directory }}/{{ service_name }}/metering_agent.ini" + mode: "0660" + register: neutron_metering_agent_ini + when: + - neutron_metering_agent.enabled | bool + - neutron_metering_agent.host_in_groups | bool + notify: + - "Restart {{ service_name }} container" + - name: Copying over ironic_neutron_agent.ini become: true vars: @@ -373,6 +392,7 @@ - "neutron-l3-agent" - "neutron-linuxbridge-agent" - "neutron-metadata-agent" + - "neutron-metering-agent" - "neutron-openvswitch-agent" - "neutron-openvswitch-agent-xenapi" - "neutron-server" diff --git a/ansible/roles/neutron/templates/metering_agent.ini.j2 b/ansible/roles/neutron/templates/metering_agent.ini.j2 new file mode 100644 index 0000000000..3a8cc72543 --- /dev/null +++ b/ansible/roles/neutron/templates/metering_agent.ini.j2 @@ -0,0 +1,3 @@ +[DEFAULT] +interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver +driver = neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver diff --git a/ansible/roles/neutron/templates/neutron-metering-agent.json.j2 b/ansible/roles/neutron/templates/neutron-metering-agent.json.j2 new file mode 100644 index 0000000000..ad8272975e --- /dev/null +++ b/ansible/roles/neutron/templates/neutron-metering-agent.json.j2 @@ -0,0 +1,36 @@ +{ + "command": "neutron-metering-agent --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/metering_agent.ini", + "config_files": [ + { + "source": "{{ container_config_directory }}/neutron.conf", + "dest": "/etc/neutron/neutron.conf", + "owner": "neutron", + "perm": "0600" + }, + { + "source": "{{ container_config_directory }}/metering_agent.ini", + "dest": "/etc/neutron/metering_agent.ini", + "owner": "neutron", + "perm": "0600" + }, + { + "source": "{{ container_config_directory }}/policy.json", + "dest": "/etc/neutron/policy.json", + "owner": "neutron", + "perm": "0600", + "optional": true + } + ], + "permissions": [ + { + "path": "/var/log/kolla/neutron", + "owner": "neutron:neutron", + "recurse": true + }, + { + "path": "/var/lib/neutron/kolla", + "owner": "neutron:neutron", + "recurse": true + } + ] +} diff --git a/ansible/site.yml b/ansible/site.yml index 3ccdb53699..7c4c54ebdd 100644 --- a/ansible/site.yml +++ b/ansible/site.yml @@ -654,6 +654,7 @@ - neutron-lbaas-agent - ironic-neutron-agent - neutron-metadata-agent + - neutron-metering-agent - compute - manila-share serial: '{{ kolla_serial|default("0") }}' diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml index 62da37ddec..70f6b7a6ab 100644 --- a/etc/kolla/globals.yml +++ b/etc/kolla/globals.yml @@ -255,6 +255,7 @@ kolla_internal_vip_address: "10.10.10.254" #enable_neutron_vpnaas: "no" #enable_neutron_sriov: "no" #enable_neutron_sfc: "no" +#enable_neutron_metering: "no" #enable_nova_fake: "no" #enable_nova_serialconsole_proxy: "no" #enable_nova_ssh: "yes" diff --git a/releasenotes/notes/add-neutron-metering-support-4266364hudc5l80c.yaml b/releasenotes/notes/add-neutron-metering-support-4266364hudc5l80c.yaml new file mode 100644 index 0000000000..24697566c4 --- /dev/null +++ b/releasenotes/notes/add-neutron-metering-support-4266364hudc5l80c.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add neutron-metering-agent into kolla-ansible diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2 index d3e00d0c0d..e42ae35215 100644 --- a/tests/templates/inventory.j2 +++ b/tests/templates/inventory.j2 @@ -302,6 +302,9 @@ neutron [neutron-infoblox-ipam-agent:children] neutron +[neutron-metering-agent:children] +neutron + [ironic-neutron-agent:children] neutron