Merge "Adds configuration for the Ironic Inspector"
This commit is contained in:
commit
840f268bcc
@ -73,7 +73,11 @@ ironic_services:
|
||||
service_name: ironic-conductor
|
||||
init_config_overrides: "{{ ironic_conductor_init_config_overrides }}"
|
||||
execstarts: "{{ ironic_bin }}/ironic-conductor"
|
||||
|
||||
ironic-inspector:
|
||||
group: ironic_inspector
|
||||
service_name: ironic-inspector
|
||||
init_config_overrides: "{{ ironic_inspector_init_config_overrides }}"
|
||||
execstarts: "{{ ironic_bin }}/ironic-inspector"
|
||||
|
||||
ironic_service_name: ironic
|
||||
ironic_service_type: baremetal
|
||||
@ -180,6 +184,7 @@ ironic_tftp_server_address: "{{ ansible_host }}"
|
||||
ironic_pip_packages:
|
||||
- cryptography
|
||||
- ironic
|
||||
- "{{ (ironic_services['ironic-inspector']['group'] in group_names) | ternary('ironic-inspector', '') }}"
|
||||
- osprofiler
|
||||
- proliantutils
|
||||
- PyMySQL
|
||||
@ -269,3 +274,108 @@ ironic_conductor_init_config_overrides: {}
|
||||
ironic_drivers_enabled:
|
||||
- agent_ipmitool
|
||||
- pxe_ipmitool
|
||||
|
||||
ironic_inspector_developer_mode: false
|
||||
ironic_inspector_venv_python_executable: "{{ openstack_venv_python_executable | default('python2') }}"
|
||||
|
||||
# System info
|
||||
ironic_inspector_service_setup_host: "{{ openstack_service_setup_host | default('localhost') }}"
|
||||
ironic_inspector_lock_path: /var/lock/ironic-inspector
|
||||
|
||||
ironic_inspector_service_name: ironic-inspector
|
||||
ironic_inspector_service_type: baremetal-introspection
|
||||
ironic_inspector_service_description: "Ironic Baremetal Introspection Service"
|
||||
ironic_inspector_service_publicuri_proto: "{{ openstack_service_publicuri_proto | default(ironic_service_proto) }}"
|
||||
ironic_inspector_service_adminuri_proto: "{{ openstack_service_adminuri_proto | default(ironic_service_proto) }}"
|
||||
ironic_inspector_service_internaluri_proto: "{{ openstack_service_internaluri_proto | default(ironic_service_proto) }}"
|
||||
ironic_inspector_service_port: 5050
|
||||
ironic_inspector_service_publicuri: "{{ ironic_inspector_service_publicuri_proto }}://{{ external_lb_vip_address }}:{{ ironic_inspector_service_port }}"
|
||||
ironic_inspector_service_publicurl: "{{ ironic_inspector_service_publicuri }}"
|
||||
ironic_inspector_service_adminuri: "{{ ironic_inspector_service_adminuri_proto }}://{{ internal_lb_vip_address }}:{{ ironic_inspector_service_port }}"
|
||||
ironic_inspector_service_adminurl: "{{ ironic_inspector_service_adminuri }}"
|
||||
ironic_inspector_service_internaluri: "{{ ironic_inspector_service_internaluri_proto }}://{{ internal_lb_vip_address }}:{{ ironic_inspector_service_port }}"
|
||||
ironic_inspector_service_internalurl: "{{ ironic_inspector_service_internaluri }}"
|
||||
ironic_inspector_service_role_name: "admin"
|
||||
ironic_inspector_service_project_name: "service"
|
||||
ironic_inspector_service_in_ldap: False
|
||||
ironic_inspector_service_domain_id: default
|
||||
|
||||
# Database
|
||||
ironic_inspector_db_setup_host: "{{ ('galera_all' in groups) | ternary(groups['galera_all'][0], 'localhost') }}"
|
||||
ironic_inspector_galera_address: "{{ galera_address | default('127.0.0.1') }}"
|
||||
ironic_inspector_galera_user: ironic-inspector
|
||||
ironic_inspector_galera_database: ironic_inspector
|
||||
|
||||
# Ironic db tuning
|
||||
ironic_inspector_db_max_overflow: 10
|
||||
ironic_inspector_db_max_pool_size: 120
|
||||
ironic_inspector_db_pool_timeout: 30
|
||||
|
||||
ironic_inspector_pip_install_args: "{{ pip_install_options | default('') }}"
|
||||
|
||||
|
||||
# Auth
|
||||
ironic_inspector_service_user_name: "ironic_inspector"
|
||||
|
||||
### OpenStack Services to integrate with
|
||||
# Ironic swift store information
|
||||
ironic_inspector_swift_user_name: swift-inspector
|
||||
ironic_inspector_swift_role_names:
|
||||
- _member_
|
||||
- swiftoperator
|
||||
|
||||
# Ironic inspector
|
||||
ironic_inspector_enable_discovery: True
|
||||
ironic_inspector_openstack_db_connection_string: "mysql+pymysql://{{ ironic_inspector_galera_user }}:{{ ironic_inspector_container_mysql_password }}@{{ ironic_inspector_galera_address }}/{{ ironic_inspector_galera_database }}"
|
||||
|
||||
# Ironic inspector dhcp
|
||||
ironic_inspector_dhcp_pool_range: 192.168.0.51 192.168.0.150
|
||||
ironic_inspector_dhcp_subnet: 192.168.0.0/22
|
||||
ironic_inspector_dhcp_subnet_mask: 255.255.252.0
|
||||
ironic_inspector_dhcp_gateway: 192.168.0.1
|
||||
ironic_inspector_dhcp_nameservers: 192.168.0.1
|
||||
ironic_inspector_dhcp_lease_time: 600
|
||||
|
||||
ironic_inspector_dhcp_type: dnsmasq # isc_dhcp
|
||||
ironic_inspector_boot_mode: http #tftp
|
||||
ironic_inspector_pxe_boot_mode: "{{ ironic_inspector_boot_mode }}"
|
||||
ironic_inspector_httpboot_dir: /httpboot
|
||||
ironic_inspector_tftpboot_dir: "{{ ironic_tftpd_root }}"
|
||||
|
||||
ironic_inspector_dhcp_interface: br-ironic
|
||||
ironic_inspector_valid_interfaces: internal,public
|
||||
|
||||
### Config Overrides
|
||||
ironic_inspector_conf_overrides: {}
|
||||
ironic_inspector_rootwrap_conf_overrides: {}
|
||||
ironic_inspector_init_config_overrides: {}
|
||||
# pxe boot
|
||||
ironic_inspector_pxe_append_params: "ipa-debug=1 systemd.journald.forward_to_console=yes" #ipa-inspection-collectors=default,logs,extra_hardware
|
||||
|
||||
ironic_inspector_pxe_filter: dnsmasq #iptables
|
||||
|
||||
ironic_inspector_oslomsg_rpc_host_group: "{{ oslomsg_rpc_host_group | default('rabbitmq_all') }}"
|
||||
ironic_inspector_oslomsg_rpc_setup_host: "{{ (ironic_oslomsg_rpc_host_group in groups) | ternary(groups[ironic_oslomsg_rpc_host_group][0], 'localhost') }}"
|
||||
ironic_inspector_oslomsg_rpc_transport: "{{ oslomsg_rpc_transport | default('rabbit') }}"
|
||||
ironic_inspector_oslomsg_rpc_servers: "{{ oslomsg_rpc_servers | default('127.0.0.1') }}"
|
||||
ironic_inspector_oslomsg_rpc_port: "{{ oslomsg_rpc_port | default('5672') }}"
|
||||
ironic_inspector_oslomsg_rpc_use_ssl: "True"
|
||||
ironic_inspector_oslomsg_rpc_userid: ironic
|
||||
ironic_inspector_oslomsg_rpc_vhost: /ironic
|
||||
|
||||
ironic_inspector_oslomsg_notify_host_group: "{{ oslomsg_notify_host_group | default('rabbitmq_all') }}"
|
||||
ironic_inspector_oslomsg_notify_setup_host: "{{ (ironic_inspector_oslomsg_notify_host_group in groups) | ternary(groups[ironic_inspector_oslomsg_notify_host_group][0], 'localhost') }}"
|
||||
ironic_inspector_oslomsg_notify_transport: "{{ oslomsg_notify_transport | default('rabbit') }}"
|
||||
ironic_inspector_oslomsg_notify_servers: "{{ oslomsg_notify_servers | default('127.0.0.1') }}"
|
||||
ironic_inspector_oslomsg_notify_port: "{{ oslomsg_notify_port | default('5672') }}"
|
||||
ironic_inspector_oslomsg_notify_use_ssl: "False"
|
||||
ironic_inspector_oslomsg_notify_userid: "{{ ironic_inspector_oslomsg_rpc_userid }}"
|
||||
ironic_inspector_oslomsg_notify_password: "{{ ironic_oslomsg_rpc_password }}"
|
||||
ironic_inspector_oslomsg_notify_vhost: "{{ ironic_inspector_oslomsg_rpc_vhost }}"
|
||||
ironic_inspector_optional_oslomsg_amqp1_pip_packages:
|
||||
- oslo.messaging[amqp1]
|
||||
ironic_inspector_oslomsg_amqp1_enabled: True
|
||||
ironic_inspector_upper_constraints_url: "{{ requirements_git_url | default('https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=' ~ requirements_git_install_branch | default('master')) }}"
|
||||
|
||||
ironic_inspector_ipa_initrd_name: ironic-deploy.initrd
|
||||
ironic_inspector_ipa_kernel_name: ironic-deploy.kernel
|
||||
|
41
doc/source/configure-inspector.rst
Normal file
41
doc/source/configure-inspector.rst
Normal file
@ -0,0 +1,41 @@
|
||||
================================================================
|
||||
Configuring the Bare Metal (ironic) inspector service (optional)
|
||||
================================================================
|
||||
|
||||
.. note::
|
||||
|
||||
This feature is experimental at this time and it has not been fully
|
||||
production tested yet.
|
||||
|
||||
Ironic Inspector is an Ironic service that deploys a tiny image called
|
||||
ironic-python-agent that gathers information about a Bare Metal node. The data
|
||||
is then stored in the database for further use later. The node is then updated
|
||||
with properties based in the introspection data.
|
||||
|
||||
The inspector configuration requires some pre-deployment steps to allow the
|
||||
Ironic playbook to make the inspector functioning.
|
||||
|
||||
Networking
|
||||
~~~~~~~~~~
|
||||
Ironic networking must be configured as normally done. The inspector and
|
||||
Ironic will both share the TFTP server.
|
||||
|
||||
Networking will depend heavily on your environment. For example, the DHCP for
|
||||
both Ironic and inspector will come from the same subnet and will be a subset
|
||||
of the typical ironic allocated range.
|
||||
|
||||
|
||||
Required Overrides
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
.. code-block::
|
||||
|
||||
# names of your ironic-python-agent initrd/kernel images
|
||||
ironic_inspector_ipa_initrd_name: ironic-deploy.initramfs
|
||||
ironic_inspector_ipa_kernel_name: ironic-deploy.vmlinuz
|
||||
|
||||
# dnsmasq/dhcp information for inspector
|
||||
ironic_inspector_dhcp_pool_range: <START> <END> (subset of ironic IPs)
|
||||
ironic_inspector_dhcp_subnet: <IRONIC SUBNET CIDR>
|
||||
ironic_inspector_dhcp_subnet_mask: 255.255.252.0
|
||||
ironic_inspector_dhcp_gateway: <IRONIC GATEWAY>
|
||||
ironic_inspector_dhcp_nameservers: 8.8.8.8
|
@ -6,6 +6,7 @@ OpenStack-Ansible role for Bare Metal (ironic) service
|
||||
:maxdepth: 2
|
||||
|
||||
configure-ironic.rst
|
||||
configure-inspector.rst
|
||||
|
||||
This is an OpenStack-Ansible role to deploy the Bare Metal (ironic)
|
||||
service. See the `role-ironic spec`_ for more information.
|
||||
|
@ -8,3 +8,4 @@ iscsiadm: CommandFilter, iscsiadm, root
|
||||
# ironic/common/utils.py
|
||||
mount: CommandFilter, mount, root
|
||||
umount: CommandFilter, umount, root
|
||||
systemctl: CommandFilter, systemctl, root
|
||||
|
@ -46,3 +46,9 @@
|
||||
name: "isc-dhcp-server"
|
||||
state: restarted
|
||||
failed_when: false
|
||||
|
||||
- name: Restart dnsmasq
|
||||
service:
|
||||
name: "dnsmasq"
|
||||
state: restarted
|
||||
failed_when: false
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
This adds the configuration for the ironic inspector. The ironic
|
||||
inspector provides useful information for baremetal nodes such as
|
||||
hardware specs.
|
@ -18,5 +18,14 @@
|
||||
become: yes
|
||||
become_user: "{{ ironic_system_user_name }}"
|
||||
changed_when: false
|
||||
when: inventory_hostname in groups['ironic_conductor'][0]
|
||||
notify:
|
||||
- Restart ironic services
|
||||
|
||||
- name: Update database schema
|
||||
command: "{{ ironic_bin }}/ironic-inspector-dbsync --config-file /etc/ironic-inspector/ironic-inspector.conf upgrade"
|
||||
become: yes
|
||||
changed_when: false
|
||||
when: "'ironic_inspector' in groups and inventory_hostname == groups['ironic_inspector'][0]"
|
||||
notify:
|
||||
- Restart ironic services
|
||||
|
63
tasks/ironic_inspector_post_install.yml
Normal file
63
tasks/ironic_inspector_post_install.yml
Normal file
@ -0,0 +1,63 @@
|
||||
---
|
||||
# Copyright 2019, Rackspace US, Inc.
|
||||
#
|
||||
# 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.
|
||||
|
||||
- name: Copy in dhcp config file
|
||||
template:
|
||||
src: "dhcpd.conf.j2"
|
||||
dest: "/etc/dhcp/dhcpd.conf"
|
||||
notify:
|
||||
- Restart isc-dhcp-server
|
||||
|
||||
- name: Ensure except lo dnsmasq setting
|
||||
lineinfile:
|
||||
path: /etc/default/dnsmasq
|
||||
state: present
|
||||
line: 'DNSMASQ_EXCEPT=lo'
|
||||
when: ansible_os_family == 'Debian'
|
||||
notify:
|
||||
- Restart dnsmasq
|
||||
|
||||
- name: Uncomment IGNORE_RESOLVCONF line
|
||||
lineinfile:
|
||||
path: /etc/default/dnsmasq
|
||||
state: present
|
||||
regexp: '^#IGNORE_RESOLVCONF=.*'
|
||||
line: 'IGNORE_RESOLVCONF=yes'
|
||||
backrefs: yes
|
||||
when: ansible_os_family == 'Debian'
|
||||
notify:
|
||||
- Restart dnsmasq
|
||||
|
||||
- name: Copy in dnsmqsq config file
|
||||
template:
|
||||
src: "dnsmasq.conf.j2"
|
||||
dest: "/etc/dnsmasq.d/inspector-dnsmasq.conf"
|
||||
notify:
|
||||
- Restart dnsmasq
|
||||
|
||||
- name: Default pxelinux.0 config
|
||||
template:
|
||||
src: pxelinux-default.j2
|
||||
dest: "{{ ironic_inspector_tftpboot_dir }}/pxelinux.cfg/default"
|
||||
|
||||
- name: Create directories
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ ironic_system_user_name }}"
|
||||
group: "{{ ironic_system_group_name }}"
|
||||
mode: "0755"
|
||||
with_items:
|
||||
- /etc/dnsmasq.d/dhcp-hostsdir
|
@ -92,6 +92,7 @@
|
||||
mode: "0644"
|
||||
config_overrides: "{{ item.config_overrides }}"
|
||||
config_type: "{{ item.config_type }}"
|
||||
when: item.condition | default(True)
|
||||
with_items:
|
||||
- src: "ironic.conf.j2"
|
||||
dest: "/etc/ironic/ironic.conf"
|
||||
@ -103,6 +104,18 @@
|
||||
group: "root"
|
||||
config_overrides: "{{ ironic_rootwrap_conf_overrides }}"
|
||||
config_type: "ini"
|
||||
- src: "inspector.conf.j2"
|
||||
dest: "/etc/ironic-inspector/ironic-inspector.conf"
|
||||
config_overrides: "{{ ironic_inspector_conf_overrides }}"
|
||||
config_type: "ini"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
- src: "rootwrap.conf.j2"
|
||||
dest: "/etc/ironic-inspector/rootwrap.conf"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
config_overrides: "{{ ironic_inspector_rootwrap_conf_overrides }}"
|
||||
config_type: "ini"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
notify: Restart ironic services
|
||||
|
||||
- name: Implement policy.json
|
||||
|
@ -29,7 +29,7 @@
|
||||
- "{{ ironic_system_home_folder }}/.ssh/id_rsa.pub"
|
||||
when: ironic_recreate_keys | bool
|
||||
|
||||
- name: Create the ironic system user
|
||||
- name: Create ironic system users
|
||||
user:
|
||||
name: "{{ ironic_system_user_name }}"
|
||||
group: "{{ ironic_system_group_name }}"
|
||||
@ -47,16 +47,31 @@
|
||||
owner: "{{ item.owner|default(ironic_system_user_name) }}"
|
||||
group: "{{ item.group|default(ironic_system_group_name) }}"
|
||||
mode: "{{ item.mode|default('0755') }}"
|
||||
when: item.condition | default(True)
|
||||
with_items:
|
||||
- { path: "/openstack/venvs", mode: "0755", owner: "root", group: "root" }
|
||||
- { path: "/etc/ironic" }
|
||||
- path: "/etc/ironic-inspector"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
- { path: "/etc/ironic/rootwrap.d" }
|
||||
- path: "/etc/ironic-inspector/rootwrap.d"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
- { path: "/etc/sudoers.d", mode: "0750", owner: "root", group: "root" }
|
||||
- { path: "/var/cache/ironic" }
|
||||
- path: "/var/cache/ironic-inspector"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
- { path: "{{ ironic_system_home_folder }}" }
|
||||
- { path: "{{ ironic_system_home_folder }}/.ssh", mode: "0700" }
|
||||
- { path: "{{ ironic_system_home_folder }}/images" }
|
||||
- { path: "{{ ironic_system_home_folder }}/master_images" }
|
||||
- { path: "{{ ironic_system_home_folder }}/cache/api", mode: "0700" }
|
||||
- { path: "{{ ironic_lock_path }}" }
|
||||
- path: "{{ ironic_inspector_lock_path }}"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
- { path: "/var/run/ironic" }
|
||||
- path: "/var/run/ironic-inspector"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
- path: "{{ ironic_inspector_tftpboot_dir }}/pxelinux.cfg"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
- path: "/httpboot"
|
||||
condition: inventory_hostname in groups['ironic-inspector']
|
||||
|
@ -39,6 +39,21 @@
|
||||
- common-db
|
||||
- ironic-config
|
||||
|
||||
- import_tasks: db_setup.yml
|
||||
when:
|
||||
- "ironic_services['ironic-inspector']['group'] in group_names"
|
||||
- "inventory_hostname == ((groups[ironic_services['ironic-inspector']['group']]| intersect(ansible_play_hosts)) | list)[0]"
|
||||
vars:
|
||||
_oslodb_setup_host: "{{ ironic_inspector_db_setup_host }}"
|
||||
_oslodb_databases:
|
||||
- name: "{{ ironic_inspector_galera_database }}"
|
||||
users:
|
||||
- username: "{{ ironic_inspector_galera_user }}"
|
||||
password: "{{ ironic_inspector_container_mysql_password }}"
|
||||
tags:
|
||||
- common-db
|
||||
- ironic-config
|
||||
|
||||
- import_tasks: mq_setup.yml
|
||||
when:
|
||||
- "ironic_services['ironic-api']['group'] in group_names"
|
||||
@ -100,7 +115,6 @@
|
||||
- ironic-config
|
||||
|
||||
- import_tasks: ironic_db_setup.yml
|
||||
when: inventory_hostname == groups['ironic_conductor'][0]
|
||||
tags:
|
||||
- ironic-config
|
||||
|
||||
@ -130,24 +144,14 @@
|
||||
_service_setup_host_python_interpreter: "{{ ironic_service_setup_host_python_interpreter }}"
|
||||
_service_project_name: "{{ ironic_service_project_name }}"
|
||||
_service_region: "{{ ironic_service_region }}"
|
||||
_service_users:
|
||||
- name: "{{ ironic_service_user_name }}"
|
||||
password: "{{ ironic_service_password }}"
|
||||
role: "{{ ironic_service_role_name }}"
|
||||
_service_endpoints:
|
||||
- service: "{{ ironic_service_name }}"
|
||||
interface: "public"
|
||||
url: "{{ ironic_service_publicurl }}"
|
||||
- service: "{{ ironic_service_name }}"
|
||||
interface: "internal"
|
||||
url: "{{ ironic_service_internalurl }}"
|
||||
- service: "{{ ironic_service_name }}"
|
||||
interface: "admin"
|
||||
url: "{{ ironic_service_adminurl }}"
|
||||
_service_catalog:
|
||||
- name: "{{ ironic_service_name }}"
|
||||
type: "{{ ironic_service_type }}"
|
||||
description: "{{ ironic_service_description }}"
|
||||
_service_users: "{{ ironic_service_user_list }}"
|
||||
_service_endpoints: "{{ ironic_service_endpoint_list }}"
|
||||
_service_catalog: "{{ ironic_service_catalog_list }}"
|
||||
when: inventory_hostname == groups['ironic_api'][0]
|
||||
tags:
|
||||
- ironic-config
|
||||
|
||||
- import_tasks: ironic_inspector_post_install.yml
|
||||
when: "{{ inventory_hostname in groups['ironic_inspector'] }}"
|
||||
tags:
|
||||
- ironic-inspector
|
||||
|
33
templates/dhcpd.conf.j2
Normal file
33
templates/dhcpd.conf.j2
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
ddns-update-style interim;
|
||||
|
||||
allow booting;
|
||||
allow bootp;
|
||||
|
||||
ignore client-updates;
|
||||
set vendorclass = option vendor-class-identifier;
|
||||
option pxe-system-type code 93 = unsigned integer 16;
|
||||
set pxetype = option pxe-system-type;
|
||||
|
||||
|
||||
subnet {{ ironic_inspector_dhcp_subnet }} netmask {{ ironic_inspector_dhcp_subnet_mask }} {
|
||||
option routers {{ ironic_inspector_dhcp_gateway }};
|
||||
option domain-name-servers {{ ironic_inspector_dhcp_nameservers}};
|
||||
option subnet-mask {{ ironic_inspector_dhcp_subnet_mask }};
|
||||
range dynamic-bootp {{ ironic_inspector_dhcp_pool_range }};
|
||||
default-lease-time {{ ironic_inspector_dhcp_lease_time }};
|
||||
max-lease-time 43200;
|
||||
next-server {{ ironic_inspector_dhcp_interface }};
|
||||
class "pxeclients" {
|
||||
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
|
||||
if pxetype=6 or pxetype=7 {
|
||||
filename "syslinux.efi";
|
||||
} else {
|
||||
{% if ironic_inspector_boot_mode == "http" %}
|
||||
filename "lpxelinux.0";
|
||||
{% else %}
|
||||
filename "pxelinux.0";
|
||||
{% endif %}
|
||||
}
|
||||
}
|
||||
}
|
15
templates/dnsmasq.conf.j2
Normal file
15
templates/dnsmasq.conf.j2
Normal file
@ -0,0 +1,15 @@
|
||||
port=15553
|
||||
interface={{ ironic_inspector_dhcp_interface }}
|
||||
dhcp-range={{ ironic_inspector_dhcp_pool_range | regex_replace(' ', ',') }}
|
||||
tftp-root={{ ironic_inspector_tftpboot_dir }}
|
||||
dhcp-option=3,{{ ironic_inspector_dhcp_gateway }}
|
||||
dhcp-option=6,{{ ironic_inspector_dhcp_nameservers }}
|
||||
dhcp-match=ipxe,175
|
||||
dhcp-match=set:efi,option:client-arch,7
|
||||
listen-address={{ ironic_inspector_dhcp_address }}
|
||||
dhcp-match=set:efi,option:client-arch,9
|
||||
dhcp-match=set:efi,option:client-arch,11
|
||||
dhcp-boot=tag:efi,tag:!ipxe,ipxe.efi
|
||||
dhcp-boot=pxelinux.0,localhost.localdomain,{{ ironic_tftp_server_address }}
|
||||
conf-dir=/etc/dnsmasq.d/,*.conf
|
||||
dhcp-hostsdir=/etc/dnsmasq.d/dhcp-hostsdir
|
101
templates/inspector.conf.j2
Normal file
101
templates/inspector.conf.j2
Normal file
@ -0,0 +1,101 @@
|
||||
# {{ ansible_managed }}
|
||||
|
||||
[DEFAULT]
|
||||
rootwrap_config = /etc/ironic-inspector/rootwrap.conf
|
||||
auth_strategy = keystone
|
||||
debug = {{ debug }}
|
||||
|
||||
# RPC Backend
|
||||
transport_url = {{ ironic_inspector_oslomsg_rpc_transport }}://{% for host in ironic_inspector_oslomsg_rpc_servers.split(',') %}{{ ironic_inspector_oslomsg_rpc_userid }}:{{ ironic_oslomsg_rpc_password }}@{{ host }}:{{ ironic_inspector_oslomsg_rpc_port }}{% if not loop.last %},{% else %}/{{ ironic_inspector_oslomsg_rpc_vhost }}{% if ironic_inspector_oslomsg_rpc_use_ssl | bool %}?ssl=1{% else %}?ssl=0{% endif %}{% endif %}{% endfor %}
|
||||
|
||||
[capabilities]
|
||||
|
||||
[cors]
|
||||
|
||||
[database]
|
||||
connection = {{ ironic_inspector_openstack_db_connection_string }}
|
||||
max_overflow = {{ ironic_inspector_db_max_overflow }}
|
||||
max_pool_size = {{ ironic_inspector_db_max_pool_size }}
|
||||
pool_timeout = {{ ironic_inspector_db_pool_timeout }}
|
||||
|
||||
[discovery]
|
||||
enroll_node_driver = ipmi
|
||||
|
||||
|
||||
[dnsmasq_pxe_filter]
|
||||
{% if ironic_inspector_pxe_filter == "dnsmasq" %}
|
||||
dhcp_hostsdir = /etc/dnsmasq.d/dhcp-hostsdir
|
||||
dnsmasq_start_command = systemctl start dnsmasq
|
||||
dnsmasq_stop_command = systemctl stop dnsmasq
|
||||
{% endif %}
|
||||
|
||||
[iptables]
|
||||
{% if ironic_inspector_pxe_filter == "iptables" %}
|
||||
manage_firewall = True
|
||||
{% endif %}
|
||||
dnsmasq_interface = br-ironic
|
||||
|
||||
[ironic]
|
||||
username = ironic
|
||||
password = {{ ironic_service_password }}
|
||||
project_name = service
|
||||
user_domain_name = {{ ironic_service_user_domain_id }}
|
||||
project_domain_name = {{ ironic_service_project_domain_id }}
|
||||
auth_url = {{ keystone_service_adminurl }}
|
||||
insecure = {{ keystone_service_adminuri_insecure | bool }}
|
||||
auth_type = password
|
||||
valid_interfaces = internal,public
|
||||
insecure = {{ keystone_service_internaluri_insecure | bool }}
|
||||
|
||||
[keystone_authtoken]
|
||||
insecure = {{ keystone_service_internaluri_insecure | bool }}
|
||||
auth_type = password
|
||||
auth_url = {{ keystone_service_adminuri }}
|
||||
auth_uri = {{ keystone_service_internaluri }}
|
||||
project_domain_id = default
|
||||
user_domain_id = default
|
||||
project_name = "service"
|
||||
username = ironic_inspector
|
||||
password = {{ ironic_inspector_service_password }}
|
||||
region_name = {{ keystone_service_region }}
|
||||
memcached_servers = {{ memcached_servers }}
|
||||
# if your memcached server is shared, use these settings to avoid cache poisoning
|
||||
memcache_security_strategy = ENCRYPT
|
||||
memcache_secret_key = {{ memcached_encryption_key }}
|
||||
|
||||
[oslo_policy]
|
||||
|
||||
[pci_devices]
|
||||
|
||||
[processing]
|
||||
add_ports = pxe
|
||||
keep_ports = present
|
||||
store_data = database
|
||||
store_data_location = report_path
|
||||
ramdisk_logs_dir = /ironic/log
|
||||
always_store_ramdisk_logs = true
|
||||
{% if ironic_inspector_processing_hooks is defined %}
|
||||
processing_hooks = {{ ironic_inspector_processing_hooks }}
|
||||
{% endif %}
|
||||
{% if ironic_inspector_enable_discovery == true %}
|
||||
node_not_found_hook = enroll
|
||||
{% endif %}
|
||||
|
||||
[pxe_filter]
|
||||
{% if ironic_inspector_dhcp_type == "isc_dhcp" %}
|
||||
driver = iptables
|
||||
{% else %}
|
||||
driver = dnsmasq
|
||||
{% endif %}
|
||||
|
||||
[swift]
|
||||
username = swift-inspector
|
||||
password = {{ ironic_inspector_swift_password }}
|
||||
project_name = ironic-inspector
|
||||
user_domain_name = default
|
||||
project_domain_name = default
|
||||
auth_url = {{ keystone_service_adminurl }}
|
||||
insecure = {{ keystone_service_adminuri_insecure | bool }}
|
||||
auth_type = password
|
||||
valid_interfaces = internal,public
|
||||
container = ironic-inspector
|
@ -98,6 +98,17 @@ use_web_server_for_images = True
|
||||
{% endif %}
|
||||
|
||||
[inspector]
|
||||
{% if ironic_services['ironic-inspector']['group'] in group_names %}
|
||||
auth_type = {{ ironic_keystone_auth_plugin }}
|
||||
auth_url = {{ keystone_service_adminuri }}
|
||||
insecure = {{ keystone_service_internaluri_insecure | bool }}
|
||||
password = {{ ironic_inspector_service_password }}
|
||||
project_domain_name = {{ ironic_inspector_service_domain_id }}
|
||||
project_name ={{ ironic_inspector_service_project_name }}
|
||||
user_domain_name = {{ ironic_inspector_service_domain_id }}
|
||||
username = {{ ironic_inspector_service_user_name }}
|
||||
valid_interfaces = {{ ironic_inspector_valid_interfaces }}
|
||||
{% endif %}
|
||||
|
||||
[ipmi]
|
||||
|
||||
|
8
templates/pxelinux-default.j2
Normal file
8
templates/pxelinux-default.j2
Normal file
@ -0,0 +1,8 @@
|
||||
default inspect
|
||||
|
||||
label inspect
|
||||
kernel {{ ironic_inspector_ipa_kernel_name }}
|
||||
append initrd={{ ironic_inspector_ipa_initrd_name }} ipa-inspection-callback-url=http://{{ internal_lb_vip_address }}:5050/v1/continue nomodeset vga=normal console=tty0 console=ttyS0,115200n8 {{ ironic_inspector_pxe_append_params | default('') }}
|
||||
ipappend 3
|
||||
|
||||
|
@ -4,3 +4,4 @@ Defaults:{{ ironic_system_user_name }} !requiretty
|
||||
Defaults:{{ ironic_system_user_name }} secure_path="{{ ironic_bin }}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
|
||||
{{ ironic_system_user_name }} ALL = (root) NOPASSWD: {{ ironic_bin }}/{{ ironic_service_name }}-rootwrap
|
||||
{{ ironic_system_user_name }} ALL = (root) NOPASSWD: {{ ironic_bin }}/{{ ironic_inspector_service_name }}-rootwrap
|
||||
|
@ -36,7 +36,6 @@ ironic_conductor_distro_packages:
|
||||
- open-iscsi
|
||||
- ipmitool
|
||||
- tftpd-hpa
|
||||
- gdisk
|
||||
|
||||
ironic_conductor_standalone_distro_packages:
|
||||
- isc-dhcp-server
|
||||
@ -48,3 +47,39 @@ ironic_library_modules_paths:
|
||||
|
||||
ironic_tftpd_service_name: tftpd-hpa
|
||||
ironic_tftpd_root: /tftpboot
|
||||
|
||||
ironic_inspector_distro_packages:
|
||||
- libxml2-dev
|
||||
- pxelinux
|
||||
- syslinux
|
||||
- syslinux-common
|
||||
- syslinux-efi
|
||||
- libxslt1-dev
|
||||
- libpq-dev
|
||||
- python-yaml
|
||||
- ipmitool
|
||||
|
||||
ironic_inspector_http_distro_packages:
|
||||
- nginx
|
||||
|
||||
ironic_inspector_isc_dhcp_distro_packages:
|
||||
- tftpd-hpa
|
||||
- isc-dhcp-server
|
||||
|
||||
ironic_inspector_dnsmasq_distro_packages:
|
||||
- dnsmasq
|
||||
|
||||
ironic_inspector_standalone_distro_packages:
|
||||
- isc-dhcp-server
|
||||
|
||||
ironic_inspector_devel_distro_packages:
|
||||
- git-core
|
||||
- libffi-dev
|
||||
- libsystemd-dev
|
||||
|
||||
ironic_inspector_library_modules_paths:
|
||||
- "/usr/lib/PXELINUX/pxelinux.0"
|
||||
- "/usr/lib/PXELINUX/lpxelinux.0"
|
||||
- "/usr/lib/syslinux/modules/efi64/chain.c32"
|
||||
- "/usr/lib/syslinux/modules/bios/ldlinux.c32"
|
||||
- "/usr/lib/syslinux/modules/efi64/ldlinux.e64"
|
||||
|
112
vars/main.yml
112
vars/main.yml
@ -148,8 +148,120 @@ ironic_packages_list: >
|
||||
{%- set package_list = package_list + ironic_conductor_standalone_distro_packages %}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- if ironic_inspector_dhcp_type == "dnsmasq" %}
|
||||
{%- set package_list = package_list + ironic_inspector_dnsmasq_distro_packages %}
|
||||
{%- else %}
|
||||
{%- set package_list = package_list + ironic_inspector_isc_dhcp_distro_packages %}
|
||||
{%- endif %}
|
||||
{%- if ironic_inspector_boot_mode == "http" %}
|
||||
{%- set package_list = package_list + ironic_inspector_http_distro_packages %}
|
||||
{%- endif %}
|
||||
{{- package_list -}}
|
||||
|
||||
ironic_service_user_list: >
|
||||
{%- set service_user_list = [] %}
|
||||
{%- if ironic_services['ironic-api']['group'] in group_names %}
|
||||
{%- set _ = service_user_list.append(
|
||||
{
|
||||
'name': ironic_service_user_name,
|
||||
'password': ironic_service_password,
|
||||
'role': ironic_service_role_name
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- endif %}
|
||||
{%- if ironic_services['ironic-inspector']['group'] in group_names %}
|
||||
{%- set _ = service_user_list.append(
|
||||
{
|
||||
'name': ironic_inspector_service_user_name,
|
||||
'password': ironic_inspector_service_password,
|
||||
'role': ironic_inspector_service_role_name
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- endif %}
|
||||
{{- service_user_list -}}
|
||||
|
||||
ironic_service_endpoint_list: >
|
||||
{%- set service_endpoint_list = [] %}
|
||||
{%- if ironic_services['ironic-api']['group'] in group_names %}
|
||||
{%- set _ = service_endpoint_list.append(
|
||||
{
|
||||
'service': ironic_service_name,
|
||||
'interface': 'public',
|
||||
'url': ironic_service_publicurl
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- set _ = service_endpoint_list.append(
|
||||
{
|
||||
'service': ironic_service_name,
|
||||
'interface': 'internal',
|
||||
'url': ironic_service_internalurl
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- set _ = service_endpoint_list.append(
|
||||
{
|
||||
'service': ironic_service_name,
|
||||
'interface': 'admin',
|
||||
'url': ironic_service_adminurl
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- endif %}
|
||||
{%- if inventory_hostname in groups['ironic_inspector'] %}
|
||||
{%- set _ = service_endpoint_list.append(
|
||||
{
|
||||
'service': ironic_inspector_service_name,
|
||||
'interface': 'public',
|
||||
'url': ironic_inspector_service_publicurl
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- set _ = service_endpoint_list.append(
|
||||
{
|
||||
'service': ironic_inspector_service_name,
|
||||
'interface': 'internal',
|
||||
'url': ironic_inspector_service_internalurl
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- set _ = service_endpoint_list.append(
|
||||
{
|
||||
'service': ironic_inspector_service_name,
|
||||
'interface': 'admin',
|
||||
'url': ironic_inspector_service_adminurl
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- endif %}
|
||||
{{- service_endpoint_list -}}
|
||||
|
||||
ironic_service_catalog_list: >
|
||||
{%- set service_catalog_list = [] %}
|
||||
{%- if ironic_services['ironic-api']['group'] in group_names %}
|
||||
{%- set _ = service_catalog_list.append(
|
||||
{
|
||||
'name': ironic_service_name,
|
||||
'type': ironic_service_type,
|
||||
'description': ironic_service_description
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- endif %}
|
||||
{%- if inventory_hostname in groups['ironic_inspector'] %}
|
||||
{%- set _ = service_catalog_list.append(
|
||||
{
|
||||
'name': ironic_inspector_service_name,
|
||||
'type': ironic_inspector_service_type,
|
||||
'description': ironic_inspector_service_description
|
||||
}
|
||||
)
|
||||
%}
|
||||
{%- endif %}
|
||||
{{- service_catalog_list -}}
|
||||
|
||||
filtered_ironic_services: |-
|
||||
{% set services = [] %}
|
||||
{% for key, value in ironic_services.items() %}
|
||||
|
@ -36,7 +36,6 @@ ironic_conductor_distro_packages:
|
||||
- iscsi-initiator-utils
|
||||
- ipmitool
|
||||
- tftp-server
|
||||
- gdisk
|
||||
|
||||
ironic_conductor_standalone_distro_packages:
|
||||
- isc-dhcp-server
|
||||
@ -48,3 +47,29 @@ ironic_library_modules_paths:
|
||||
|
||||
ironic_tftpd_service_name: tftp
|
||||
ironic_tftpd_root: /var/lib/tftpboot
|
||||
|
||||
ironic_inspector_http_distro_packages:
|
||||
- nginx
|
||||
|
||||
ironic_inspector_isc_dhcp_distro_packages:
|
||||
- tftpd-hpa
|
||||
- isc-dhcp-server
|
||||
|
||||
ironic_inspector_dnsmasq_distro_packages:
|
||||
- dnsmasq
|
||||
|
||||
ironic_inspector_standalone_distro_packages:
|
||||
- isc-dhcp-server
|
||||
|
||||
ironic_inspector_devel_distro_packages:
|
||||
- git-core
|
||||
- libffi-dev
|
||||
- libsystemd-dev
|
||||
|
||||
ironic_inspector_library_modules_paths:
|
||||
- "/usr/lib/PXELINUX/pxelinux.0"
|
||||
- "/usr/lib/PXELINUX/lpxelinux.0"
|
||||
- "/usr/lib/syslinux/modules/efi64/chain.c32"
|
||||
- "/usr/lib/syslinux/modules/bios/ldlinux.c32"
|
||||
- "/usr/lib/SYSLINUX.EFI/efi64/syslinux.efi"
|
||||
- "/usr/lib/syslinux/modules/efi64/ldlinux.e64"
|
||||
|
@ -35,7 +35,6 @@ ironic_conductor_distro_packages:
|
||||
- qemu-tools
|
||||
- syslinux
|
||||
- tftp
|
||||
- gptfdisk
|
||||
|
||||
ironic_conductor_standalone_distro_packages:
|
||||
- dhcp-server
|
||||
@ -47,3 +46,29 @@ ironic_library_modules_paths:
|
||||
|
||||
ironic_tftpd_service_name: tftp
|
||||
ironic_tftpd_root: /srv/tftpboot
|
||||
|
||||
ironic_inspector_http_distro_packages:
|
||||
- nginx
|
||||
|
||||
ironic_inspector_isc_dhcp_distro_packages:
|
||||
- tftpd-hpa
|
||||
- isc-dhcp-server
|
||||
|
||||
ironic_inspector_dnsmasq_distro_packages:
|
||||
- dnsmasq
|
||||
|
||||
ironic_inspector_standalone_distro_packages:
|
||||
- isc-dhcp-server
|
||||
|
||||
ironic_inspector_devel_distro_packages:
|
||||
- git-core
|
||||
- libffi-dev
|
||||
- libsystemd-dev
|
||||
|
||||
ironic_inspector_library_modules_paths:
|
||||
- "/usr/lib/PXELINUX/pxelinux.0"
|
||||
- "/usr/lib/PXELINUX/lpxelinux.0"
|
||||
- "/usr/lib/syslinux/modules/efi64/chain.c32"
|
||||
- "/usr/lib/syslinux/modules/bios/ldlinux.c32"
|
||||
- "/usr/lib/SYSLINUX.EFI/efi64/syslinux.efi"
|
||||
- "/usr/lib/syslinux/modules/efi64/ldlinux.e64"
|
||||
|
Loading…
Reference in New Issue
Block a user