diff --git a/bifrost/inventory.py b/bifrost/inventory.py index e3ed87f26..6b737d03f 100755 --- a/bifrost/inventory.py +++ b/bifrost/inventory.py @@ -99,7 +99,7 @@ Example JSON Element: "mac": "00:01:02:03:04:06" } ], - "driver": "agent_ipmitool", + "driver": "ipmi", "ipv4_address": "192.168.122.2", "properties": { "cpu_arch": "x86_64", @@ -269,7 +269,7 @@ def _process_baremetal_csv(data_source, groups, hostvars): host['provisioning_ipv4_address'] = host['ipv4_address'] # Default Driver unless otherwise defined or determined. - host['driver'] = "agent_ipmitool" + host['driver'] = "ipmi" if len(row) > 15: driver = _val_or_none(row, 16) @@ -277,8 +277,8 @@ def _process_baremetal_csv(data_source, groups, hostvars): host['driver'] = driver if "ipmi" in host['driver']: - # Set agent_ipmitool by default - host['driver'] = "agent_ipmitool" + # Set ipmi by default + host['driver'] = "ipmi" power['ipmi_address'] = management_address power['ipmi_username'] = management_username power['ipmi_password'] = management_password diff --git a/bifrost/tests/functional/test_inventory_functional.py b/bifrost/tests/functional/test_inventory_functional.py index 373a1babf..9e188e969 100644 --- a/bifrost/tests/functional/test_inventory_functional.py +++ b/bifrost/tests/functional/test_inventory_functional.py @@ -38,9 +38,9 @@ unused,,00000000-0000-0000-0000-000000000001,hostname0, 192.168.1.2,,,,| 00:01:02:03:04:06,root,undefined,192.0.2.3,2,8192,1024, unused,,00000000-0000-0000-0000-000000000002,hostname1, -192.168.1.3,,,,,agent_ipmitool""".replace('\n', '').replace('|', '\n') +192.168.1.3,,,,,ipmi""".replace('\n', '').replace('|', '\n') expected_hostvars = """{"hostname1": - {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "ipmi", "name": "hostname1", "ipv4_address": "192.168.1.3", "provisioning_ipv4_address": "192.168.1.3" ,"ansible_ssh_host": "192.168.1.3", "driver_info": {"power": {"ipmi_address": "192.0.2.3", @@ -50,7 +50,7 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, [{"mac": "00:01:02:03:04:06"}], "properties": {"ram": "8192", "cpu_arch": "x86_64", "disk_size": "1024", "cpus": "2"}, "host_groups": ["baremetal"]}, "hostname0": - {"uuid": "00000000-0000-0000-0000-000000000001", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000001", "driver": "ipmi", "name": "hostname0", "ipv4_address": "192.168.1.2", "provisioning_ipv4_address": "192.168.1.2", "ansible_ssh_host": "192.168.1.2", "driver_info": {"power": {"ipmi_address": "192.0.2.2", @@ -70,10 +70,10 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, def test_csv_file_conversion_ipmi_dual_bridging(self): CSV = """00:01:02:03:04:06,root,undefined,192.0.2.3,2,8192,1024, unused,,00000000-0000-0000-0000-000000000002,hostname1, -192.168.1.3,10,20,30,40,agent_ipmitool""".replace('\n', '').replace('|', '\n') +192.168.1.3,10,20,30,40,ipmi""".replace('\n', '').replace('|', '\n') expected_hostvars = """{"hostname1": - {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "ipmi", "name": "hostname1", "ipv4_address": "192.168.1.3", "provisioning_ipv4_address": "192.168.1.3", "ansible_ssh_host": "192.168.1.3", "driver_info": {"power": {"ipmi_address": "192.0.2.3", @@ -95,10 +95,10 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, def test_csv_file_conversion_ipmi_single_bridging(self): CSV = """00:01:02:03:04:06,root,undefined,192.0.2.3,2,8192,1024, unused,,00000000-0000-0000-0000-000000000002,hostname1, -192.168.1.3,10,20,,,agent_ipmitool""".replace('\n', '').replace('|', '\n') +192.168.1.3,10,20,,,ipmi""".replace('\n', '').replace('|', '\n') expected_hostvars = """{"hostname1": - {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "ipmi", "name": "hostname1", "ipv4_address": "192.168.1.3", "provisioning_ipv4_address": "192.168.1.3", "ansible_ssh_host": "192.168.1.3", "driver_info": {"power": {"ipmi_address": "192.0.2.3", @@ -116,10 +116,10 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, def test_csv_file_conversion_dhcp(self): CSV = """00:01:02:03:04:06,root,undefined,192.0.2.3,2,8192,1024, unused,,00000000-0000-0000-0000-000000000002,hostname1 -,,,,,,agent_ipmitool""".replace('\n', '').replace('|', '\n') +,,,,,,ipmi""".replace('\n', '').replace('|', '\n') expected_hostvars = """{"hostname1": - {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "ipmi", "name": "hostname1", "addressing_mode": "dhcp", "ipv4_address": null, "provisioning_ipv4_address": null, "driver_info": {"power": {"ipmi_address": "192.0.2.3", "ipmi_password": @@ -140,10 +140,10 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1 # is identical. CSV = """00:01:02:03:04:06,root,undefined,192.0.2.3,2,8192,1024, unused,,00000000-0000-0000-0000-000000000002,hostname1 -,,,,,,agent_ipmitool""".replace('\n', '') +,,,,,,ipmi""".replace('\n', '') expected_hostvars = """{"hostname1": - {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "ipmi", "name": "hostname1", "addressing_mode": "dhcp", "ipv4_address": null, "provisioning_ipv4_address": null, "driver_info": {"power": {"ipmi_address": "192.0.2.3", "ipmi_password": @@ -166,9 +166,9 @@ unused,,00000000-0000-0000-0000-000000000001,hostname0, 192.168.1.2,,,,| 00:01:02:03:04:06,root,undefined,192.0.2.3,2,8192,1024, unused,,00000000-0000-0000-0000-000000000002,hostname1, -192.168.1.3,,,,,agent_ipmitool""".replace('\n', '').replace('|', '\n') +192.168.1.3,,,,,ipmi""".replace('\n', '').replace('|', '\n') expected_hostvars = """{"hostname1": - {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "ipmi", "name": "hostname1", "ipv4_address": "192.168.1.3", "ansible_ssh_host": "192.168.1.3", "provisioning_ipv4_address": "192.168.1.3", "driver_info": {"power": {"ipmi_address": "192.0.2.3", @@ -178,7 +178,7 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, [{"mac": "00:01:02:03:04:06"}], "properties": {"ram": "8192", "cpu_arch": "x86_64", "disk_size": "1024", "cpus": "2"}, "host_groups": ["baremetal"]}, "hostname0": - {"uuid": "00000000-0000-0000-0000-000000000001", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000001", "driver": "ipmi", "name": "hostname0", "ipv4_address": "192.168.1.2", "ansible_ssh_host": "192.168.1.2", "provisioning_ipv4_address": "192.168.1.2", "driver_info": {"power": {"ipmi_address": "192.0.2.2", @@ -200,7 +200,7 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, # that we get the same output when we pass something # in as YAML expected_hostvars = """{"hostname1": - {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000002", "driver": "ipmi", "name": "hostname1", "ipv4_address": "192.168.1.3", "ansible_ssh_host": "192.168.1.3", "provisioning_ipv4_address": "192.168.1.3", "driver_info": {"power": {"ipmi_address": "192.0.2.3", @@ -210,7 +210,7 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, [{"mac": "00:01:02:03:04:06"}], "properties": {"ram": "8192", "cpu_arch": "x86_64", "disk_size": "1024", "cpus": "2"}, "host_groups": ["baremetal", "nova"]}, "hostname0": - {"uuid": "00000000-0000-0000-0000-000000000001", "driver": "agent_ipmitool", + {"uuid": "00000000-0000-0000-0000-000000000001", "driver": "ipmi", "name": "hostname0", "ipv4_address": "192.168.1.2", "ansible_ssh_host": "192.168.1.2", "provisioning_ipv4_address": "192.168.1.2", "driver_info": {"power": {}}, "nics": @@ -225,11 +225,11 @@ unused,,00000000-0000-0000-0000-000000000002,hostname1, input_json = """{"h0000-01":{"uuid": "00000000-0000-0000-0001-bad00000010","name":"h0000-01","driver_info" :{"power":{"ipmi_address":"10.0.0.78","ipmi_username":"ADMIN"," -ipmi_password":"ADMIN"}},"driver":"agent_ipmitool"}}""".replace('\n', '') +ipmi_password":"ADMIN"}},"driver":"ipmi"}}""".replace('\n', '') expected_json = """{"h0000-01":{"uuid": "00000000-0000-0000-0001-bad00000010","name":"h0000-01","driver_info" :{"power":{"ipmi_address":"10.0.0.78","ipmi_username":"ADMIN"," -ipmi_password":"ADMIN"}},"driver":"agent_ipmitool","addressing_mode": +ipmi_password":"ADMIN"}},"driver":"ipmi","addressing_mode": "dhcp","host_groups": ["baremetal"]}}""".replace('\n', '') (groups, hostvars) = utils.bifrost_data_conversion(input_json) self.assertDictEqual(json.loads(str(expected_json)), hostvars) diff --git a/doc/source/user/howto.rst b/doc/source/user/howto.rst index cfaa29251..9064bdb1c 100644 --- a/doc/source/user/howto.rst +++ b/doc/source/user/howto.rst @@ -140,7 +140,7 @@ The CSV file has the following columns: Example definition:: - 00:11:22:33:44:55,root,undefined,192.168.122.1,1,8192,512,NA,NA,aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee,hostname_100,192.168.2.100,,,,agent_ipmitool,10.0.0.9 + 00:11:22:33:44:55,root,undefined,192.168.122.1,1,8192,512,NA,NA,aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee,hostname_100,192.168.2.100,,,,ipmi,10.0.0.9 This file format is fairly flexible and can be easily modified although the enrollment and deployment playbooks utilize the model diff --git a/playbooks/inventory/baremetal.json.example b/playbooks/inventory/baremetal.json.example index 35f4f79cb..4ad42b253 100644 --- a/playbooks/inventory/baremetal.json.example +++ b/playbooks/inventory/baremetal.json.example @@ -16,7 +16,7 @@ "mac": "00:00:00:12:34:57" } ], - "driver": "agent_ipmitool", + "driver": "ipmi", "ipv4_address": "192.168.1.2", "properties": { "cpu_arch": "x86_64", @@ -54,7 +54,7 @@ "image_source": "http://192.168.1.1:8080/custom_deployment_image.qcow2", "image_checksum": "493972895dc465a09702ce6e85a836c5" }, - "driver": "agent_ipmitool", + "driver": "ipmi", "ipv4_address": "192.168.1.3", "properties": { "cpu_arch": "x86_64", diff --git a/playbooks/inventory/baremetal.yml.example b/playbooks/inventory/baremetal.yml.example index fb9f16047..d51c4dbb7 100644 --- a/playbooks/inventory/baremetal.yml.example +++ b/playbooks/inventory/baremetal.yml.example @@ -11,7 +11,7 @@ mac: "00:00:00:23:34:56" - mac: "00:00:00:12:34:57" - driver: "agent_ipmitool" + driver: "ipmi" ipv4_address: "192.168.1.2" properties: cpu_arch: "x86_64" @@ -41,7 +41,7 @@ instance_info: image_source: "http://192.168.1.1:8080/custom_deployment_image.qcow2" image_checksum: "493972895dc465a09702ce6e85a836c5" - driver: "agent_ipmitool" + driver: "ipmi" ipv4_address: "192.168.1.3" properties: cpu_arch: "x86_64" diff --git a/playbooks/roles/bifrost-create-vm-nodes/tasks/create_vm.yml b/playbooks/roles/bifrost-create-vm-nodes/tasks/create_vm.yml index e33901ffa..a6ff44782 100644 --- a/playbooks/roles/bifrost-create-vm-nodes/tasks/create_vm.yml +++ b/playbooks/roles/bifrost-create-vm-nodes/tasks/create_vm.yml @@ -136,7 +136,7 @@ name: "{{ vm_name }}" uuid: "{{ vm_name | to_uuid }}" host_groups: "{{ vm_host_group }}" - driver: "{{ test_vm_node_driver|default('agent_ipmitool') }}" + driver: "{{ test_vm_node_driver|default('ipmi') }}" driver_info: power: ipmi_address: "192.168.122.1" diff --git a/playbooks/roles/bifrost-ironic-install/README.md b/playbooks/roles/bifrost-ironic-install/README.md index 52256a356..dbc20ac1d 100644 --- a/playbooks/roles/bifrost-ironic-install/README.md +++ b/playbooks/roles/bifrost-ironic-install/README.md @@ -19,8 +19,8 @@ Role Variables -------------- Testing mode is intended to help facilitate testing of the bifrost roles and -ironic by utilizing virtual machines on the localhost and the agent_ipmitool -driver. This variable should be set globally for playbooks utilizing the +ironic by utilizing virtual machines on the localhost and the ipmi hardware +type. This variable should be set globally for playbooks utilizing the bifrost-ironic-install role. testing: false @@ -84,9 +84,9 @@ In case your HW needs a kernel option to boot, set the following variable: extra_kernel_options: Default undefined. -When testing, the default ironic conductor driver is "agent_ipmitool". When -testing mode has not been engaged, drivers can be set via the enabled_drivers -variable which defaults to: "agent_ipmitool,agent_ilo,agent_ucs" +When testing, the default ironic conductor hardware type is "ipmi". When +testing mode has not been engaged, hardware types can be enabled using +the "enabled_hardare_types" variable, which defaults to "ipmi, ilo, ucs". By default, PXE driver baseline support, in terms of installation of the iSCSI client and configuration of sudoers and rootwrap configuration is @@ -215,7 +215,7 @@ enable_inspector_discovery: Boolean value, default true. This instructs inspector_default_node_driver: The default driver to utilize when adding discovered nodes to ironic. The default value set by bifrost is - `agent_ipmitool`. Users should change this + `ipmi`. Users should change this setting for their install environment if an alternative default driver is required. diff --git a/playbooks/roles/bifrost-ironic-install/defaults/main.yml b/playbooks/roles/bifrost-ironic-install/defaults/main.yml index 77744a25e..8762980ff 100644 --- a/playbooks/roles/bifrost-ironic-install/defaults/main.yml +++ b/playbooks/roles/bifrost-ironic-install/defaults/main.yml @@ -82,6 +82,12 @@ ironicinspector_git_folder: /opt/stack/ironic-inspector ironicinspectorclient_git_folder: /opt/stack/python-ironic-inspector-client staging_drivers_git_url: http://git.openstack.org/cgit/openstack/ironic-staging-drivers +# TODO(TheJulia): Add redfish to this list. +enabled_hardware_types: "ipmi,ilo,ucs" +default_deploy_interface: "direct" + +# DEPRECATED: Ironic is removing classic drivers in Rocky. Please see +# enabled_hardware_types. # Comma-separated list, in the format of a string, of drivers that are enabled # by default. This is intended to be a list of agent based drivers. # PXE drivers can be found in the setting pxe_drivers that can be found below. @@ -162,18 +168,25 @@ inspector_keep_ports: "present" inspector: discovery: enabled: "{{ enable_inspector_discovery | default(true) }}" - default_node_driver: "{{ inspector_default_node_driver | default('agent_ipmitool')}}" + default_node_driver: "{{ inspector_default_node_driver | default('ipmi')}}" # We may not have packaged iPXE files on some distros, or may want to # download them on their own. download_ipxe: false + +# DEPRECATED: Please see enabled_hardware_types # This enables installation of substrate for PXE driver support enable_pxe_drivers: true + +# DEPRECATED: Please see enabled_hardware_types # Comma-separated list of PXE drivers to enable when # enable_pxe_drivers is set to true pxe_drivers: "pxe_ipmitool,pxe_ilo" + + + # Settings related to installing bifrost in a virtual environment enable_venv: false bifrost_venv_dir: "{{ lookup('env', 'VENV') | default('/opt/stack/bifrost') }}" diff --git a/playbooks/roles/bifrost-ironic-install/tasks/ironic_config.yml b/playbooks/roles/bifrost-ironic-install/tasks/ironic_config.yml index 23a50b3aa..6888521db 100644 --- a/playbooks/roles/bifrost-ironic-install/tasks/ironic_config.yml +++ b/playbooks/roles/bifrost-ironic-install/tasks/ironic_config.yml @@ -25,6 +25,9 @@ The configured network interface {{ network_interface }} does not have an IP address assigned when: not hostvars[inventory_hostname]['ansible_' ~ network_interface].get('ipv4', {}).get('address') +# DEPRECATED: enabled_drivers, pxe_drivers, and enable_pxe_drivers has +# been deprecated and will be removed in the Rocky release. Please consult +# enabled_hardware_types. - name: "Update driver list if PXE drivers are enabled" set_fact: enabled_drivers: "{{ enabled_drivers }},{{ pxe_drivers }}" diff --git a/playbooks/roles/bifrost-ironic-install/templates/ironic.conf.j2 b/playbooks/roles/bifrost-ironic-install/templates/ironic.conf.j2 index 763745f45..c3691db6e 100644 --- a/playbooks/roles/bifrost-ironic-install/templates/ironic.conf.j2 +++ b/playbooks/roles/bifrost-ironic-install/templates/ironic.conf.j2 @@ -9,10 +9,18 @@ # configuration besides a flat network where bifrost orchustrates the # control instead of ironic, noop is the only available network driver. enabled_network_interfaces = noop +default_deploy_interface = {{ default_deploy_interface }} +{% if enable_inspector | bool == true %} +enabled_inspect_interfaces = no-inspect,inspector +default_inspect_interface = inspector +{% endif %} + {% if testing | bool == true %} -enabled_drivers = agent_ipmitool,pxe_ipmitool debug = true +# Default enable ipmi for CI testing +enabled_hardware_types = ipmi {% else %} +enabled_hardware_types = {{ enabled_hardware_types }} enabled_drivers = {{ enabled_drivers }} debug = false {% endif %} diff --git a/releasenotes/notes/deprecate-classic-drivers-f88c53fa483aa7d5.yaml b/releasenotes/notes/deprecate-classic-drivers-f88c53fa483aa7d5.yaml new file mode 100644 index 000000000..f8f53339f --- /dev/null +++ b/releasenotes/notes/deprecate-classic-drivers-f88c53fa483aa7d5.yaml @@ -0,0 +1,19 @@ +--- +features: + - | + The ``enabled_hardware_types`` variable has been introduced to support + use of hardware types. + The ``default_deploy_interface`` variable has been introduced to support + setting a default method of deployment for new nodes. It defaults to the + ``direct`` deployment interface. +deprecations: + - | + Ironic has deprecated support for classic drivers. These were the drivers + that were prepended with ``agent`` or ``pxe``. The new default hardware type, + which superceeds drivers, is ``ipmi``. The default deployment interface is + ``direct``, which superceeds the ``agent`` driver type. Support for classic + Drivers, will be removed from Bifrost in the Rocky release cycle. +issues: + - | + Support for hardware types is in the beginning stages in Bifrost. Presently + the ``os_ironic`` ansible module does not yet understand hardware types.