
# Copyright 2017-present Open Networking Foundation
#
# 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.


---

pub_ssh_key_file_location: "{{ pub_ssh_key_location | default ('/etc/maas/.ssh') }}"
pub_ssh_key: "{{ lookup('file', pub_ssh_key_file_location+'/cord_rsa.pub') }}"

compute_node:
    password: "{{password_compute_node | default(lookup('password', 'passwords/compute_node.txt chars=ascii_letters,digits'))}}"
    fabric:
        include:
            names: "{{ fabric_include_names | default(omit) }}"
            module_types: "{{ fabric_include_module_types | default('i40e, mlx4_en') }}"
            bus_types: "{{ fabric_include_bus_types | default(omit) }}"
        exclude:
            names: "{{ fabric_exclude_names | default(omit) }}"
            module_types: "{{ fabric_exclude_module_types | default(omit) }}"
            bus_types: "{{ fabric_exclude_bus_types | default(omit) }}"
        ignore:
            names: "{{ fabric_ignore_names | default(omit) }}"
            module_types: "{{ fabric_ignore_module_types | default(omit) }}"
            bus_types: "{{ fabric_ignore_bus_types | default(omit) }}"
    management:
        include:
            names: "{{ management_include_names | default(omit) }}"
            module_types: "{{ management_include_module_types | default(omit) }}"
            bus_types: "{{ management_include_bus_types | default(omit) }}"
        exclude:
            names: "{{ management_exclude_names | default(omit) }}"
            module_types: "{{ management_exclude_module_types | default(omit) }}"
            bus_types: "{{ management_exclude_bus_types | default(omit) }}"
        ignore:
            names: "{{ management_ignore_names | default(omit) }}"
            module_types: "{{ management_ignore_module_types | default(omit) }}"
            bus_types: "{{ management_ignore_bus_types | default(omit) }}"

    interfaces:
        fabric: "{{ fabric_iface | default('fabric') }}"
        management: "{{ management_iface | default('mgmtbr') }}"
        external: "{{ external_iface | default(None) }}"
        file: "{{ iface_file | default('/etc/network/interfaces') }}"
    addresses:
        fabric: "{{ fabric_ip | mandatory }}"
        management: "{{ management_ip | default('dhcp') }}"
        external: "{{ external_ip | default('manual') }}"
    gateway:
        external: "{{ external_gw | default(omit) }}"
        management: "{{ management_gw | default(omit) }}"
    broadcast:
        external: "{{ external_bc | default(omit) }}"
        management: "{{ management_bc | default(omit) }}"
