├── .gitignore ├── LICENSE ├── README.md ├── data ├── .gitignore ├── sample_switch_configs │ ├── 4-NICS_S3048 │ │ └── S3048.txt │ ├── 4-NICS_S5232F-1 │ │ └── S5232F-1.txt │ ├── 4-NICS_S5232F-2 │ │ └── S5232F-2.txt │ ├── FC6510 │ ├── OCP │ │ ├── FC6510 │ │ ├── S3048 │ │ ├── S5232F-1 │ │ ├── S5232F-2 │ │ └── multipath.conf │ ├── Planning-Workbook.xlsm │ ├── S3048 │ ├── S5232F-1 │ ├── S5232F-2 │ └── multipath.conf └── vlock_files │ ├── containers-prepare-parameter.yaml │ ├── director_vm.vlock │ ├── powerflex_gw.vlock │ ├── powerflex_mgmt.vlock │ └── unity_container_vlock.ini └── src ├── .gitignore ├── common └── thread_helper.py ├── deploy ├── auto_common │ ├── Scp.py │ ├── __init__.py │ ├── constants.py │ ├── file_utils.py │ ├── ipmi.py │ ├── ssh.py │ ├── ui_helper.py │ ├── ui_manager.py │ └── yaml_utils.py ├── jinja2_templates │ ├── dell-environment-edge.j2.yaml │ ├── network-environment-edge.j2.yaml │ ├── network-isolation-edge.j2.yaml │ ├── network_data.j2.yaml │ ├── network_data_subnets_routed.j2.yaml │ ├── neutron-ovs-dpdk-edge.j2.yaml │ ├── neutron-sriov-edge.j2.yaml │ ├── nic-configs │ │ ├── compute_edge.j2.yaml │ │ └── nic_environment_edge.j2.yaml │ ├── node-placement-edge.j2.yaml │ ├── overrides-edge.j2.yaml │ ├── roles_data_edge.j2.yaml │ ├── site-name-edge.j2.yaml │ ├── site-name.j2.yaml │ └── static-ip-environment-edge.j2.yaml ├── ocp_deployer │ ├── __init__.py │ ├── checkpoints.py │ ├── csah.py │ ├── generate_inventory_file.py │ ├── helper.py │ ├── log_config.py │ ├── logging_ocp.conf │ ├── nodes.py │ ├── nodes.yaml │ ├── ocp_deploy.py │ └── settings │ │ ├── __init__.py │ │ ├── ocp_config.py │ │ ├── sample.ini │ │ └── sample.yaml ├── osp_deployer │ ├── __init__.py │ ├── checkpoints.py │ ├── dateloghandler.py │ ├── deployer.py │ ├── director.py │ ├── infra_host.py │ ├── logging.conf │ ├── node_conf.py │ ├── powerflexgw.py │ ├── powerflexmgmt.py │ ├── profile.py │ ├── profiles │ │ ├── csp.json │ │ └── xsp.json │ ├── sah.py │ ├── settings │ │ ├── __init__.py │ │ ├── config.py │ │ ├── gen_scripts │ │ │ ├── gen_ini_file.py │ │ │ └── gen_prop_file.py │ │ ├── sample.properties │ │ ├── sample_csp_profile.ini │ │ ├── sample_hci.ini │ │ ├── sample_hci.properties │ │ ├── sample_powerflex.ini │ │ ├── sample_powerflex.properties │ │ └── sample_xsp_profile.ini │ └── settings_sanity.py └── setup │ ├── setup_usb_idrac.py │ └── setup_usb_idrac_ocp.py ├── mgmt ├── deploy-director-vm.sh ├── deploy-powerflexgw-vm.sh ├── deploy-powerflexmgmt-vm.sh ├── director.cfg ├── ocp-csah.ks └── osp-sah.ks ├── pilot ├── agent_fencing.sh ├── ansible │ ├── README.md │ ├── compute.yaml │ ├── generated_inventory │ ├── haocp.yaml │ ├── inventory │ │ ├── rh_rhel_worker │ │ └── rhel_inv_file │ ├── ocp.yaml │ └── roles │ │ ├── bootstrap │ │ ├── README.md │ │ └── tasks │ │ │ └── main.yml │ │ ├── dhcp │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ └── dhcpd.conf.j2 │ │ ├── dns │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ ├── forward.dns.j2 │ │ │ ├── named.conf.j2 │ │ │ ├── reverse.dns.j2 │ │ │ └── zones.j2 │ │ ├── http │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ └── httpd.conf.j2 │ │ ├── ignition │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ └── install-config.j2 │ │ ├── ntp │ │ ├── handlers │ │ │ └── main.yml │ │ ├── ntp │ │ │ ├── handlers │ │ │ │ └── main.yml │ │ │ ├── tasks │ │ │ │ ├── configure.yml │ │ │ │ ├── firewall.yml │ │ │ │ ├── install.yml │ │ │ │ ├── main.yml │ │ │ │ └── service.yml │ │ │ ├── templates │ │ │ │ └── chrony.conf.j2 │ │ │ └── vars │ │ │ │ └── redhat.yml │ │ ├── tasks │ │ │ ├── configure.yml │ │ │ ├── install.yml │ │ │ ├── main.yml │ │ │ └── service.yml │ │ ├── templates │ │ │ └── chrony.conf.j2 │ │ └── vars │ │ │ └── redhat.yml │ │ ├── proxy │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ ├── haproxy.conf.j2 │ │ │ └── keepalived.conf.j2 │ │ ├── pxe │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ ├── default.j2 │ │ │ ├── ks.j2 │ │ │ ├── menu.j2 │ │ │ └── pxe.config.j2 │ │ └── rhel_compute │ │ ├── .travis.yml │ │ ├── README.md │ │ └── tasks │ │ └── main.yml ├── arg_helper.py ├── assign_role.py ├── boot_mode_helper.py ├── command_helper.py ├── config_idrac.py ├── config_idrac_dhcp.py ├── config_idracs.py ├── constants.py ├── containers-prepare-parameter.yaml ├── control_overcloud.py ├── cpu_siblings.py ├── credential_helper.py ├── customize_image.sh ├── dell_nfv.py ├── dell_nfv_edge.py ├── dell_systems.json ├── deploy-overcloud.py ├── deployment-validation │ ├── sanity.ini │ └── sanity_test.sh ├── discover_nodes │ ├── README.rst │ ├── discover_nodes.py │ ├── discover_nodes │ │ ├── __init__.py │ │ └── dracclient │ │ │ ├── __init__.py │ │ │ ├── client.py │ │ │ ├── resources │ │ │ ├── __init__.py │ │ │ └── uris.py │ │ │ └── utils_additional.py │ ├── requirements.txt │ ├── setup.cfg │ └── setup.py ├── dracclient_raid.patch ├── enable-repos.py ├── flavors_settings.json ├── identify_nodes.py ├── idrac_card_groupid.patch ├── import_nodes.py ├── install-director.sh ├── install_probe_idrac.sh ├── introspect_node.py ├── introspect_nodes.py ├── ironic_helper.py ├── is_idrac_ready.py ├── job_helper.py ├── logging_helper.py ├── network-validation │ ├── networks.json │ └── validate_networks.py ├── network_helper.py ├── nfv_parameters.py ├── ocp_templates │ ├── ntp │ │ ├── 99-master-chrony-configuration.yml │ │ ├── 99-worker-chrony-configuration.yml │ │ └── chrony.conf │ ├── sriov │ │ ├── compute-1.network.node.policy.yaml │ │ ├── compute-1.sriov.network.yaml │ │ └── compute-1.sriov.pod.yaml │ ├── storage │ │ ├── isilon │ │ │ ├── dynfspod.yaml │ │ │ ├── dynfspvc.yaml │ │ │ ├── dynfsreg.yaml │ │ │ ├── isilon-secret.yaml │ │ │ ├── isilon_v140_ops_46.yaml │ │ │ ├── restore.yaml │ │ │ ├── restorepod.yaml │ │ │ └── snapshot.yaml │ │ ├── multipathd │ │ │ └── multipathmc.yaml │ │ ├── ocs │ │ │ ├── ocsfs.yaml │ │ │ ├── ocsfspod.yaml │ │ │ ├── ocsrbd.yaml │ │ │ └── ocsrbdpod.yaml │ │ ├── powermax │ │ │ ├── dyfcpod.yaml │ │ │ ├── dyfcpvc.yaml │ │ │ ├── dyiscsipod.yaml │ │ │ ├── dyiscsipvc.yaml │ │ │ ├── powermax_v150_fc_ops_46.yaml │ │ │ ├── powermax_v150_iscsi_ops_46.yaml │ │ │ ├── restore.yaml │ │ │ ├── restorepod.yaml │ │ │ ├── secret.yaml │ │ │ └── snapshot.yaml │ │ └── unity │ │ │ ├── dyfcpod.yaml │ │ │ ├── dyfcpvc.yaml │ │ │ ├── dyiscsipod.yaml │ │ │ ├── dyiscsipvc.yaml │ │ │ ├── dynfspod.yaml │ │ │ ├── dynfspvc.yaml │ │ │ ├── emptysecret.yaml │ │ │ ├── newiscsipod.yaml │ │ │ ├── newiscsipvc.yaml │ │ │ ├── pod.yaml │ │ │ ├── regpvc.yaml │ │ │ ├── restore.yaml │ │ │ ├── restorepod.yaml │ │ │ ├── secret.json │ │ │ ├── snapshot.yaml │ │ │ └── unity_v140_ops_46.yaml │ └── velero │ │ ├── pod.yaml │ │ └── pvc.yaml ├── patch-director.sh ├── powerflex │ └── rpms │ │ └── Place_PowerFlex_RPMs_here.txt ├── powerflex_ansible_facts.patch ├── powerflex_ansible_site.patch ├── prep_overcloud_nodes.py ├── probe_idrac │ ├── README.rst │ ├── probe_idrac │ │ ├── __init__.py │ │ └── probe_idrac.py │ ├── requirements.txt │ ├── setup.cfg │ └── setup.py ├── raid.patch ├── register_overcloud.py ├── subscription.json ├── templates │ ├── .gitignore │ ├── ceph-osd-config.yaml │ ├── ceph-osd-config.yaml.orig │ ├── ceph_dashboard_admin.yaml │ ├── cinder-backend-dellemc-vxflexos-puppet.yaml │ ├── configure-barbican.yaml │ ├── custom-dellemc-volume-mappings.yaml │ ├── dell-cinder-backends.yaml │ ├── dell-environment.yaml │ ├── dellemc-powerflex-cinder-backend.yaml │ ├── dellemc-powermax-fc-cinder-backend.yaml │ ├── dellemc-powermax-iscsi-cinder-backend.yaml │ ├── dellemc-powerstore-cinder-backend.yaml │ ├── dellemc-unity-cinder-backend.yaml │ ├── dellemc-unity-cinder-container.yaml │ ├── dellsc-cinder-config.yaml │ ├── dhcpd.conf │ ├── first-boot.yaml │ ├── glance-powerflex-connector.conf │ ├── network-environment.yaml │ ├── network-isolation.yaml │ ├── neutron-ovs-dpdk.yaml │ ├── neutron-ovs-dvr.yaml │ ├── neutron-sriov.yaml │ ├── nic-configs │ │ ├── 4_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── 4_port_hci │ │ │ ├── controller.yaml │ │ │ ├── dellcomputehci.yaml │ │ │ └── nic_environment.yaml │ │ ├── 5_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── 5_port_hci │ │ │ ├── controller.yaml │ │ │ ├── dellcomputehci.yaml │ │ │ └── nic_environment.yaml │ │ ├── dvr_6_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── dvr_7_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── ovs-dpdk_6_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_dpdk.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── ovs-dpdk_7_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_dpdk.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── ovs-dpdk_8_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_dpdk.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── ovs-dpdk_9_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_dpdk.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── ovs-dpdk_sriov_8_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_dpdk_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── ovs-dpdk_sriov_9_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_dpdk_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── sriov_6_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── sriov_6_port_offload │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── sriov_7_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── sriov_7_port_offload │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── sriov_8_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── sriov_8_port_offload │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ ├── sriov_9_port │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ │ └── sriov_9_port_offload │ │ │ ├── controller.yaml │ │ │ ├── dellcompute_sriov.yaml │ │ │ ├── nic_environment.yaml │ │ │ ├── nic_environment_powerflex.yaml │ │ │ ├── powerflexstorage.yaml │ │ │ └── storage.yaml │ ├── node-placement.yaml │ ├── octavia.yaml │ ├── powermax-manila-config.yaml │ ├── roles_data.yaml │ ├── static-ip-environment.yaml │ ├── static-vip-environment.yaml │ ├── unity-manila-config.yaml │ └── unity-manila-container.yaml ├── undercloud.conf ├── undercloud_hieradata.yaml ├── unregister_overcloud.py ├── update_ssh_config.py ├── utils.patch ├── utils.py └── wsman.patch ├── tempest ├── tempest │ └── cmd │ │ ├── db │ │ ├── __init__.py │ │ ├── db_base.py │ │ └── mysql │ │ │ ├── __init__.py │ │ │ ├── delete_images.py │ │ │ ├── delete_instance.py │ │ │ ├── delete_secgroup.py │ │ │ ├── delete_stack.py │ │ │ ├── delete_volume.py │ │ │ ├── mysql_db.py │ │ │ ├── reset_quotas.py │ │ │ └── reset_volume_quotas.py │ │ └── db_cleanup.py └── tools │ └── tempest_results_processor.py └── utils └── export-release.sh /.gitignore: -------------------------------------------------------------------------------- 1 | /.project 2 | /.pydevproject 3 | /.settings 4 | /.idea 5 | *~ 6 | ## vi / vim ########################################################## 7 | *.s[a-w][a-z] 8 | *.un~ 9 | Session.vim 10 | .netrwhist 11 | *~ 12 | 13 | ## Python ############################################################ 14 | 15 | *.py[cod] 16 | 17 | # C extensions 18 | *.so 19 | 20 | # Packages 21 | *.egg 22 | *.egg-info 23 | dist 24 | build 25 | eggs 26 | parts 27 | bin 28 | var 29 | sdist 30 | develop-eggs 31 | .installed.cfg 32 | lib 33 | lib64 34 | __pycache__ 35 | 36 | # Installer logs 37 | pip-log.txt 38 | 39 | # Unit test / coverage reports 40 | .coverage 41 | .tox 42 | nosetests.xml 43 | 44 | # Translations 45 | *.mo 46 | 47 | # Mr Developer 48 | .mr.developer.cfg 49 | .project 50 | .pydevproject 51 | 52 | # PowerFlex RPMS 53 | /src/pilot/powerflex/rpms/*.rpm 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JetPack 2 | 3 | JetPack code and documentation is distributed under the Apache 2 license. Contributions back to the source are encouraged. 4 | 5 | ## Description 6 | 7 | JetPack is an innovative automation package that is used to configure the infrastructure hardware and OpenStack software in a fully automated fashion. The toolkit includes scripts from Dell EMC that work with Red Hat OpenStack Platform Director to automate the deployment process, not only to save time but to ensure the process is reliable and repeatable each time. 8 | 9 | Please reference the current Dell EMC Ready Architecture For Red Hat OpenStack Platform Software Deployment Guide v16.1 for installation and configuration 10 | 11 | ## Legal 12 | 13 | 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. 14 | -------------------------------------------------------------------------------- /data/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsp-jetpack/JetPack/1c7920fd328bc4c760488a949011bbdf99cf1934/data/.gitignore -------------------------------------------------------------------------------- /data/sample_switch_configs/OCP/multipath.conf: -------------------------------------------------------------------------------- 1 | defaults { 2 | find_multipaths yes 3 | user_friendly_names yes 4 | } 5 | 6 | 7 | blacklist { 8 | } 9 | -------------------------------------------------------------------------------- /data/sample_switch_configs/Planning-Workbook.xlsm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsp-jetpack/JetPack/1c7920fd328bc4c760488a949011bbdf99cf1934/data/sample_switch_configs/Planning-Workbook.xlsm -------------------------------------------------------------------------------- /data/sample_switch_configs/multipath.conf: -------------------------------------------------------------------------------- 1 | defaults { 2 | find_multipaths yes 3 | user_friendly_names yes 4 | } 5 | 6 | 7 | blacklist { 8 | } 9 | -------------------------------------------------------------------------------- /data/vlock_files/containers-prepare-parameter.yaml: -------------------------------------------------------------------------------- 1 | # Generated with the following on 2020-05-15T17:52:49.239128 2 | # 3 | # openstack tripleo container image prepare default --local-push-destination --output-env-file containers-prepare-parameter.yaml 4 | # 5 | 6 | parameter_defaults: 7 | ContainerImagePrepare: 8 | - push_destination: true 9 | set: 10 | ceph_alertmanager_image: ose-prometheus-alertmanager 11 | ceph_alertmanager_namespace: registry.redhat.io/openshift4 12 | ceph_alertmanager_tag: 4.1 13 | ceph_grafana_image: rhceph-4-dashboard-rhel8 14 | ceph_grafana_namespace: registry.redhat.io/rhceph 15 | ceph_grafana_tag: 4 16 | ceph_image: rhceph-4-rhel8 17 | ceph_namespace: registry.redhat.io/rhceph 18 | ceph_node_exporter_image: ose-prometheus-node-exporter 19 | ceph_node_exporter_namespace: registry.redhat.io/openshift4 20 | ceph_node_exporter_tag: v4.1 21 | ceph_prometheus_image: ose-prometheus 22 | ceph_prometheus_namespace: registry.redhat.io/openshift4 23 | ceph_prometheus_tag: 4.1 24 | ceph_tag: latest 25 | name_prefix: openstack- 26 | name_suffix: '' 27 | namespace: registry.redhat.io/rhosp-rhel8 28 | # Use Null value for standard neutron-container and use ovn for OVN-based-container 29 | neutron_driver: 30 | rhel_containers: false 31 | tag: '16.1.4' 32 | tag_from_label: '{version}-{release}' 33 | 34 | ContainerImageRegistryCredentials: 35 | registry.redhat.io: 36 | username: password 37 | -------------------------------------------------------------------------------- /data/vlock_files/unity_container_vlock.ini: -------------------------------------------------------------------------------- 1 | # Overrides the version specified in the ini file 2 | # If version lock is enabled 3 | cinder_unity_container_version=16.1-2 4 | manila_unity_container_version=16.1-2 5 | 6 | -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | ignore objects and archives, anywhere in the tree. 2 | *.[oa] 3 | -------------------------------------------------------------------------------- /src/common/thread_helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2017-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import sys 18 | import threading 19 | 20 | 21 | class ThreadWithExHandling(threading.Thread): 22 | def __init__(self, logger, object_identity=None, group=None, target=None, 23 | name=None, args=(), kwargs=None, verbose=None): 24 | threading.Thread.__init__(self, group=group, target=target, name=name, 25 | args=args, kwargs=kwargs) 26 | self.logger = logger 27 | self.ex = None 28 | self.object_identity = object_identity 29 | 30 | def run(self): 31 | try: 32 | threading.Thread.run(self) 33 | except: 34 | self.ex = sys.exc_info()[0] 35 | self.logger.exception(str(self.ex)) 36 | -------------------------------------------------------------------------------- /src/deploy/auto_common/Scp.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | try: 18 | import paramiko 19 | except ImportError: 20 | pass 21 | 22 | 23 | # noinspection PyClassHasNoInit 24 | class Scp: 25 | 26 | @staticmethod 27 | def get_file(adress, user, passw, localfile, remotefile): 28 | client = paramiko.SSHClient() 29 | client.load_system_host_keys() 30 | client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 31 | client.connect(hostname=adress, username=str(user), password=str(passw)) 32 | sftp=client.open_sftp() 33 | sftp.get(remotefile, localfile) 34 | sftp.close() 35 | client.close() 36 | 37 | @staticmethod 38 | def put_file(adress, user, passw, localfile, remotefile): 39 | client = paramiko.SSHClient() 40 | client.load_system_host_keys() 41 | client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 42 | client.connect(hostname=adress, username=str(user), password=str(passw)) 43 | sftp=client.open_sftp() 44 | sftp.put(localfile, remotefile) 45 | sftp.close() 46 | client.close() 47 | 48 | @staticmethod 49 | def mkdir(adress, user, passw, remote_directory): 50 | client = paramiko.SSHClient() 51 | client.load_system_host_keys() 52 | client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 53 | client.connect(hostname=adress, username=str(user), password=str(passw)) 54 | sftp = client.open_sftp() 55 | dir_path = str() 56 | for dir_folder in remote_directory.split("/"): 57 | if dir_folder == "": 58 | continue 59 | dir_path += r"/{0}".format(dir_folder) 60 | try: 61 | sftp.listdir(dir_path) 62 | except IOError: 63 | sftp.mkdir(dir_path) 64 | sftp.close() 65 | -------------------------------------------------------------------------------- /src/deploy/auto_common/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from ipmi import Ipmi, PowerState 18 | from ssh import Ssh 19 | from file_utils import FileHelper 20 | from ui_manager import UIManager, Widget 21 | from ui_helper import UIHelper 22 | from Scp import Scp 23 | -------------------------------------------------------------------------------- /src/deploy/auto_common/file_utils.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import re 18 | import codecs 19 | 20 | 21 | # noinspection PyClassHasNoInit 22 | class FileHelper: 23 | @staticmethod 24 | def replace_expression(fileref, search_exp, replace_exp): 25 | fh = open(fileref, 'r') 26 | content = fh.readlines() 27 | fh.close() 28 | updated = [] 29 | for line in content: 30 | line = re.sub(search_exp, replace_exp, line) 31 | updated.append(line) 32 | 33 | with codecs.open(fileref, 'wb', encoding='utf8') as f: 34 | for line in updated: 35 | f.write(line) 36 | f.close() 37 | 38 | @staticmethod 39 | def replace_expression_txt(fileref, search_exp, replace_exp): 40 | fh = open(fileref, 'r') 41 | content = fh.readlines() # Dont try this on large files.. 42 | fh.close() 43 | updated = [] 44 | 45 | for line in content: 46 | line = re.sub(search_exp, replace_exp, line) 47 | updated.append(line) 48 | 49 | f_out = file(fileref, 'w') 50 | f_out.writelines(updated) 51 | f_out.close() 52 | -------------------------------------------------------------------------------- /src/deploy/auto_common/ui_helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from auto_common import UIManager 18 | import time 19 | 20 | 21 | # noinspection PyClassHasNoInit,PyUnresolvedReferences,PyProtectedMember 22 | class UIHelper: 23 | @staticmethod 24 | def verify_new_window_opened(page_title): 25 | """ 26 | Verifies the right page (given its title), opened 27 | raise exception if it didn't 28 | """ 29 | time.sleep(1) 30 | driver = UIManager.sel()._current_browser() 31 | windows = driver.window_handles 32 | if len(windows) != 2: 33 | raise AssertionError("Only one window opened") 34 | driver.switch_to_window(windows[1]) 35 | if driver.title == page_title: 36 | driver.switch_to_window(windows[1]) 37 | return 38 | else: 39 | raise AssertionError( 40 | "Wrong window opened, expected [" + page_title + 41 | "], got [" + driver.title + "]") 42 | 43 | @staticmethod 44 | def switch_to_window(window_title): 45 | time.sleep(1) 46 | driver = UIManager.sel()._current_browser() 47 | windows = driver.window_handles 48 | if len(windows) != 2: 49 | raise AssertionError("Only one window opened") 50 | driver.switch_to_window(windows[1]) 51 | if driver.title == window_title: 52 | return 53 | else: 54 | raise AssertionError( 55 | "Wrong window found cannot switch to it, expected [" + 56 | window_title + "], got [" + driver.title + "]") 57 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/dell-environment-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | resource_registry: 15 | OS::TripleO::NodeUserData: {{NodeUserData}} 16 | 17 | parameter_defaults: 18 | NeutronPublicInterface: bond1 19 | NeutronNetworkType: vlan 20 | NeutronNetworkVLANRanges: physint:201:250,physext 21 | NeutronBridgeMappings: physint:br-tenant,physext:br-ex 22 | 23 | {%- for key, val in parameter_defaults.items() %} 24 | {%- if key.endswith("ExtraConfig") or key.endswith("Parameters") %} 25 | {{key}}: 26 | {%- for _key, _val in val.items() %} 27 | {{_key}}: {{_val}} 28 | {%- endfor %} 29 | {%- else %} 30 | {{key}}: {{val}} 31 | {%- endif %} 32 | {%- endfor %} 33 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/network-environment-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | parameter_defaults: 15 | {%- for key, val in parameter_defaults.items() %} 16 | {{key}}: {{val}} 17 | {%- endfor %} 18 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/network-isolation-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | {%- for port, port_path in resource_registry.items() %} 3 | {{port}}: {{port_path}} 4 | {%- endfor %} 5 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/neutron-ovs-dpdk-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | ## A Heat environment that can be used to deploy DPDK with OVS 16 | resource_registry: 17 | OS::TripleO::Services::ComputeNeutronOvsDpdk: {{ComputeNeutronOvsDpdk}} 18 | OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None 19 | 20 | parameter_defaults: 21 | NeutronDatapathType: "netdev" 22 | NeutronVhostuserSocketDir: "/var/lib/vhost_sockets" 23 | NeutronPluginExtensions: "qos,port_security" 24 | NeutronOVSFirewallDriver: openvswitch 25 | {%- for key, val in parameter_defaults.items() %} 26 | {%- if key == "OvsDpdkDriverType" %} 27 | OvsDpdkDriverType: {{parameter_defaults["OvsDpdkDriverType"]}} 28 | {%- endif %} 29 | {%- if key.endswith("Parameters") %} 30 | {{key}}: 31 | {%- for _key, _val in val.items() %} 32 | {{_key}}: {{_val}} 33 | {%- endfor %} 34 | {%- endif %} 35 | {%- endfor %} 36 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/neutron-sriov-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | ## A Heat environment that can be used to deploy SR-IOV 2 | resource_registry: 3 | OS::TripleO::Services::NeutronSriovAgent: {{NeutronSriovAgent}} 4 | OS::TripleO::Services::NeutronSriovHostConfig: {{NeutronSriovHostConfig}} 5 | parameter_defaults: 6 | NeutronMechanismDrivers: ['sriovnicswitch', 'openvswitch'] 7 | NeutronEnableIsolatedMetadata: true 8 | NeutronEnableForceMetadata: true 9 | NeutronTunnelTypes: '' 10 | NumSriovVfs: {{parameter_defaults.NumSriovVfs}} 11 | {%- for key, val in parameter_defaults.items() %} 12 | {%- if key.endswith("Parameters") %} 13 | {{key}}: 14 | {%- for _key, _val in val.items() %} 15 | {%- if _key == "NeutronPhysicalDevMappings" %} 16 | {{_key}}: 17 | {%- for item in _val %} 18 | - {{item}} 19 | {%- endfor %} 20 | {%- endif %} 21 | {%- if _key == "NovaPCIPassthrough" %} 22 | {{_key}}: 23 | {%- for dev in _val %} 24 | - devname: {{dev.devname}} 25 | physical_network: {{dev.physical_network}} 26 | {%- endfor %} 27 | {%- endif %} 28 | {%- endfor %} 29 | {%- endif %} 30 | {%- endfor %} 31 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/nic-configs/nic_environment_edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | {%- for key, val in resource_registry.items() %} 17 | {{key}}: {{val}} 18 | {%- endfor %} 19 | 20 | parameter_defaults: 21 | ControllerBondInterfaceOptions: {{ControllerBondInterfaceOptions}} 22 | ComputeBondInterfaceOptions: {{ComputeBondInterfaceOptions}} 23 | StorageBondInterfaceOptions: {{StorageBondInterfaceOptions}} 24 | {%- for key, val in parameter_defaults.items() %} 25 | {{key}}: {{val}} 26 | {%- endfor %} 27 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/node-placement-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | parameter_defaults: 16 | {%- for key, value in scheduler_hints.items() %} 17 | {{key}}: 18 | 'capabilities:node': '{{value}}' 19 | {%- endfor %} 20 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/overrides-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | parameter_defaults: 16 | {%- for key, val in parameter_defaults.items() %} 17 | {%- if key.endswith("SchedulerHints") %} 18 | {{key}}: 19 | {%- for sh_key, sh_val in val.items() %} 20 | {{sh_key}}: {{sh_val}} 21 | {%- endfor %} 22 | {%- else %} 23 | {{key}}: {{val}} 24 | {%- endif %} 25 | {%- endfor %} 26 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/roles_data_edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | {%- for role in roles %} 16 | - name: {{role.name}} 17 | description: | 18 | {{role.description}} 19 | HostnameFormatDefault: {{role.HostnameFormatDefault}} 20 | RoleParametersDefault: 21 | TunedProfileName: {{role.RoleParametersDefault.TunedProfileName}} 22 | networks: 23 | {%- for network in role.networks %} 24 | {{network.name}}: 25 | subnet: {{network.subnet}} 26 | {%- endfor %} 27 | uses_deprecated_params: {{role.uses_deprecated_params}} 28 | disable_upgrade_deployment: {{role.disable_upgrade_deployment}} 29 | CountDefault: {{role.CountDefault}} 30 | update_serial: {{role.update_serial}} 31 | ServicesDefault: 32 | {%- for service in role.ServicesDefault %} 33 | - {{service}} 34 | {%- endfor %} 35 | {%- endfor %} 36 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/site-name-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | OS::TripleO::Services::NovaAZConfig: {{overcloud_templates}}/deployment/nova/nova-az-config.yaml 3 | parameter_defaults: 4 | NovaComputeAvailabilityZone: {{parameter_defaults.NovaComputeAvailabilityZone}} 5 | RootStackName: {{parameter_defaults.RootStackName}} 6 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/site-name.j2.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | OS::TripleO::Services::NovaAZConfig: {{overcloud_templates}}/deployment/nova/nova-az-config.yaml 3 | 4 | parameter_defaults: 5 | NovaComputeAvailabilityZone: {{az}} 6 | ControllerExtraConfig: 7 | nova::availability_zone::default_schedule_zone: {{az}} 8 | NovaCrossAZAttach: false 9 | CinderStorageAvailabilityZone: {{az}} 10 | GlanceBackendID: {{az}} 11 | -------------------------------------------------------------------------------- /src/deploy/jinja2_templates/static-ip-environment-edge.j2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | {%- for port_key, port_path in resource_registry.items() %} 17 | {{port_key}}: {{port_path}} 18 | {%- endfor %} 19 | parameter_defaults: 20 | {%- for node_type, networks in parameter_defaults.items() %} 21 | {{node_type}}: 22 | {%- for network, ips in networks.items() %} 23 | {{network}}: 24 | {%- for ip in ips %} 25 | - {{ip}} 26 | {%- endfor %} 27 | {%- endfor %} 28 | {%- endfor %} 29 | -------------------------------------------------------------------------------- /src/deploy/ocp_deployer/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | -------------------------------------------------------------------------------- /src/deploy/ocp_deployer/log_config.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | def log_setup(log_file='default.log', debug=''): 4 | """ 5 | log setup along with log file and level. 6 | 7 | """ 8 | log_level = logging.DEBUG if debug else logging.INFO 9 | logging.basicConfig(filename=log_file, level=log_level, 10 | format=("[%(levelname)s] %(name)s " 11 | "%(funcName)s(): %(message)s")) 12 | logging.info('setting log file as: {}'.format(log_file)) 13 | sh = logging.StreamHandler() 14 | sh_formatter = logging.Formatter("%(message)s") 15 | sh.setFormatter(sh_formatter) 16 | logging.getLogger().addHandler(sh) 17 | 18 | def main(): 19 | pass 20 | 21 | 22 | if __name__ == "__main__": 23 | main() 24 | -------------------------------------------------------------------------------- /src/deploy/ocp_deployer/logging_ocp.conf: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | [loggers] 16 | keys=root, ocp_deployer, ipmi, paramiko, ssh, scp 17 | 18 | [handlers] 19 | keys=consoleHandler, fileHandler, nowhere 20 | 21 | [formatters] 22 | keys=consoleFormatter, logFormatter 23 | 24 | [logger_root] 25 | level=DEBUG 26 | handlers=nowhere 27 | propagate=1 28 | 29 | [logger_ocp_deployer] 30 | level=DEBUG 31 | handlers=fileHandler, consoleHandler 32 | qualname=ocp_deployer 33 | propagate=1 34 | 35 | 36 | [logger_ssh] 37 | level=DEBUG 38 | handlers=fileHandler, consoleHandler 39 | qualname=ssh 40 | propagate=0 41 | 42 | [logger_scp] 43 | level=DEBUG 44 | handlers=fileHandler, consoleHandler 45 | qualname=scp 46 | propagate=0 47 | 48 | 49 | [logger_ipmi] 50 | level=DEBUG 51 | handlers=fileHandler, consoleHandler 52 | qualname=ipmi 53 | propagate=0 54 | 55 | [logger_paramiko] 56 | level=ERROR 57 | handlers=fileHandler, consoleHandler 58 | qualname=paramiko.transport 59 | propagate=1 60 | 61 | [logger_config] 62 | level=DEBUG 63 | handlers=fileHandler, consoleHandler 64 | qualname=ocp_deployer.config 65 | propagate=0 66 | 67 | [handler_consoleHandler] 68 | class=StreamHandler 69 | level=INFO 70 | formatter=consoleFormatter 71 | args=(sys.stdout,) 72 | 73 | [handler_fileHandler] 74 | class=dateloghandler.Dateloghandler 75 | level=DEBUG 76 | args=('deployer.log', "w") 77 | formatter=logFormatter 78 | 79 | 80 | [handler_nowhere] 81 | class=logging.NullHandler 82 | args=() 83 | formatter=logFormatter 84 | 85 | 86 | [formatter_consoleFormatter] 87 | format= ... %(message)s 88 | 89 | 90 | [formatter_logFormatter] 91 | format=%(asctime)-15s:%(name)s:%(threadName)s:%(levelname)s:%(message)s 92 | 93 | -------------------------------------------------------------------------------- /src/deploy/ocp_deployer/nodes.yaml: -------------------------------------------------------------------------------- 1 | bootstrap_kvm: 2 | - name: bootstrap 3 | ip_os: 192.168.192.149 4 | control_nodes: 5 | - name: control1 6 | ip_os: 192.168.192.23 7 | ip_idrac: 100.82.34.21 8 | - name: control2 9 | ip_os: 192.168.192.152 10 | ip_idrac: 100.82.34.22 11 | - name: control3 12 | ip_os: 192.168.192.153 13 | ip_idrac: 100.82.34.23 14 | compute_nodes: 15 | - name: compute1 16 | ip_os: 192.168.192.154 17 | ip_idrac: 100.82.34.24 18 | os: rhcos 19 | - name: compute2 20 | ip_os: 192.168.192.155 21 | ip_idrac: 100.82.34.25 22 | os: rhel 23 | - name: compute3 24 | ip_os: 192.168.192.156 25 | ip_idrac: 100.82.34.27 26 | os: rhcos 27 | -------------------------------------------------------------------------------- /src/deploy/ocp_deployer/settings/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | -------------------------------------------------------------------------------- /src/deploy/ocp_deployer/settings/sample.ini: -------------------------------------------------------------------------------- 1 | [Subscription Manager Settings] 2 | 3 | # Subscription Manager account info for registering Red Hat subscriptions 4 | subscription_manager_user=CHANGEME 5 | subscription_manager_password=CHANGEME 6 | 7 | # The following pool IDs provide different collections of repositories. 8 | # Each is labeled with possible subscription names. 9 | 10 | # Red Hat Enterprise Linux (Physical Node) 11 | subscription_manager_pool_csah=CHANGEME 12 | 13 | [Development Settings] 14 | 15 | cloud_repo_dir=/home/ansible/JetPack 16 | 17 | [IPMI credentials Settings] 18 | 19 | # DRAC credentials with IPMI privilege for the control/compute nodes 20 | ipmi_user=root 21 | ipmi_password=CHANGEME 22 | 23 | [Network Settings] 24 | 25 | # Domain name for the cluster (i.e., mycluster.lab) 26 | domain=dsp.lab 27 | 28 | name_server=8.8.8.8 29 | gateway=CHANGEME 30 | ntp_server=CHANGEME 31 | timezone=UTC 32 | 33 | [CSAH Settings] 34 | anaconda_iface=ens1f0 35 | anaconda_ip=CHANGEME 36 | anaconda_netmask=CHANGEME 37 | 38 | public_bond_name=bond0 39 | public_boot_opts=onboot 40 | public_bond_opts=mode=802.3ad,miimon=100,xmit_hash_policy=layer3+4,lacp_rate=1 41 | public_bond_ifaces=ens1f0,ens2f0 42 | public_bond_mtu=1500 43 | 44 | bridge_name=br0 45 | bridge_netmask=255.255.255.192 46 | bridge_mtu=1500 47 | 48 | # Disk to use for deploying Operating System 49 | install_disk=sda 50 | 51 | [Deployment Settings] 52 | 53 | nodes_yaml=/home/ansible/JetPack/src/deploy/ocp_deployer/nodes.yaml 54 | csah_root_password=CHANGEME 55 | ocp_version=4.6 56 | 57 | # 58 | control_nodes_pxe_interface=NIC.Slot.2-1-1 59 | control_nodes_bond_primary_interface=NIC.Slot.2-1-1 60 | control_nodes_bond_backup_interface=NIC.Slot.2-2-1 61 | 62 | comnpute_nodes_pxe_interface=NIC.Slot.2-1-1 63 | compute_nodes_bond_primary_interface=NIC.Slot.2-1-1 64 | compute_nodes_bond_backup_interface=NIC.Slot.2-2-1 65 | 66 | boot_disk_controllers=nvme0n1 67 | boot_disk_computes=nvme0n1 68 | 69 | cluster_name=CHANGEME 70 | 71 | pull_secret_file=file.secret 72 | 73 | ansible_password=CHANGEME 74 | -------------------------------------------------------------------------------- /src/deploy/ocp_deployer/settings/sample.yaml: -------------------------------------------------------------------------------- 1 | csah: 2 | - name: csah 3 | ip_os: 100.82.46.20 4 | bootstrap_kvm: 5 | - name: bootstrap 6 | ip_os: 100.82.46.19 7 | control_nodes: 8 | - name: control1 9 | ip_os: 100.82.46.21 10 | ip_idrac: 100.82.34.21 11 | pxe_interface: NIC.Slot.2-1-1 12 | bond_interface_primary: NIC.Slot.2-1-1 13 | bond_interface_backup: NIC.Slot.2-2-1 14 | - name: control2 15 | ip_os: 100.82.46.22 16 | ip_idrac: 100.82.34.22 17 | pxe_interface: NIC.Slot.2-1-1 18 | bond_interface_primary: NIC.Slot.2-1-1 19 | bond_interface_backup: NIC.Slot.2-2-1 20 | - name: control3 21 | ip_os: 100.82.46.23 22 | ip_idrac: 100.82.34.23 23 | pxe_interface: NIC.Slot.2-1-1 24 | bond_interface_primary: NIC.Slot.2-1-1 25 | bond_interface_backup: NIC.Slot.2-2-1 26 | compute_nodes: 27 | - name: compute1 28 | ip_os: 100.82.46.24 29 | ip_idrac: 100.82.34.24 30 | pxe_interface: NIC.Slot.2-1-1 31 | bond_interface_primary: NIC.Slot.2-1-1 32 | bond_interface_backup: NIC.Slot.2-2-1 33 | os: rhcos 34 | - name: compute2 35 | ip_os: 100.82.46.25 36 | ip_idrac: 100.82.34.25 37 | pxe_interface: NIC.Slot.2-1-1 38 | bond_interface_primary: NIC.Slot.2-1-1 39 | bond_interface_backup: NIC.Slot.2-2-1 40 | os: rhel 41 | - name: compute3 42 | ip_os: 100.82.46.27 43 | ip_idrac: 100.82.34.27 44 | pxe_interface: NIC.Slot.2-1-1 45 | bond_interface_primary: NIC.Slot.2-1-1 46 | bond_interface_backup: NIC.Slot.2-2-1 47 | os: rhcos 48 | -------------------------------------------------------------------------------- /src/deploy/osp_deployer/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /src/deploy/osp_deployer/dateloghandler.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import logging 16 | from datetime import datetime 17 | 18 | 19 | class Dateloghandler(logging.FileHandler): 20 | 21 | def __init__(self, filename, mode): 22 | 23 | path = '/auto_results/' 24 | fname = datetime.now().strftime(".%Y.%m.%d-%H.%M") 25 | super(Dateloghandler, self).__init__(path + filename + fname, mode) 26 | -------------------------------------------------------------------------------- /src/deploy/osp_deployer/logging.conf: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | [loggers] 16 | keys=root, deployer, ipmi, paramiko, ssh, scp 17 | 18 | [handlers] 19 | keys=consoleHandler, fileHandler, nowhere 20 | 21 | [formatters] 22 | keys=consoleFormatter, logFormatter 23 | 24 | [logger_root] 25 | level=DEBUG 26 | handlers=nowhere 27 | propagate=1 28 | 29 | [logger_deployer] 30 | level=DEBUG 31 | handlers=fileHandler, consoleHandler 32 | qualname=osp_deployer 33 | propagate=1 34 | 35 | [logger_ssh] 36 | level=DEBUG 37 | handlers=fileHandler, consoleHandler 38 | qualname=ssh 39 | propagate=0 40 | 41 | [logger_scp] 42 | level=DEBUG 43 | handlers=fileHandler, consoleHandler 44 | qualname=scp 45 | propagate=0 46 | 47 | 48 | [logger_ipmi] 49 | level=DEBUG 50 | handlers=fileHandler, consoleHandler 51 | qualname=ipmi 52 | propagate=0 53 | 54 | [logger_paramiko] 55 | level=ERROR 56 | handlers=fileHandler, consoleHandler 57 | qualname=paramiko.transport 58 | propagate=1 59 | 60 | [logger_config] 61 | level=DEBUG 62 | handlers=fileHandler, consoleHandler 63 | qualname=osp_deployer.config 64 | propagate=0 65 | 66 | [handler_consoleHandler] 67 | class=StreamHandler 68 | level=INFO 69 | formatter=consoleFormatter 70 | args=(sys.stdout,) 71 | 72 | [handler_fileHandler] 73 | class=dateloghandler.Dateloghandler 74 | level=DEBUG 75 | args=('deployer.log', "w") 76 | formatter=logFormatter 77 | 78 | 79 | [handler_nowhere] 80 | class=logging.NullHandler 81 | args=() 82 | formatter=logFormatter 83 | 84 | 85 | [formatter_consoleFormatter] 86 | format= ... %(message)s 87 | 88 | 89 | [formatter_logFormatter] 90 | format=%(asctime)-15s:%(name)s:%(threadName)s:%(levelname)s:%(message)s 91 | -------------------------------------------------------------------------------- /src/deploy/osp_deployer/node_conf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | 18 | class NodeConf: 19 | 20 | def __init__(self, json): 21 | self.is_sah = False 22 | self.is_director = False 23 | self.is_ceph_storage = False 24 | self.is_switch = False 25 | self.hostname = None 26 | self.idrac_ip = None 27 | self.service_tag = None 28 | self.root_password = None 29 | self.external_ip = None 30 | self.public_api_gateway = None 31 | self.public_bond = None 32 | self.public_api_ip = None 33 | self.external_ip = None 34 | self.external_netmask = None 35 | self.public_slaves = None 36 | self.provisioning_ip = None 37 | self.provisioning_gateway = None 38 | self.provisioning_bond = None 39 | self.provisioning_netmask = None 40 | self.provisioning_slaves = None 41 | self.name_server = None 42 | self.node_type = None 43 | self.__dict__ = json 44 | 45 | def __str__(self): 46 | return str(self.__dict__) 47 | 48 | def __repr__(self): 49 | return str(self.__dict__) 50 | -------------------------------------------------------------------------------- /src/deploy/osp_deployer/powerflexmgmt.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import json 18 | import logging 19 | import os 20 | import re 21 | import subprocess 22 | import sys 23 | import tempfile 24 | import time 25 | import yaml 26 | from osp_deployer.settings.config import Settings 27 | from infra_host import InfraHost 28 | from infra_host import directory_check 29 | from auto_common import Scp 30 | 31 | logger = logging.getLogger("osp_deployer") 32 | 33 | class Powerflexmgmt(InfraHost): 34 | 35 | 36 | def __init__(self): 37 | 38 | self.settings = Settings.settings 39 | logger.info("Settings.settings: %s", str(Settings.settings)) 40 | self.ip = self.settings.powerflexmgmt_vm.public_api_ip 41 | self.root_pwd = self.settings.powerflexmgmt_vm.root_password 42 | self.rpm_dir = "/root/rpms" 43 | self.pilot_dir = self.settings.foreman_configuration_scripts + "/pilot" 44 | self.powerflex_dir = self.pilot_dir + "/powerflex" 45 | 46 | 47 | def upload_rpm(self): 48 | 49 | cmd = "mkdir -p " + self.rpm_dir 50 | self.run_as_root(cmd) 51 | 52 | logger.debug("Uploading powerflex presentation server rpm") 53 | source_file = self.powerflex_dir + "/rpms/" + \ 54 | self.settings.powerflex_presentation_server_rpm 55 | self.upload_file(source_file, 56 | self.rpm_dir + "/" + \ 57 | self.settings.powerflex_presentation_server_rpm) 58 | 59 | 60 | def install_presentation_server(self): 61 | 62 | logger.debug("Installing the presentation server") 63 | powerflexgw_ip = self.settings.powerflexmgmt_vm.public_api_ip 64 | cmd = "rpm -ivh " + \ 65 | self.rpm_dir + \ 66 | "/" + \ 67 | self.settings.powerflex_presentation_server_rpm 68 | self.run_as_root(cmd) 69 | -------------------------------------------------------------------------------- /src/deploy/osp_deployer/settings/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2015-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /src/mgmt/director.cfg: -------------------------------------------------------------------------------- 1 | # (c) 2014-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | rootpassword password-changeme 15 | timezone UTC 16 | smuser smuser-changeme 17 | smpassword smpass-changeme 18 | smpool smpool-changeme 19 | 20 | # optional dependent on if you need a proxy 21 | # smproxy proxy_hostname:proxy_port 22 | smproxy "" 23 | smproxyuser "" 24 | smproxypassword "" 25 | 26 | # optional if using satellite server 27 | satellite_ip "" 28 | satellite_hostname "" 29 | satellite_org "" 30 | satellite_activation_key "" 31 | 32 | hostname hostname-changeme 33 | gateway gateway-changeme 34 | nameserver nameserver-changeme 35 | ntpserver 0.centos.pool.ntp.org 36 | user stack 37 | password password-changeme 38 | 39 | # CHANGEME: Change the IP and netmask below to the IP address, netmask and 40 | # MTU for the Director VM on the Public API network 41 | enp1s0 192.168.190.13 255.255.255.0 1500 42 | 43 | # CHANGEME: Change the IP and netmask below to the IP address, netmask and 44 | # MTU for the Director VM on the Provisioning network 45 | enp2s0 192.168.120.13 255.255.255.0 1500 46 | 47 | # CHANGEME: Change the IP and netmask below to the IP address, netmask and 48 | # MTU for the Director VM on the Management network 49 | enp3s0 192.168.110.13 255.255.255.0 1500 50 | 51 | # CHANGEME: Change the IP and netmask below to the IP address, netmask and 52 | # MTU for the Director VM on the Private API network 53 | enp4s0 192.168.140.13 255.255.255.0 1500 54 | -------------------------------------------------------------------------------- /src/pilot/ansible/README.md: -------------------------------------------------------------------------------- 1 | ## Execute Playbook by following steps as below 2 | 3 | - Refer to Chapter 3 in [Dell EMC Ready Stack for Red Hat OpenShift Container Platform 4.6](https://infohub.delltechnologies.com/t/guides-45) 4 | -------------------------------------------------------------------------------- /src/pilot/ansible/compute.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: workers 3 | become: yes 4 | roles: 5 | - rhel_compute 6 | -------------------------------------------------------------------------------- /src/pilot/ansible/haocp.yaml: -------------------------------------------------------------------------------- 1 | - hosts: primary 2 | become: yes 3 | roles: 4 | - http 5 | - dhcp 6 | - dns 7 | - ntp 8 | - proxy 9 | - ignition 10 | - pxe 11 | - bootstrap 12 | - hosts: secondary 13 | become: yes 14 | roles: 15 | - http 16 | - dns 17 | - proxy 18 | - ignition 19 | - pxe 20 | -------------------------------------------------------------------------------- /src/pilot/ansible/inventory/rh_rhel_worker: -------------------------------------------------------------------------------- 1 | [all:vars] 2 | ansible_user=ansible 3 | ansible_become=True 4 | openshift_kubeconfig_path="/home/ansible/kubeconfig" 5 | [new_workers] 6 | com-2.demo.lab 7 | -------------------------------------------------------------------------------- /src/pilot/ansible/inventory/rhel_inv_file: -------------------------------------------------------------------------------- 1 | workers: 2 | hosts: com-2.demo.lab 3 | vars: 4 | subscription_user: ***************** 5 | subscription_pass: *********** 6 | pool_id: ************************* 7 | -------------------------------------------------------------------------------- /src/pilot/ansible/ocp.yaml: -------------------------------------------------------------------------------- 1 | - hosts: primary 2 | become: yes 3 | roles: 4 | - http 5 | - dhcp 6 | - dns 7 | - ntp 8 | - proxy 9 | - ignition 10 | - pxe 11 | - bootstrap 12 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/bootstrap/README.md: -------------------------------------------------------------------------------- 1 | Role Name 2 | ========= 3 | 4 | A brief description of the role goes here. 5 | 6 | Requirements 7 | ------------ 8 | 9 | Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. 10 | 11 | Role Variables 12 | -------------- 13 | 14 | A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. 15 | 16 | Dependencies 17 | ------------ 18 | 19 | A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. 20 | 21 | Example Playbook 22 | ---------------- 23 | 24 | Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: 25 | 26 | - hosts: servers 27 | roles: 28 | - { role: username.rolename, x: 42 } 29 | 30 | License 31 | ------- 32 | 33 | BSD 34 | 35 | Author Information 36 | ------------------ 37 | 38 | An optional section for the role authors to include contact information, or a website (HTML is not allowed). 39 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/bootstrap/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # tasks file for bootstrap 3 | - name: install virtualization tools 4 | dnf: 5 | name: 6 | - 'qemu-kvm' 7 | - 'libvirt' 8 | - 'libgcrypt' 9 | - 'python3-libvirt' 10 | - 'libguestfs-tools' 11 | - 'virt-install' 12 | - 'virt-viewer' 13 | - '@Virtualization Client' 14 | - '@Virtualization Hypervisor' 15 | - '@Virtualization Tools' 16 | state: latest 17 | 18 | - name: enable libvirtd service 19 | systemd: 20 | name: libvirtd 21 | enabled: yes 22 | state: started 23 | 24 | - name: get bootstrap node details 25 | set_fact: 26 | bootstrap_info: "{{ hostvars[inventory_hostname]['bootstrap_node'] }}" 27 | when: bootstrap_node is defined 28 | 29 | - name: get bootstrap mac address 30 | set_fact: 31 | bootstrap_mac_info: "{{ bootstrap_info[0].mac }}" 32 | when: bootstrap_node is defined 33 | 34 | - name: bootstrap kvm command 35 | set_fact: 36 | command: "KVM Command: virt-install --name bootstrapkvm --ram 20480 --vcpu 8 --disk path=/home/bootstrapvm-disk.qcow2,format=qcow2,size=200 --os-variant generic --network=bridge=br0,model=virtio,mac={{ bootstrap_mac_info }} --pxe --boot uefi,hd,network &" 37 | when: bootstrap_node is defined 38 | 39 | - name: create a file to save bootstrap command 40 | file: 41 | path: "{{ software_src }}/bootstrap_command" 42 | state: touch 43 | when: bootstrap_node is defined 44 | 45 | - name: add bootstrap command in file 46 | blockinfile: 47 | path: "{{ software_src }}/bootstrap_command" 48 | block: | 49 | "{{ command }}" 50 | when: bootstrap_node is defined 51 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dhcp/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # handlers file for dhcp 3 | - name: restart dhcp service 4 | systemd: 5 | name: dhcpd 6 | state: restarted 7 | listen: "restart dhcp" 8 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dhcp/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # tasks file for dhcp 3 | - name: install dhcp server 4 | yum: 5 | name: dhcp-server 6 | state: latest 7 | 8 | - name: add firewalld service for dhcp 9 | firewalld: 10 | service: dhcp 11 | permanent: yes 12 | immediate: yes 13 | state: enabled 14 | 15 | - name: generate dhcpd config 16 | template: 17 | src: dhcpd.conf.j2 18 | dest: /etc/dhcp/dhcpd.conf 19 | notify: "restart dhcp" 20 | 21 | - name: enable and start dhcpd service 22 | systemd: 23 | name: dhcpd 24 | enabled: yes 25 | state: started 26 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dhcp/templates/dhcpd.conf.j2: -------------------------------------------------------------------------------- 1 | # 2 | # DHCP Server Configuration file. 3 | # see /usr/share/doc/dhcp-server/dhcpd.conf.example 4 | # see dhcpd.conf(5) man page 5 | # 6 | # 7 | option space pxelinux; 8 | option pxelinux.magic code 208 = string; 9 | option pxelinux.configfile code 209 = text; 10 | option pxelinux.pathprefix code 210 = text; 11 | option pxelinux.reboottime code 211 = unsigned integer 32; 12 | option architecture-type code 93 = unsigned integer 16; 13 | option domain-name "{{ ansible_domain }}, {{ cluster }}.{{ ansible_domain }}"; 14 | 15 | default-lease-time {{ default_lease_time }}; 16 | max-lease-time {{ max_lease_time }}; 17 | 18 | {% if bootstrap_node is defined %} 19 | {% for node in bootstrap_node %} 20 | host {{ node.name }}{ 21 | hardware ethernet {{ node.mac }}; 22 | fixed-address {{ node.ip }}; 23 | } 24 | 25 | {% endfor %} 26 | {% endif %} 27 | 28 | {% for node in control_nodes %} 29 | host {{ node.name }}{ 30 | hardware ethernet {{ node.mac }}; 31 | fixed-address {{ node.ip }}; 32 | } 33 | 34 | {% endfor %} 35 | 36 | {% if compute_nodes is defined %} 37 | {% for node in compute_nodes %} 38 | host {{ node.name }}{ 39 | hardware ethernet {{ node.mac }}; 40 | fixed-address {{ node.ip }}; 41 | } 42 | 43 | {% endfor %} 44 | {% endif %} 45 | 46 | 47 | subnet {{ ansible_default_ipv4.network }} netmask {{ ansible_default_ipv4.netmask}} { 48 | option broadcast-address {{ ansible_default_ipv4.broadcast }}; 49 | option routers {{ ansible_default_ipv4.gateway }}; 50 | option domain-name-servers {{ ansible_default_ipv4.address }}; 51 | } 52 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dns/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # handlers file for bind 3 | - name: restart bind service 4 | systemd: name=named state=restarted 5 | listen: "restart named" 6 | 7 | - name: reload NetworkManager 8 | systemd: name=NetworkManager state=restarted 9 | listen: "reload NetworkManager" 10 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dns/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # tasks file for bind 3 | - name: identify number of '255' in {{ ansible_default_ipv4.netmask }} 4 | set_fact: 5 | striped_netmask: "{{ ansible_default_ipv4.netmask | regex_findall('(255)') |length }}" 6 | 7 | - name: number of octets to remove 8 | set_fact: 9 | strip_last_octets: "{{ 4 - striped_netmask|int }}" 10 | 11 | - name: set reverse zone name prefix 12 | set_fact: 13 | arpa_name_prefix: "{{ ansible_default_ipv4.network.split('.')[:striped_netmask|int][::-1] }}" 14 | 15 | - name: set reverse zone file name 16 | set_fact: 17 | arpa_name: "{{ arpa_name_prefix | join('.') }}.in-addr.arpa" 18 | 19 | - name: install dns 20 | yum: 21 | name: bind 22 | state: latest 23 | 24 | - name: enable firewalld bind service 25 | firewalld: 26 | service: dns 27 | permanent: yes 28 | immediate: yes 29 | state: enabled 30 | 31 | - name: generate dns config 32 | template: 33 | src: named.conf.j2 34 | dest: /etc/named.conf 35 | notify: "restart named" 36 | 37 | - name: generate zone config file 38 | template: 39 | src: zones.j2 40 | dest: /var/named/{{ cluster }}.zones 41 | 42 | - name: generate forward zone file 43 | template: 44 | src: forward.dns.j2 45 | dest: /var/named/{{ ansible_domain }} 46 | notify: "restart named" 47 | 48 | - name: generate reverse zone file 49 | template: 50 | src: reverse.dns.j2 51 | dest: /var/named/{{ arpa_name }} 52 | notify: "restart named" 53 | 54 | - name: enable and start bind service 55 | systemd: 56 | name: named 57 | enabled: yes 58 | state: started 59 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dns/templates/forward.dns.j2: -------------------------------------------------------------------------------- 1 | $ORIGIN {{ ansible_domain }}. 2 | $TTL 8600 3 | @ IN SOA {{ ansible_hostname }}.{{ ansible_domain }}. {{ ansible_domain }}. ( 4 | 50 ; serial 5 | 604800 ; Refresh after 1 week 6 | 3600 ; Retry after 1 hour 7 | 604800 ; Expire after 1 week 8 | 86400 ; Minimum TTL of 1 day 9 | ) 10 | IN NS {{ ansible_hostname }}.{{ ansible_domain}}. 11 | 12 | {{ ansible_hostname }} IN A {{ ansible_default_ipv4.address }} 13 | 14 | 15 | {% if bootstrap_node is defined %} 16 | {% for node in bootstrap_node %} 17 | {{ node.name }} IN A {{ node.ip }} 18 | {% endfor %} 19 | {% endif %} 20 | 21 | {% for node in control_nodes %} 22 | {{ node.name }} IN A {{ node.ip }} 23 | {% endfor %} 24 | 25 | {% if compute_nodes is defined %} 26 | {% for node in compute_nodes %} 27 | {{ node.name }} IN A {{ node.ip }} 28 | {% endfor %} 29 | {% endif %} 30 | 31 | $ORIGIN {{ cluster }}.{{ ansible_domain }}. 32 | 33 | {% if bootstrap_node is defined %} 34 | {% for node in bootstrap_node %} 35 | {{ node.name }} IN CNAME {{ node.name }}.{{ ansible_domain }}. 36 | {% endfor %} 37 | {% endif %} 38 | 39 | 40 | {% for node in control_nodes %} 41 | {{ node.name }} IN CNAME {{ node.name }}.{{ ansible_domain }}. 42 | {% endfor %} 43 | 44 | {% if compute_nodes is defined %} 45 | {% for node in compute_nodes %} 46 | {{ node.name }} IN CNAME {{ node.name }}.{{ ansible_domain }}. 47 | {% endfor %} 48 | {% endif %} 49 | 50 | 51 | {% if groups['secondary'] is defined %} 52 | *.apps IN A {{ vip }} 53 | api IN A {{ vip }} 54 | api-int IN A {{ vip }} 55 | {% else %} 56 | *.apps IN A {{ ansible_default_ipv4.address }} 57 | api IN A {{ ansible_default_ipv4.address }} 58 | api-int IN A {{ ansible_default_ipv4.address }} 59 | {% endif %} 60 | 61 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dns/templates/named.conf.j2: -------------------------------------------------------------------------------- 1 | // 2 | // named.conf 3 | // 4 | // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS 5 | // server as a caching only nameserver (as a localhost DNS resolver only). 6 | // 7 | // See /usr/share/doc/bind*/sample/ for example named configuration files. 8 | // 9 | // See the BIND Administrator's Reference Manual (ARM) for details about the 10 | // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html 11 | 12 | options { 13 | listen-on port 53 { any; }; 14 | listen-on-v6 port 53 { ::1; }; 15 | directory "/var/named"; 16 | dump-file "/var/named/data/cache_dump.db"; 17 | statistics-file "/var/named/data/named_stats.txt"; 18 | memstatistics-file "/var/named/data/named_mem_stats.txt"; 19 | recursing-file "/var/named/data/named.recursing"; 20 | secroots-file "/var/named/data/named.secroots"; 21 | allow-query { any; }; 22 | {% if dns_forwarder is defined %} 23 | forwarders { {{ dns_forwarder }}; }; 24 | {%endif %} 25 | 26 | /* 27 | - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. 28 | - If you are building a RECURSIVE (caching) DNS server, you need to enable 29 | recursion. 30 | - If your recursive DNS server has a public IP address, you MUST enable access 31 | control to limit queries to your legitimate users. Failing to do so will 32 | cause your server to become part of large scale DNS amplification 33 | attacks. Implementing BCP38 within your network would greatly 34 | reduce such attack surface 35 | */ 36 | recursion yes; 37 | 38 | dnssec-enable yes; 39 | dnssec-validation yes; 40 | 41 | /* Path to ISC DLV key */ 42 | bindkeys-file "/etc/named.iscdlv.key"; 43 | 44 | managed-keys-directory "/var/named/dynamic"; 45 | 46 | pid-file "/run/named/named.pid"; 47 | session-keyfile "/run/named/session.key"; 48 | }; 49 | 50 | logging { 51 | channel default_debug { 52 | file "data/named.run"; 53 | severity dynamic; 54 | }; 55 | }; 56 | 57 | zone "." IN { 58 | type hint; 59 | file "named.ca"; 60 | }; 61 | 62 | include "/etc/named.rfc1912.zones"; 63 | include "/etc/named.root.key"; 64 | include "{{ default_zone_file }}"; 65 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dns/templates/reverse.dns.j2: -------------------------------------------------------------------------------- 1 | $ORIGIN {{ arpa_name }}. 2 | $TTL 86400 3 | @ IN SOA {{ ansible_hostname }}.{{ ansible_domain }}. {{ ansible_domain }}. ( 4 | 50 ; serial 5 | 604800 ; Refresh after 1 week 6 | 3600 ; Retry after 1 hour 7 | 604800 ; Expire after 1 week 8 | 86400 ; Minimum TTL of 1 day 9 | ) 10 | @ IN NS {{ ansible_hostname }}.{{ ansible_domain }}. 11 | 12 | {% if bootstrap_node is defined %} 13 | {% for node in bootstrap_node %} 14 | {% set last_octet = '.'.join(node.ip.split('.')[-(strip_last_octets|int):][::-1]) %} 15 | {{ last_octet }} IN PTR {{ node.name }}.{{ ansible_domain }}. 16 | {% endfor %} 17 | {% endif %} 18 | 19 | {% for node in control_nodes %} 20 | {% set last_octet = '.'.join(node.ip.split('.')[-(strip_last_octets|int):][::-1]) %} 21 | {{ last_octet }} IN PTR {{ node.name }}.{{ ansible_domain }}. 22 | {% endfor %} 23 | 24 | {% if compute_nodes is defined %} 25 | {% for node in compute_nodes %} 26 | {% set last_octet = '.'.join(node.ip.split('.')[-(strip_last_octets|int):][::-1]) %} 27 | {{ last_octet }} IN PTR {{ node.name }}.{{ ansible_domain }}. 28 | {% endfor %} 29 | {% endif %} 30 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/dns/templates/zones.j2: -------------------------------------------------------------------------------- 1 | zone "{{ ansible_domain }}" IN { 2 | type master; 3 | file "{{ ansible_domain }}"; 4 | }; 5 | 6 | zone "{{ arpa_name }}" { 7 | type master; 8 | file "{{ arpa_name }}"; 9 | }; 10 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/http/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # handlers file for http 3 | - name: restart http service 4 | systemd: name=httpd state=restarted 5 | listen: "restart httpd" 6 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/http/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # tasks file for http 2 | - name: install http 3 | yum: 4 | name: httpd 5 | state: latest 6 | 7 | - name: enable and start firewalld service 8 | systemd: 9 | name: firewalld 10 | enabled: yes 11 | state: started 12 | 13 | - name: allow http to listen on port {{ http_port }} 14 | seport: 15 | ports: "{{ http_port }}" 16 | proto: tcp 17 | setype: http_port_t 18 | state: present 19 | 20 | - name: allow {{ http_port }} through firewall 21 | firewalld: 22 | port: "{{ http_port }}/tcp" 23 | permanent: yes 24 | immediate: yes 25 | state: enabled 26 | 27 | - name: generate httpd config 28 | template: 29 | src: httpd.conf.j2 30 | dest: /etc/httpd/conf/httpd.conf 31 | notify: "restart httpd" 32 | 33 | - name: enable and start service 34 | systemd: 35 | name: httpd 36 | enabled: yes 37 | state: started 38 | 39 | - name: create directory for rhcos software 40 | file: 41 | path: /var/www/html/{{ os }}/{{ version }} 42 | state: directory 43 | register: http_os_dir 44 | 45 | - name: create directories for rhel os and kickstart 46 | file: 47 | path: /var/www/html/{{ item }} 48 | state: directory 49 | loop: 50 | - kickstart 51 | - "{{ http_ignition }}" 52 | 53 | - name: copy rhcos files to http 54 | copy: 55 | src: "{{ item.src }}" 56 | dest: "{{ http_os_dir.path }}/{{ item.dest }}" 57 | with_items: 58 | - { src: "{{ software_src }}/{{ uefi_file }}", dest: "{{ uefi_file }}" } 59 | - { src: "{{ software_src }}/{{ initramfs }}", dest: "{{ initramfs }}" } 60 | - { src: "{{ software_src }}/{{ rootfs }}", dest: "{{ rootfs }}" } 61 | 62 | - name: create directory in secondary server 63 | file: 64 | path: /home/ansible/files 65 | state: directory 66 | when: 67 | - groups['secondary'] is defined 68 | - ansible_fqdn in groups['secondary'] 69 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ignition/templates/install-config.j2: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | baseDomain: {{ ansible_domain }} 3 | compute: 4 | {% if cluster_install == '5+ node' %} 5 | - hyperthreading: Enabled 6 | name: worker 7 | replicas: {{ num_of_compute_nodes }} 8 | {% else %} 9 | - name: worker 10 | platform: {} 11 | replicas: 0 12 | {% endif %} 13 | controlPlane: 14 | hyperthreading: Enabled 15 | name: master 16 | replicas: {{ num_of_control_nodes }} 17 | metadata: 18 | name: {{ cluster }} 19 | networking: 20 | clusterNetworks: 21 | - cidr: {{ cluster_network_cidr }} 22 | hostPrefix: {{ host_prefix }} 23 | networkType: OpenShiftSDN 24 | serviceNetwork: 25 | - {{ service_network_cidr }} 26 | platform: 27 | none: {} 28 | pullSecret: '{{ pull_secret.stdout }}' 29 | sshkey: '{{ ssh_key.stdout }}' 30 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'restart chrony' 3 | become: yes 4 | service: 5 | name: "{{ chrony_service_name }}" 6 | state: 'restarted' 7 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'restart chrony' 3 | become: yes 4 | service: 5 | name: "{{ chrony_service_name }}" 6 | state: 'restarted' 7 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/tasks/configure.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'configure chrony' 3 | become: yes 4 | template: 5 | src: 'chrony.conf.j2' 6 | dest: "{{ chrony_conf_file }}" 7 | notify: 'restart chrony' 8 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/tasks/firewall.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: "allow NTP traffic from clients" 3 | become: yes 4 | firewalld: 5 | service: ntp 6 | permanent: true 7 | state: enabled 8 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/tasks/install.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'install chrony' 3 | become: yes 4 | package: 5 | name: 'chrony' 6 | state: 'present' 7 | tags: 8 | - 'chrony-install' 9 | - 'chrony' 10 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'include os-specific vars' 3 | include_vars: "{{ ansible_os_family | lower }}.yml" 4 | tags: 5 | - 'chrony' 6 | - 'chrony-vars' 7 | 8 | - name: 'gather CIDR' 9 | set_fact: 10 | chrony_allow: "{{ (ansible_br0.ipv4.address + '/' + ansible_br0.ipv4.netmask) | ipaddr('network/prefix') }}" 11 | 12 | - name: 'debug' 13 | debug: 14 | var=chrony_allow 15 | 16 | - include: "install.yml" 17 | - include: "configure.yml" 18 | - include: "service.yml" 19 | - include: "firewall.yml" 20 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/tasks/service.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'manage the chrony service' 3 | become: yes 4 | service: 5 | name: '{{ chrony_service_name }}' 6 | enabled: 'yes' 7 | state: 'started' 8 | tags: 'chrony-service' 9 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/templates/chrony.conf.j2: -------------------------------------------------------------------------------- 1 | pool {{ chrony_pool }} 2 | driftfile {{ chrony_driftfile }} 3 | makestep 1.0 3 4 | rtcsync 5 | keyfile {{ chrony_keyfile }} 6 | logdir {{ chrony_logdir }} 7 | allow {{ chrony_allow }} 8 | local stratum 10 9 | 10 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/ntp/vars/redhat.yml: -------------------------------------------------------------------------------- 1 | chrony_service_name: 'chronyd' 2 | chrony_driftfile: '/var/lib/chrony/drift' 3 | chrony_keyfile: '/etc/chrony/chrony.keys' 4 | chrony_conf_file: '/etc/chrony.conf' 5 | chrony_pool: '0.centos.pool.ntp.org' 6 | chrony_logdir: '/var/log/chrony' 7 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/tasks/configure.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'configure chrony' 3 | become: yes 4 | template: 5 | src: 'chrony.conf.j2' 6 | dest: "{{ chrony_conf_file }}" 7 | notify: 'restart chrony' 8 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/tasks/install.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'install chrony' 3 | become: yes 4 | package: 5 | name: 'chrony' 6 | state: 'present' 7 | tags: 8 | - 'chrony-install' 9 | - 'chrony' 10 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'include os-specific vars' 3 | include_vars: "{{ ansible_os_family | lower }}.yml" 4 | tags: 5 | - 'chrony' 6 | - 'chrony-vars' 7 | 8 | - include: "install.yml" 9 | - include: "configure.yml" 10 | - include: "service.yml" 11 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/tasks/service.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: 'manage the chrony service' 3 | become: yes 4 | service: 5 | name: '{{ chrony_service_name }}' 6 | enabled: '{{ chrony_service_enabled }}' 7 | state: '{{ chrony_service_state }}' 8 | tags: 'chrony-service' 9 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/templates/chrony.conf.j2: -------------------------------------------------------------------------------- 1 | pool {{ chrony_pool }} 2 | driftfile {{ chrony_driftfile }} 3 | makestep 1.0 3 4 | rtcsync 5 | keyfile {{ chrony_keyfile }} 6 | logdir {{ chrony_logdir }} 7 | allow {{ chrony_allow }} 8 | local stratum 10 9 | 10 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/ntp/vars/redhat.yml: -------------------------------------------------------------------------------- 1 | chrony_driftfile: '/var/lib/chrony/drift' 2 | chrony_keyfile: '/etc/chrony/chrony.keys' 3 | chrony_conf_file: '/etc/chrony.conf' 4 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/proxy/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # handlers file for proxy 3 | - name: restart HAPROXY 4 | systemd: 5 | name: haproxy 6 | state: restarted 7 | listen: "haproxy restart" 8 | 9 | - name: restart keepalived 10 | systemd: 11 | name: keepalived 12 | state: restarted 13 | listen: "keepalived restart" 14 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/proxy/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # tasks file for proxy 3 | - name: set proxy variable 4 | set_fact: 5 | proxy: "{{ proxy }}" 6 | 7 | - name: install {{ proxy }} 8 | yum: 9 | name: "{{ proxy }}" 10 | state: latest 11 | 12 | - name: install keepalived 13 | yum: 14 | name: keepalived 15 | state: latest 16 | when: 17 | - "'secondary' in groups" 18 | 19 | - name: display network cidr 20 | set_fact: 21 | net_mask: "{{ ansible_default_ipv4.network }}/{{ ansible_default_ipv4.netmask }}" 22 | 23 | - name: display cidr 24 | set_fact: 25 | net_mask_cidr: "{{ net_mask | ipaddr('prefix') }}" 26 | 27 | - name: allow OCP ports to listen via http 28 | seport: 29 | ports: "{{ item }}" 30 | proto: tcp 31 | setype: http_port_t 32 | state: present 33 | with_items: 34 | - 6443 35 | - 443 36 | - 22623 37 | - 80 38 | 39 | - name: allow OCP ports through firewalld 40 | firewalld: 41 | port: "{{ item }}/tcp" 42 | permanent: yes 43 | state: enabled 44 | immediate: yes 45 | with_items: 46 | - 6443 47 | - 443 48 | - 22623 49 | - 80 50 | 51 | - name: keepalived firewall rich rule 52 | firewalld: 53 | rich_rule: 'rule protocol value="vrrp" accept' 54 | permanent: true 55 | immediate: true 56 | state: enabled 57 | when: 58 | - groups['secondary'] is defined 59 | - "'secondary' in groups" 60 | 61 | - name: enable {{ proxy }} service 62 | systemd: 63 | name: "{{ proxy }}" 64 | enabled: yes 65 | state: started 66 | 67 | - name: enable keepalived service 68 | systemd: 69 | name: keepalived 70 | enabled: yes 71 | state: started 72 | when: 73 | - groups['secondary'] is defined 74 | - "'secondary' in groups" 75 | 76 | - name: generate keepalived config file 77 | template: 78 | src: keepalived.conf.j2 79 | dest: /etc/keepalived/keepalived.conf 80 | notify: keepalived restart 81 | when: 82 | - groups['secondary'] is defined 83 | - "'secondary' in groups" 84 | 85 | - name: generate haproxy config file 86 | template: 87 | src: haproxy.conf.j2 88 | dest: "{{ haproxy_conf }}" 89 | notify: haproxy restart 90 | when: proxy == "haproxy" 91 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/proxy/templates/keepalived.conf.j2: -------------------------------------------------------------------------------- 1 | vrrp_script chk_haproxy { 2 | script "killall -0 haproxy" # check the haproxy process 3 | interval 2 # every 2 seconds 4 | weight 2 # add 2 points if OK 5 | } 6 | 7 | vrrp_instance VI_1 { 8 | interface br0 # interface to monitor 9 | {% if ansible_fqdn in groups['primary'] %} 10 | state MASTER 11 | {% else %} 12 | state BACKUP 13 | {% endif %} 14 | virtual_router_id 51 15 | {% if ansible_fqdn in groups['primary'] %} 16 | priority 101 # 101 on MASTER, 100 on BACKUP 17 | {% else %} 18 | priority 100 19 | {% endif %} 20 | virtual_ipaddress { 21 | {{ vip }}/{{ net_mask_cidr }} # virtual ip address 22 | } 23 | track_script { 24 | chk_haproxy 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/pxe/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # handlers file for pxe 3 | - name: restart dhcp service 4 | systemd: 5 | name: dhcpd 6 | state: restarted 7 | listen: "restart dhcp" 8 | 9 | - name: restart xinetd service 10 | systemd: 11 | name: xinetd 12 | state: restarted 13 | listen: "restart xinetd" 14 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/pxe/templates/default.j2: -------------------------------------------------------------------------------- 1 | default vesamenu.c32 2 | prompt 0timeout 300 3 | ONTIMEOUT local 4 | MENU MARGIN 10 5 | MENU ROWS 16 6 | MENU TABMSGROW 21 7 | MENU TIMEOUTROW 26 8 | MENU COLOR BORDER 30;44 #20ffffff #00000000 none 9 | MENU COLOR SCROLLBAR 30;44 #20ffffff #00000000 none 10 | MENU COLOR TITLE 0 #ffffffff #00000000 none 11 | MENU COLOR SEL 30;47 #40000000 #20ffffff 12 | MENU BACKGROUND redhat.jpg 13 | MENU TITLE PXE MenuLABEL local 14 | menu label Boot from ^local drive 15 | localboot 0xffff 16 | LABEL Bootstrap 17 | KERNEL {{ os }}/{{ version }}/{{ kernel_file }} 18 | APPEND initrd={{ os }}/{{ version }}/{{ initramfs }} ip=dhcp nomodeset rd.neednet=1 coreos.inst.insecure coreos.live.rootfs_url=http://{{ vip_ip }}:{{ http_port }}/{{ os }}/{{ version }}/{{ rootfs }} coreos.inst=yes coreos.inst.install_dev=sda coreos.inst.image_url=http://{{ vip_ip }}:{{ http_port }}/{{ os }}/{{ version }}/{{ uefi_file }} coreos.inst.ignition_url=http://{{ vip_ip }}:{{ http_port }}/{{ http_ignition }}/bootstrap.ign 19 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/pxe/templates/pxe.config.j2: -------------------------------------------------------------------------------- 1 | class "pxeclients" { 2 | match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; 3 | next-server {{ ansible_default_ipv4.address }}; 4 | if option architecture-type = 00:07 { 5 | filename "uefi/shim.efi"; 6 | } 7 | else { 8 | filename "bios/pxelinux.0"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/rhel_compute/.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | language: python 3 | python: "2.7" 4 | 5 | # Use the new container infrastructure 6 | sudo: false 7 | 8 | # Install ansible 9 | addons: 10 | apt: 11 | packages: 12 | - python-pip 13 | 14 | install: 15 | # Install ansible 16 | - pip install ansible 17 | 18 | # Check ansible version 19 | - ansible --version 20 | 21 | # Create ansible.cfg with correct roles_path 22 | - printf '[defaults]\nroles_path=../' >ansible.cfg 23 | 24 | script: 25 | # Basic role syntax check 26 | - ansible-playbook tests/test.yml -i tests/inventory --syntax-check 27 | 28 | notifications: 29 | webhooks: https://galaxy.ansible.com/api/v1/notifications/ -------------------------------------------------------------------------------- /src/pilot/ansible/roles/rhel_compute/README.md: -------------------------------------------------------------------------------- 1 | Role Name 2 | ========= 3 | 4 | A brief description of the role goes here. 5 | 6 | Requirements 7 | ------------ 8 | 9 | Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. 10 | 11 | Role Variables 12 | -------------- 13 | 14 | A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. 15 | 16 | Dependencies 17 | ------------ 18 | 19 | A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. 20 | 21 | Example Playbook 22 | ---------------- 23 | 24 | Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: 25 | 26 | - hosts: servers 27 | roles: 28 | - { role: username.rolename, x: 42 } 29 | 30 | License 31 | ------- 32 | 33 | BSD 34 | 35 | Author Information 36 | ------------------ 37 | 38 | An optional section for the role authors to include contact information, or a website (HTML is not allowed). 39 | -------------------------------------------------------------------------------- /src/pilot/ansible/roles/rhel_compute/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # tasks file for management 3 | - name: register to pool id 4 | redhat_subscription: 5 | state: present 6 | username: "{{ subscription_user }}" 7 | password: "{{ subscription_pass }}" 8 | pool_ids: 9 | - "{{ pool_id }}" 10 | 11 | - name: enable repositories in worker nodes 12 | rhsm_repository: 13 | name: "{{ item }}" 14 | state: enabled 15 | loop: 16 | - rhel-7-server-extras-rpms 17 | - rhel-7-server-rpms 18 | - rhel-7-server-ose-4.6-rpms 19 | - rhel-7-fast-datapath-rpms 20 | - rhel-7-server-optional-rpms 21 | 22 | - name: disable firewalld in worker nodes 23 | systemd: 24 | name: firewalld 25 | state: stopped 26 | enabled: no 27 | 28 | - name: copy kubeconfig file 29 | copy: 30 | src: /home/ansible/kubeconfig 31 | dest: /home/ansible/ 32 | owner: ansible 33 | group: ansible 34 | mode: '0644' 35 | -------------------------------------------------------------------------------- /src/pilot/arg_helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2017-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from constants import Constants 18 | 19 | 20 | class ArgHelper: 21 | @staticmethod 22 | def add_ip_service_tag(parser): 23 | parser.add_argument("ip_service_tag", 24 | help="""IP address of the iDRAC 25 | or service tag of the node""", 26 | metavar="ADDRESS") 27 | 28 | @staticmethod 29 | def add_model_properties_arg(parser): 30 | parser.add_argument("-m", 31 | "--model-properties", 32 | default=Constants.MODEL_PROPERTIES_FILENAME, 33 | help="""file that defines Dell system model 34 | properties, including FQDD of network 35 | interface to PXE boot from""", 36 | metavar="FILENAME") 37 | 38 | @staticmethod 39 | def add_instack_arg(parser): 40 | parser.add_argument("-n", 41 | "--node-definition", 42 | default=Constants.INSTACKENV_FILENAME, 43 | help="""node definition template file 44 | that defines the 45 | nodes being configured""", 46 | metavar="FILENAME") 47 | 48 | @staticmethod 49 | def add_inband_arg(parser): 50 | parser.add_argument("-i", "--in-band", 51 | help="Use in-band (PXE booting) introspection", 52 | action="store_true") 53 | -------------------------------------------------------------------------------- /src/pilot/boot_mode_helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2018-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from ironic.drivers.modules import deploy_utils 18 | 19 | DRAC_BOOT_MODE_BIOS = 'Bios' 20 | DRAC_BOOT_MODE_UEFI = 'Uefi' 21 | 22 | DRAC_BOOT_MODE_TO_IRONIC_BOOT_MODE_CAP = { 23 | DRAC_BOOT_MODE_BIOS: deploy_utils.SUPPORTED_CAPABILITIES['boot_mode'][0], 24 | DRAC_BOOT_MODE_UEFI: deploy_utils.SUPPORTED_CAPABILITIES['boot_mode'][1] 25 | } 26 | 27 | IRONIC_BOOT_MODE_CAP_TO_DRAC_BOOT_MODE = \ 28 | dict((v, k) for (k, v) in DRAC_BOOT_MODE_TO_IRONIC_BOOT_MODE_CAP.items()) 29 | 30 | 31 | class BootModeHelper(object): 32 | 33 | @staticmethod 34 | def is_boot_order_flexibly_programmable(drac_client, bios_settings=None): 35 | if not bios_settings: 36 | bios_settings = drac_client.list_bios_settings(by_name=True) 37 | return 'SetBootOrderFqdd1' in bios_settings 38 | 39 | @staticmethod 40 | def get_boot_mode(drac_client, bios_settings=None): 41 | if not bios_settings: 42 | bios_settings = drac_client.list_bios_settings(by_name=True) 43 | return bios_settings['BootMode'].current_value 44 | -------------------------------------------------------------------------------- /src/pilot/constants.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2017-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import os 18 | 19 | 20 | class Constants: 21 | HOME = os.path.expanduser('~') 22 | MODEL_PROPERTIES_FILENAME = os.path.join(HOME, 23 | "pilot", 24 | "dell_systems.json") 25 | INSTACKENV_FILENAME = os.path.join(HOME, 26 | 'instackenv.json') 27 | TEMPLATES = os.path.join(HOME, "pilot", "templates") 28 | UNDERCLOUD_CONF = (os.path.join(os.path.expanduser('~'), 29 | 'undercloud.conf')) 30 | -------------------------------------------------------------------------------- /src/pilot/containers-prepare-parameter.yaml: -------------------------------------------------------------------------------- 1 | # Generated with the following on 2020-05-15T17:52:49.239128 2 | # 3 | # openstack tripleo container image prepare default --local-push-destination --output-env-file containers-prepare-parameter.yaml 4 | # 5 | 6 | parameter_defaults: 7 | ContainerImagePrepare: 8 | - push_destination: true 9 | set: 10 | ceph_alertmanager_image: ose-prometheus-alertmanager 11 | ceph_alertmanager_namespace: registry.redhat.io/openshift4 12 | ceph_alertmanager_tag: 4.1 13 | ceph_grafana_image: rhceph-4-dashboard-rhel8 14 | ceph_grafana_namespace: registry.redhat.io/rhceph 15 | ceph_grafana_tag: 4 16 | ceph_image: rhceph-4-rhel8 17 | ceph_namespace: registry.redhat.io/rhceph 18 | ceph_node_exporter_image: ose-prometheus-node-exporter 19 | ceph_node_exporter_namespace: registry.redhat.io/openshift4 20 | ceph_node_exporter_tag: v4.1 21 | ceph_prometheus_image: ose-prometheus 22 | ceph_prometheus_namespace: registry.redhat.io/openshift4 23 | ceph_prometheus_tag: 4.1 24 | ceph_tag: latest 25 | name_prefix: openstack- 26 | name_suffix: '' 27 | namespace: registry.redhat.io/rhosp-rhel8 28 | # Use Null value for standard neutron-container and use ovn for OVN-based-container 29 | neutron_driver: 30 | rhel_containers: false 31 | tag: '16.1.6' 32 | tag_from_label: '{version}-{release}' 33 | 34 | ContainerImageRegistryCredentials: 35 | registry.redhat.io: 36 | username: password 37 | -------------------------------------------------------------------------------- /src/pilot/control_overcloud.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import argparse 18 | import json 19 | import os 20 | from ironicclient import client 21 | from subprocess import check_output 22 | from credential_helper import CredentialHelper 23 | 24 | 25 | def main(): 26 | parser = argparse.ArgumentParser() 27 | parser.add_argument("--power", required=True, default=None, 28 | choices=["on", "off", "reset", "cycle"], 29 | help="Control power state of all overcloud nodes") 30 | args = parser.parse_args() 31 | 32 | os_auth_url, os_tenant_name, os_username, os_password, \ 33 | os_user_domain_name, os_project_domain_name = \ 34 | CredentialHelper.get_undercloud_creds() 35 | 36 | kwargs = {'os_username': os_username, 37 | 'os_password': os_password, 38 | 'os_auth_url': os_auth_url, 39 | 'os_tenant_name': os_tenant_name, 40 | 'os_user_domain_name': os_user_domain_name, 41 | 'os_project_domain_name': os_project_domain_name} 42 | ironic = client.get_client(1, **kwargs) 43 | 44 | for node in ironic.node.list(detail=True): 45 | ip, username, password = \ 46 | CredentialHelper.get_drac_creds_from_node(node) 47 | 48 | cmd = "ipmitool -H {} -I lanplus -U {} -P '{}' chassis power {}". \ 49 | format(ip, username, password, args.power) 50 | print(cmd) 51 | 52 | os.system(cmd) 53 | 54 | 55 | if __name__ == "__main__": 56 | main() 57 | -------------------------------------------------------------------------------- /src/pilot/dell_systems.json: -------------------------------------------------------------------------------- 1 | { 2 | "PowerEdge R430": { 3 | "pxe_nic": "NIC.Embedded.3-1-1" 4 | }, 5 | "PowerEdge R620": { 6 | "pxe_nic": "NIC.Integrated.1-3-1" 7 | }, 8 | "PowerEdge R630": { 9 | "pxe_nic": "NIC.Integrated.1-3-1" 10 | }, 11 | "PowerEdge R720": { 12 | "pxe_nic": "NIC.Integrated.1-1-1" 13 | }, 14 | "PowerEdge R720xd": { 15 | "pxe_nic": "NIC.Integrated.1-1-1" 16 | }, 17 | "PowerEdge R730": { 18 | "pxe_nic": "NIC.Integrated.1-3-1" 19 | }, 20 | "PowerEdge R730xd": { 21 | "pxe_nic": "NIC.Integrated.1-3-1" 22 | }, 23 | "PowerEdge FC630": { 24 | "pxe_nic": "NIC.Integrated.1-1-1" 25 | }, 26 | "PowerEdge R740": { 27 | "pxe_nic": "NIC.Integrated.1-3-1" 28 | }, 29 | "PowerEdge R740xd": { 30 | "pxe_nic": "NIC.Integrated.1-1-1" 31 | }, 32 | "VxFlex-R740xd": { 33 | "pxe_nic": "NIC.Integrated.1-3-1" 34 | }, 35 | "PowerEdge R640": { 36 | "pxe_nic": "NIC.Integrated.1-1-1" 37 | }, 38 | "PowerEdge XE2420": { 39 | "pxe_nic": "NIC.Slot.4-1-1" 40 | }, 41 | "DSS 9600": { 42 | "pxe_nic": "NIC.Mezzanine.3-1-1" 43 | }, 44 | "DSS 9620": { 45 | "pxe_nic": "NIC.Mezzanine.3-1-1" 46 | }, 47 | "PowerEdge R7515":{ 48 | "pxe_nic": "NIC.Mezzanine.1-1-1" 49 | }, 50 | "PowerEdge R6515":{ 51 | "pxe_nic": "NIC.Slot.2-1-1" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/README.rst: -------------------------------------------------------------------------------- 1 | .. 2 | # Copyright © 2016-2021 Dell Inc. or its subsidiaries. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | discover-nodes 16 | ============== 17 | 18 | Utility for discovering nodes. 19 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/discover_nodes/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/discover_nodes/dracclient/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/discover_nodes/dracclient/resources/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/discover_nodes/dracclient/resources/uris.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | """ 16 | Schema definitions and resource URIs for the classes implemented by the 17 | DRAC WS-Man API. 18 | """ 19 | 20 | DCIM_iDRACCardEnumeration = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/' 21 | '2/DCIM_iDRACCardEnumeration') 22 | 23 | DCIM_iDRACCardInteger = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 24 | 'DCIM_iDRACCardInteger') 25 | 26 | DCIM_iDRACCardService = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 27 | 'DCIM_iDRACCardService') 28 | 29 | DCIM_iDRACCardString = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 30 | 'DCIM_iDRACCardString') 31 | 32 | DCIM_JobService = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 33 | 'DCIM_JobService') 34 | 35 | DCIM_NICEnumeration = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 36 | 'DCIM_NICEnumeration') 37 | 38 | DCIM_NICInteger = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 39 | 'DCIM_NICInteger') 40 | 41 | DCIM_NICService = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 42 | 'DCIM_NICService') 43 | 44 | DCIM_NICStatistics = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 45 | 'DCIM_NICStatistics') 46 | 47 | DCIM_NICString = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 48 | 'DCIM_NICString') 49 | 50 | DCIM_NICView = ('http://schemas.dell.com/wbem/wscim/1/cim-schema/2/' 51 | 'DCIM_NICView') 52 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/requirements.txt: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | # The order of packages is significant, because pip processes them in the order 16 | # of appearance. Changing the order has an impact on the overall integration 17 | # process, which may cause wedges in the gate later. 18 | 19 | lxml>=2.3 20 | pbr>=1.8 21 | requests>=2.5.2 22 | python-dracclient>=0.0.4 23 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/setup.cfg: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | [metadata] 16 | name = discover-nodes 17 | summary = Utility for discovering nodes 18 | description-file = README.rst 19 | maintainer = Richard Pioso 20 | maintainer_email = richard_pioso@dell.com 21 | home-page = https://tbd 22 | license = Apache-2 23 | classifier = 24 | Development Status :: 3 - Alpha 25 | Environment :: OpenStack 26 | Intended Audience :: System Administrators 27 | License :: OSI Approved :: Apache Software License 28 | Operating System :: POSIX 29 | Programming Language :: Python 30 | Programming Language :: Python :: 2 31 | Programming Language :: Python :: 2.7 32 | Programming Language :: Python :: 3 33 | Programming Language :: Python :: 3.4 34 | 35 | [files] 36 | packages = 37 | discover_nodes 38 | 39 | [entry_points] 40 | console_scripts = 41 | discover-nodes = discover_nodes.discover_nodes:main 42 | 43 | [pbr] 44 | warnerrors = True 45 | -------------------------------------------------------------------------------- /src/pilot/discover_nodes/setup.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import setuptools 16 | 17 | # In python < 2.7.4, a lazy loading of package `pbr` will break 18 | # setuptools if some other modules registered functions in `atexit`. 19 | # solution from: http://bugs.python.org/issue15881#msg170215 20 | try: 21 | import multiprocessing # noqa 22 | except ImportError: 23 | pass 24 | 25 | setuptools.setup( 26 | setup_requires=['pbr>=1.8'], 27 | pbr=True) 28 | -------------------------------------------------------------------------------- /src/pilot/enable-repos.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import os 18 | import sys 19 | import argparse 20 | 21 | args_parser = argparse.ArgumentParser() 22 | args_parser.add_argument("--proxy", 23 | help="proxy address formatted as " + 24 | "'http://:" + 25 | "@:'") 26 | 27 | args = args_parser.parse_args() 28 | 29 | repos = [ 30 | "rhel-7-server-openstack-13-rpms", 31 | "rhel-7-server-openstack-13-devtools-rpms"] 32 | 33 | 34 | def execute(cmd): 35 | print(cmd) 36 | return_code = os.system(cmd) 37 | if return_code != 0: 38 | sys.exit(return_code) 39 | 40 | 41 | if args.proxy: 42 | proxy = args.proxy 43 | os.environ["http_proxy"] = proxy 44 | os.environ["https_proxy"] = proxy 45 | 46 | for repo in repos: 47 | execute("subscription-manager repos --enable=%s" % repo) 48 | execute("yum-config-manager --enable %s --setopt=%s.priority=1" % 49 | (repo, repo)) 50 | -------------------------------------------------------------------------------- /src/pilot/flavors_settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ceph-storage": { 3 | "bios": { 4 | "SriovGlobalEnable": "Disabled" 5 | } 6 | }, 7 | "powerflex-storage": { 8 | "bios": { 9 | "SriovGlobalEnable": "Disabled" 10 | } 11 | }, 12 | "computehci": { 13 | "bios": { 14 | "SriovGlobalEnable": "Disabled", 15 | "ProcVirtualization": "Enabled" 16 | } 17 | }, 18 | "compute": { 19 | "bios": { 20 | "ProcVirtualization": "Enabled" 21 | } 22 | }, 23 | "control": { 24 | "bios": { 25 | "SriovGlobalEnable": "Disabled" 26 | } 27 | }, 28 | "default": { 29 | "bios": { 30 | "BootSeqRetry": "Enabled", 31 | "DcuIpPrefetcher": "Enabled", 32 | "DcuStreamerPrefetcher": "Enabled", 33 | "DynamicCoreAllocation": "Disabled", 34 | "IntegratedRaid": "Enabled", 35 | "InternalSdCard": "Off", 36 | "IoatEngine": "Enabled", 37 | "LogicalProc": "Enabled", 38 | "MemOpMode": "OptimizerMode", 39 | "MemTest": "Disabled", 40 | "NodeInterleave": "Disabled", 41 | "OsWatchdogTimer": "Disabled", 42 | "ProcAdjCacheLine": "Enabled", 43 | "ProcCores": "All", 44 | "ProcExecuteDisable": "Enabled", 45 | "ProcHwPrefetcher": "Enabled", 46 | "ProcVirtualization": "Disabled", 47 | "QpiSpeed": "MaxDataRate", 48 | "CpuInterconnectBusSpeed": "MaxDataRate", 49 | "RtidSetting": "Disabled", 50 | "SriovGlobalEnable": "Enabled", 51 | "SysProfile": "PerfOptimized" 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/pilot/idrac_card_groupid.patch: -------------------------------------------------------------------------------- 1 | --- idrac_card_train.py 2021-01-12 11:09:12.702610525 -0600 2 | +++ idrac_card.py 2021-01-12 11:05:14.941262715 -0600 3 | @@ -61,7 +61,7 @@ 4 | fqdd = utils.get_wsman_resource_attr( 5 | idrac_attr_xml, namespace, 'FQDD') 6 | group_id = utils.get_wsman_resource_attr( 7 | - idrac_attr_xml, namespace, 'GroupID') 8 | + idrac_attr_xml, namespace, 'GroupID', nullable=True) 9 | 10 | return cls(name, instance_id, current_value, pending_value, 11 | (read_only == 'true'), fqdd, group_id) 12 | -------------------------------------------------------------------------------- /src/pilot/install_probe_idrac.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | cd ~/pilot/probe_idrac 18 | 19 | # Install the Python packages on which probe_idrac depends. 20 | sudo pip3 install -r ./requirements.txt 21 | 22 | # Create a pip installable package in tarball format. 23 | export PBR_VERSION=0.0.1 24 | python3 ./setup.py sdist 25 | 26 | # Copy the tarball to /tmp. 27 | cp -p dist/probe-idrac-${PBR_VERSION}.tar.gz /tmp 28 | 29 | cd /tmp 30 | 31 | # Install the probe_idrac Python package. 32 | sudo pip3 install ./probe-idrac-${PBR_VERSION}.tar.gz 33 | -------------------------------------------------------------------------------- /src/pilot/introspect_node.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2017-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import argparse 18 | import introspect_nodes 19 | import logging 20 | import os 21 | import sys 22 | from arg_helper import ArgHelper 23 | from ironic_helper import IronicHelper 24 | from logging_helper import LoggingHelper 25 | 26 | logging.basicConfig() 27 | logger = logging.getLogger(os.path.splitext(os.path.basename(sys.argv[0]))[0]) 28 | logger.setLevel(logging.INFO) 29 | 30 | 31 | def parse_arguments(): 32 | parser = argparse.ArgumentParser( 33 | description="Introspects a specified overcloud node.", 34 | formatter_class=argparse.ArgumentDefaultsHelpFormatter) 35 | 36 | ArgHelper.add_ip_service_tag(parser) 37 | ArgHelper.add_inband_arg(parser) 38 | LoggingHelper.add_argument(parser) 39 | 40 | return parser.parse_args() 41 | 42 | 43 | def main(): 44 | args = parse_arguments() 45 | 46 | LoggingHelper.configure_logging(args.logging_level) 47 | 48 | ironic_client = IronicHelper.get_ironic_client() 49 | node = IronicHelper.get_ironic_node(ironic_client, args.ip_service_tag) 50 | 51 | introspect_nodes.introspect_nodes(args.in_band, 52 | ironic_client, 53 | [node]) 54 | 55 | 56 | if __name__ == "__main__": 57 | main() 58 | -------------------------------------------------------------------------------- /src/pilot/job_helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import logging 18 | import os 19 | import sys 20 | 21 | from time import sleep 22 | 23 | 24 | class JobHelper: 25 | LOG = logging.getLogger(os.path.splitext(os.path.basename(sys.argv[0]))[0]) 26 | 27 | @staticmethod 28 | def wait_for_job_completions(ironic_client, node_uuid): 29 | while ironic_client.node.vendor_passthru( 30 | node_uuid, 31 | 'list_unfinished_jobs', 32 | http_method='GET').unfinished_jobs: 33 | sleep(10) 34 | 35 | @staticmethod 36 | def determine_job_outcomes(drac_client, job_ids): 37 | all_succeeded = True 38 | 39 | for job_id in job_ids: 40 | job_status = drac_client.get_job(job_id).status 41 | 42 | if JobHelper.job_succeeded(job_status): 43 | continue 44 | 45 | all_succeeded = False 46 | JobHelper.LOG.error( 47 | "Configuration job {} encountered issues; its final status is " 48 | "{}".format(job_id, job_status)) 49 | 50 | return all_succeeded 51 | 52 | @staticmethod 53 | def job_succeeded(job_status): 54 | return job_status == 'Completed' or job_status == 'Reboot Completed' 55 | -------------------------------------------------------------------------------- /src/pilot/logging_helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import logging 18 | 19 | 20 | class LoggingHelper: 21 | 22 | @staticmethod 23 | def add_argument(parser, default="INFO"): 24 | parser.add_argument("-l", 25 | "--logging-level", 26 | default=default, 27 | choices=["CRITICAL", "ERROR", "WARNING", 28 | "INFO", "DEBUG"], 29 | help="""logging level defined by the logging 30 | module; choices include CRITICAL, ERROR, 31 | WARNING, INFO, and DEBUG""", 32 | metavar="LEVEL") 33 | 34 | @staticmethod 35 | def configure_logging(logging_level, 36 | noisy_logger="requests.packages.urllib3"): 37 | root_logger = logging.getLogger() 38 | root_logger.setLevel(logging_level) 39 | logger = logging.getLogger(noisy_logger) 40 | logger.setLevel(logging.WARN) 41 | -------------------------------------------------------------------------------- /src/pilot/network-validation/networks.json: -------------------------------------------------------------------------------- 1 | { 2 | "networks": { 3 | }, 4 | "flavors_to_networks": { 5 | "control": [ 6 | "provisioning", 7 | "private_api", 8 | "storage", 9 | "public_api", 10 | "tenant" 11 | ], 12 | "compute": [ 13 | "provisioning", 14 | "private_api", 15 | "storage", 16 | "tenant" 17 | ], 18 | "ceph-storage": [ 19 | "provisioning", 20 | "storage", 21 | "storage_clustering" 22 | ] 23 | }, 24 | "nodes": { 25 | "sah": { 26 | "user": "root", 27 | "ip" : "192.168.120.12", 28 | "networks": [ 29 | "provisioning", 30 | "management", 31 | "private_api", 32 | "storage", 33 | "public_api" 34 | ] 35 | }, 36 | "director_vm": { 37 | "user": "stack", 38 | "ip" : "192.168.120.13", 39 | "networks": [ 40 | "provisioning", 41 | "management", 42 | "private_api", 43 | "public_api" 44 | ] 45 | } 46 | } 47 | } 48 | 49 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/ntp/99-master-chrony-configuration.yml: -------------------------------------------------------------------------------- 1 | apiVersion: machineconfiguration.openshift.io/v1 2 | kind: MachineConfig 3 | metadata: 4 | labels: 5 | machineconfiguration.openshift.io/role: master 6 | name: 99-master-chrony-configuration 7 | spec: 8 | config: 9 | ignition: 10 | config: {} 11 | security: 12 | tls: {} 13 | timeouts: {} 14 | version: 2.2.0 15 | networkd: {} 16 | passwd: {} 17 | storage: 18 | files: 19 | - contents: 20 | source: data:text/plain;charset=utf-8;base64,CHRONY_BASE64 21 | verification: {} 22 | filesystem: root 23 | mode: 420 24 | path: /etc/chrony.conf 25 | osImageURL: "" 26 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/ntp/99-worker-chrony-configuration.yml: -------------------------------------------------------------------------------- 1 | apiVersion: machineconfiguration.openshift.io/v1 2 | kind: MachineConfig 3 | metadata: 4 | labels: 5 | machineconfiguration.openshift.io/role: worker 6 | name: 99-worker-chrony-configuration 7 | spec: 8 | config: 9 | ignition: 10 | config: {} 11 | security: 12 | tls: {} 13 | timeouts: {} 14 | version: 2.2.0 15 | networkd: {} 16 | passwd: {} 17 | storage: 18 | files: 19 | - contents: 20 | source: data:text/plain;charset=utf-8;base64,CHRONY_BASE64 21 | verification: {} 22 | filesystem: root 23 | mode: 420 24 | path: /etc/chrony.conf 25 | osImageURL: "" 26 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/ntp/chrony.conf: -------------------------------------------------------------------------------- 1 | server CSAH_IP 2 | driftfile /var/lib/chrony/drift 3 | makestep 1.0 3 4 | rtcsync 5 | logdir /var/log/chrony 6 | keyfile /etc/chrony.keys 7 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/sriov/compute-1.network.node.policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: sriovnetwork.openshift.io/v1 2 | kind: SriovNetworkNodePolicy 3 | metadata: 4 | name: compute-1-network-node-policy 5 | namespace: sriov-network-operator 6 | spec: 7 | resourceName: compute_1_net_devices 8 | nodeSelector: 9 | kubernetes.io/hostname: compute-1.example.com 10 | priority: 10 11 | mtu: 1500 12 | numVfs: 5 13 | nicSelector: 14 | pfNames: ["eno1","eno2"] 15 | rootDevices: ["0000:1a:00.1","0000:1a:00.2"] 16 | deviceType: netdevice 17 | isRdma: false 18 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/sriov/compute-1.sriov.network.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: sriovnetwork.openshift.io/v1 2 | kind: SriovNetwork 3 | metadata: 4 | name: compute-1-vf0-sriov-network 5 | namespace: sriov-network-operator 6 | spec: 7 | resourceName: compute_1_net_devices 8 | networkNamespace: sriov-network-operator 9 | ipam: '{"type":"static","addresses": [{"address":"192.168.150.51/24", "gateway":"192.168.150.1"}],"routes": [{"dst":"192.168.50.0/24","gw":"192.168.150.1"}]}' 10 | capabilities: '{"mac": true, "ips": true}' 11 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/sriov/compute-1.sriov.pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: compute-1-pod 5 | namespace: sriov-network-operator 6 | annotations: 7 | k8s.v1.cni.cncf.io/networks: compute-1-vf0-sriov-network 8 | spec: 9 | nodeSelector: 10 | kubernetes.io/hostname: compute-1.example.com 11 | containers: 12 | - name: example-pod 13 | command: ["/bin/bash", "-c", "sleep 2000000000000"] 14 | image: centos/tools 15 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/dynfspod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: dynamic-nfs-isilon-pod 5 | namespace: isilon 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dy-nfs-isilon 16 | volumes: 17 | - name: dy-nfs-isilon 18 | persistentVolumeClaim: 19 | claimName: dynamic-nfs-isilon-pvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/dynfspvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-nfs-isilon-pvc 5 | namespace: isilon 6 | spec: 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 4Gi 12 | storageClassName: isilon-nfs 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/dynfsreg.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: isilon-nfs-image-registry 5 | namespace: openshift-image-registry 6 | spec: 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 130Gi 12 | storageClassName: isilon-nfs 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/isilon-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: isilon-creds 5 | namespace: isilon 6 | type: Opaque 7 | data: 8 | username: 9 | password: 10 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/isilon_v140_ops_46.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: storage.dell.com/v1 2 | kind: CSIIsilon 3 | metadata: 4 | name: isilon 5 | namespace: isilon 6 | spec: 7 | driver: 8 | # Config version for CSI PowerScale v1.4.0 driver 9 | configVersion: v4 10 | replicas: 2 11 | forceUpdate: false 12 | common: 13 | # Image for CSI PowerScale driver v1.4.0 14 | image: "dellemc/csi-isilon:v1.4.0.000R" 15 | imagePullPolicy: IfNotPresent 16 | envs: 17 | - name: X_CSI_VERBOSE 18 | value: "1" 19 | - name: X_CSI_ISI_ENDPOINT 20 | value: 192.168.182.85 21 | - name: X_CSI_ISI_PORT 22 | value: "8080" 23 | - name: X_CSI_ISI_PATH 24 | value: "/ifs" 25 | - name: X_CSI_ISILON_NO_PROBE_ON_START 26 | value: "false" 27 | - name: X_CSI_ISI_AUTOPROBE 28 | value: "true" 29 | - name: X_CSI_ISI_INSECURE 30 | value: "true" 31 | - name: X_CSI_DEBUG 32 | value: "false" 33 | - name: X_CSI_CUSTOM_TOPOLOGY_ENABLED 34 | value: "false" 35 | controller: 36 | envs: 37 | - name: X_CSI_ISI_QUOTA_ENABLED 38 | value: "true" 39 | - name: X_CSI_ISI_ACCESS_ZONE 40 | value: System 41 | node: 42 | envs: 43 | - name: X_CSI_ISILON_NFS_V3 44 | value: "false" 45 | sideCars: 46 | - name: provisioner 47 | args: ["--volume-name-prefix=csipscale"] 48 | storageClass: 49 | # The storageClass name will have a prefix "isilon" 50 | - name: nfs 51 | reclaimPolicy: "Delete" 52 | allowVolumeExpansion: true 53 | volumeBindingMode: WaitForFirstConsumer 54 | parameters: 55 | AccessZone: "System" 56 | IsiPath: "/ifs" 57 | AzServiceIP: 192.168.182.85 58 | RootClientEnabled: "false" 59 | snapshotClass: 60 | # The volumeSnapshotClass name will have a prefix "isilon" 61 | - name: snap 62 | parameters: 63 | IsiPath: "/ifs" 64 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/restore.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: isilon-restore 5 | spec: 6 | storageClassName: isilon-nfs 7 | dataSource: 8 | name: isilon-snapshot 9 | kind: VolumeSnapshot 10 | apiGroup: snapshot.storage.k8s.io 11 | accessModes: 12 | - ReadWriteMany 13 | resources: 14 | requests: 15 | storage: 4Gi 16 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/restorepod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: restore-pod 5 | namespace: isilon 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: restore-pvc 16 | volumes: 17 | - name: restore-pvc 18 | persistentVolumeClaim: 19 | claimName: isilon-restore 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/isilon/snapshot.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: snapshot.storage.k8s.io/v1beta1 2 | kind: VolumeSnapshot 3 | metadata: 4 | name: isilon-snapshot 5 | namespace: isilon 6 | spec: 7 | volumeSnapshotClassName: isilon-snap 8 | source: 9 | persistentVolumeClaimName: dynamic-nfs-isilon-pvc 10 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/multipathd/multipathmc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: machineconfiguration.openshift.io/v1 2 | kind: MachineConfig 3 | metadata: 4 | name: workers-multipath-conf-default 5 | labels: 6 | machineconfiguration.openshift.io/role: worker 7 | spec: 8 | config: 9 | ignition: 10 | version: 3.1.0 11 | storage: 12 | files: 13 | - contents: 14 | source: data:text/plain;charset=utf-8;base64,ZGVmYXVsdHMgewp1c2VyX2ZyaWVuZGx5X25hbWVzIHllcwpmaW5kX211bHRpcGF0aHMgeWVzCn0KCmJsYWNrbGlzdCB7Cn0K 15 | verification: {} 16 | filesystem: root 17 | mode: 400 18 | path: /etc/multipath.conf 19 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/ocs/ocsfs.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: ocsfspvc 5 | namespace: ocs 6 | spec: 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 10Gi 12 | storageClassName: ocs-storagecluster-cephfs 13 | volumeMode: Filesystem 14 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/ocs/ocsfspod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: ocsfspod 5 | namespace: ocs 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: image-registry.openshift-image-registry.svc:5000/openshift/nginxnfs 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dynamic-ocs-fs-vol 16 | volumes: 17 | - name: dynamic-ocs-fs-vol 18 | persistentVolumeClaim: 19 | claimName: ocsfspvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/ocs/ocsrbd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: ocsrbdpvc 5 | namespace: ocs 6 | spec: 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 10Gi 12 | storageClassName: ocs-storagecluster-ceph-rbd 13 | volumeMode: Filesystem 14 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/ocs/ocsrbdpod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: ocsrbdpod 5 | namespace: ocs 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: image-registry.openshift-image-registry.svc:5000/openshift/nginxnfs 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dynamic-ocs-rbd-vol 16 | volumes: 17 | - name: dynamic-ocs-rbd-vol 18 | persistentVolumeClaim: 19 | claimName: ocsrbdpvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/dyfcpod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: dynamic-fc-powermax-pod 5 | namespace: powermax 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dy-fc-powermax 16 | volumes: 17 | - name: dy-fc-powermax 18 | persistentVolumeClaim: 19 | claimName: dynamic-fc-powermax-pvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/dyfcpvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-fc-powermax-pvc 5 | namespace: powermax 6 | spec: 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 6Gi 12 | storageClassName: powermax-bronze 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/dyiscsipod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: dynamic-iscsi-powermax-pod 5 | namespace: powermax 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dy-iscsi-powermax 16 | volumes: 17 | - name: dy-iscsi-powermax 18 | persistentVolumeClaim: 19 | claimName: dynamic-iscsi-powermax-pvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/dyiscsipvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-iscsi-powermax-pvc 5 | namespace: powermax 6 | spec: 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 6Gi 12 | storageClassName: powermax-iscsi 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/powermax_v150_fc_ops_46.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: storage.dell.com/v1 2 | kind: CSIPowerMax 3 | metadata: 4 | name: powermax 5 | namespace: powermax 6 | spec: 7 | driver: 8 | # Config version for CSI PowerMax v1.5 driver 9 | configVersion: v4 10 | # Controller count. Don't increase it 11 | replicas: 2 12 | forceUpdate: false 13 | common: 14 | # Image for CSI PowerMax driver v1.5 15 | image: dellemc/csi-powermax:v1.5.0.000R 16 | imagePullPolicy: IfNotPresent 17 | envs: 18 | # Unisphere IP 19 | # If using PowerMax reverseproxy, leave it unchanged 20 | - name: X_CSI_POWERMAX_ENDPOINT 21 | value: "https://192.168.46.26:8443/" 22 | # Change this to a 3 character prefix unique for this cluster 23 | - name: X_CSI_K8S_CLUSTER_PREFIX 24 | value: "OCP" 25 | # Preferred transport protocol (FC/ISCSI) 26 | - name: "X_CSI_TRANSPORT_PROTOCOL" 27 | value: "FC" 28 | # Set this value to a higher number (max 50) if you are using the proxy 29 | - name: "X_CSI_GRPC_MAX_THREADS" 30 | value: "4" 31 | node: 32 | envs: 33 | # Enable ISCSI CHAP Authentication 34 | - name: "X_CSI_POWERMAX_ISCSI_ENABLE_CHAP" 35 | value: "false" 36 | storageClass: 37 | - name: bronze 38 | reclaimPolicy: Delete 39 | volumeBindingMode: "Immediate" 40 | allowVolumeExpansion: true 41 | parameters: 42 | # Replace the SYMID with the Symmetrix ID of the PowerMax array 43 | SYMID: "000197900896" 44 | # Replace the SRP with the name of the Storage Resource Pool on the PowerMax array 45 | SRP: SRP_1 46 | ServiceLevel: Bronze 47 | snapshotClass: 48 | - name: snapclass 49 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/powermax_v150_iscsi_ops_46.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: storage.dell.com/v1 2 | kind: CSIPowerMax 3 | metadata: 4 | name: powermax 5 | namespace: powermax 6 | spec: 7 | driver: 8 | # Config version for CSI PowerMax v1.5 driver 9 | configVersion: v4 10 | # Controller count. Don't increase it 11 | replicas: 2 12 | forceUpdate: false 13 | common: 14 | # Image for CSI PowerMax driver v1.5 15 | image: dellemc/csi-powermax:v1.5.0.000R 16 | imagePullPolicy: IfNotPresent 17 | envs: 18 | # Unisphere IP 19 | # If using PowerMax reverseproxy, leave it unchanged 20 | - name: X_CSI_POWERMAX_ENDPOINT 21 | value: "https://192.168.46.26:8443/" 22 | # Change this to a 3 character prefix unique for this cluster 23 | - name: X_CSI_K8S_CLUSTER_PREFIX 24 | value: "OCP" 25 | # Preferred transport protocol (FC/ISCSI) 26 | - name: "X_CSI_TRANSPORT_PROTOCOL" 27 | value: "ISCSI" 28 | # iSCSI port group name 29 | - name: "X_CSI_POWERMAX_PORTGROUPS" 30 | value: "SEPort" 31 | - name: "X_CSI_POWERMAX_ARRAYS" 32 | value: "" 33 | # Set this value to a higher number (max 50) if you are using the proxy 34 | - name: "X_CSI_GRPC_MAX_THREADS" 35 | value: "4" 36 | node: 37 | envs: 38 | # Enable ISCSI CHAP Authentication 39 | - name: "X_CSI_POWERMAX_ISCSI_ENABLE_CHAP" 40 | value: "false" 41 | storageClass: 42 | - name: iscsi 43 | reclaimPolicy: Delete 44 | volumeBindingMode: "Immediate" 45 | allowVolumeExpansion: true 46 | parameters: 47 | # Replace the SYMID with the Symmetrix ID of the PowerMax array 48 | SYMID: "000197900896" 49 | # Replace the SRP with the name of the Storage Resource Pool on the PowerMax array 50 | SRP: SRP_1 51 | ServiceLevel: Bronze 52 | snapshotClass: 53 | - name: snap 54 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/restore.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: powermax-restore 5 | spec: 6 | storageClassName: powermax-bronze 7 | dataSource: 8 | name: powermax-snapshot 9 | kind: VolumeSnapshot 10 | apiGroup: snapshot.storage.k8s.io 11 | accessModes: 12 | - ReadWriteOnce 13 | resources: 14 | requests: 15 | storage: 6Gi 16 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/restorepod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: restore-pod 5 | namespace: powermax 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dy-fc-snapshot 16 | volumes: 17 | - name: dy-fc-snapshot 18 | persistentVolumeClaim: 19 | claimName: powermax-restore 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: powermax-creds 5 | namespace: powermax 6 | type: Opaque 7 | data: 8 | username: 9 | password: 10 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/powermax/snapshot.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: snapshot.storage.k8s.io/v1beta1 2 | kind: VolumeSnapshot 3 | metadata: 4 | name: powermax-snapshot 5 | spec: 6 | volumeSnapshotClassName: powermax-snapclass 7 | source: 8 | persistentVolumeClaimName: dynamic-fc-powermax-pvc 9 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/dyfcpod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: dynamic-fc-unity-pod 5 | namespace: unity 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dy-fc-unity 16 | volumes: 17 | - name: dy-fc-unity 18 | persistentVolumeClaim: 19 | claimName: dynamic-fc-unity-pvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/dyfcpvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-fc-unity-pvc 5 | namespace: unity 6 | spec: 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 6Gi 12 | storageClassName: unity-fc 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/dyiscsipod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: dynamic-iscsi-unity-pod 5 | namespace: unity 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dy-iscsi-unity 16 | volumes: 17 | - name: dy-iscsi-unity 18 | persistentVolumeClaim: 19 | claimName: dynamic-iscsi-unity-pvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/dyiscsipvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-iscsi-unity-pvc 5 | namespace: unity 6 | spec: 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 7Gi 12 | storageClassName: unity-iscsi 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/dynfspod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: dynamic-nfs-unity-pod 5 | namespace: unity 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: nginx:latest 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: dy-nfs-unity 16 | volumes: 17 | - name: dy-nfs-unity 18 | persistentVolumeClaim: 19 | claimName: dynamic-nfs-unity-pvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/dynfspvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-nfs-unity-pvc 5 | namespace: unity 6 | spec: 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 4Gi 12 | storageClassName: unity-nfs 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/emptysecret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: unity-certs-0 5 | namespace: unity 6 | type: Opaque 7 | data: 8 | cert-0: "" 9 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/newiscsipod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: new-iscsi-pvc 5 | namespace: unity 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | #image: nginx:latest 10 | image: image-registry.openshift-image-registry.svc:5000/openshift/nginxnfs 11 | ports: 12 | - containerPort: 80 13 | name: "http-server" 14 | volumeMounts: 15 | - mountPath: "/usr/share/nginx/html" 16 | name: restore-pvc 17 | volumes: 18 | - name: restore-pvc 19 | persistentVolumeClaim: 20 | claimName: dynamic-new-iscsi-unity-pvc 21 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/newiscsipvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-new-iscsi-unity-pvc 5 | namespace: unity 6 | spec: 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 1Gi 12 | storageClassName: unity-iscsi 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: image-registry-pod 5 | namespace: unity 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: image-registry.openshift-image-registry.svc:5000/openshift/nginxnfs 10 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/regpvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: dynamic-nfs-image-registry 5 | namespace: openshift-image-registry 6 | spec: 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 120Gi 12 | storageClassName: unity-nfs 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/restore.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: unity-restore 5 | spec: 6 | storageClassName: unity-iscsi 7 | dataSource: 8 | name: unity-snapshot 9 | kind: VolumeSnapshot 10 | apiGroup: snapshot.storage.k8s.io 11 | accessModes: 12 | - ReadWriteOnce 13 | resources: 14 | requests: 15 | storage: 7Gi 16 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/restorepod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: restore-pod 5 | namespace: unity 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | #image: nginx:latest 10 | image: image-registry.openshift-image-registry.svc:5000/openshift/nginxnfs 11 | ports: 12 | - containerPort: 80 13 | name: "http-server" 14 | volumeMounts: 15 | - mountPath: "/usr/share/nginx/html" 16 | name: restore-pvc 17 | volumes: 18 | - name: restore-pvc 19 | persistentVolumeClaim: 20 | claimName: unity-restore 21 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/secret.json: -------------------------------------------------------------------------------- 1 | { 2 | "storageArrayList": [ 3 | { 4 | "username": "admin", 5 | "password": "admin", 6 | "restGateway": "https://IP address", 7 | "arrayId": "xxxxxxxxxxxx", 8 | "insecure": true, 9 | "isDefaultArray": true 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/snapshot.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: snapshot.storage.k8s.io/v1beta1 2 | kind: VolumeSnapshot 3 | metadata: 4 | name: unity-snapshot 5 | namespace: unity 6 | spec: 7 | volumeSnapshotClassName: unity-snap 8 | source: 9 | persistentVolumeClaimName: dynamic-iscsi-unity-pvc 10 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/storage/unity/unity_v140_ops_46.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: storage.dell.com/v1 2 | kind: CSIUnity 3 | metadata: 4 | name: unity 5 | namespace: unity 6 | spec: 7 | driver: 8 | configVersion: v3 9 | replicas: 2 10 | common: 11 | image: "dellemc/csi-unity:v1.4.0.000R" 12 | imagePullPolicy: IfNotPresent 13 | envs: 14 | - name: X_CSI_UNITY_DEBUG 15 | value: "true" 16 | sideCars: 17 | - name: provisioner 18 | args: ["--volume-name-prefix=csiunity"] 19 | - name: snapshotter 20 | args: ["--snapshot-name-prefix=csiunitysnap"] 21 | storageClass: 22 | - name: fc 23 | reclaimPolicy: "Delete" 24 | allowVolumeExpansion: true 25 | parameters: 26 | storagePool: pool_2 27 | arrayId: "APM00193820970" 28 | protocol: "FC" 29 | - name: iscsi 30 | reclaimPolicy: "Delete" 31 | allowVolumeExpansion: true 32 | parameters: 33 | storagePool: pool_2 34 | arrayId: "APM00193820970" 35 | protocol: "iSCSI" 36 | - name: nfs 37 | reclaimPolicy: "Delete" 38 | allowVolumeExpansion: true 39 | parameters: 40 | storagePool: pool_2 41 | arrayId: "APM00193820970" 42 | protocol: "NFS" 43 | hostIoSize: "8192" 44 | nasServer: nas_1 45 | snapshotClass: 46 | - name: snap 47 | parameters: 48 | retentionDuration: "" 49 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/velero/pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: velero-bkpone-pod 5 | namespace: test-velero 6 | spec: 7 | containers: 8 | - name: task-pv-container 9 | image: image-registry.openshift-image-registry.svc:5000/openshift/nginxnfs 10 | ports: 11 | - containerPort: 80 12 | name: "http-server" 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: velero 16 | volumes: 17 | - name: velero 18 | persistentVolumeClaim: 19 | claimName: velero-bkpone-pvc 20 | -------------------------------------------------------------------------------- /src/pilot/ocp_templates/velero/pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: velero-bkpone-pvc 5 | namespace: test-velero 6 | labels: 7 | velero: test-velero 8 | velero.io/csi-volumesnapshot-class: "true" 9 | spec: 10 | accessModes: 11 | - ReadWriteOnce 12 | resources: 13 | requests: 14 | storage: 2Gi 15 | storageClassName: unity-fc 16 | -------------------------------------------------------------------------------- /src/pilot/patch-director.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | ### 18 | ### This script is responsible for applying patches to the OSP Director. The 19 | ### patches provide an interim workaround until bug(s) are resolved upstream. 20 | ### 21 | ### It's possible that updating the Director (via yum) will affect files in 22 | ### a way that a patch is no longer relevant, or no longer cleanly applies. 23 | ### If this situation arises, the patch data in this file will need to be 24 | ### updated to work with the new Director code. 25 | ### 26 | 27 | domain_name=$(grep CloudDomain ~/pilot/templates/dell-environment.yaml | awk -F: '{print$2}' | tr -d '[:space:]') 28 | 29 | sudo grep -q ^dhcp_domain=${domain_name}\$ /etc/nova/nova.conf 30 | if [ $? -ne 0 ] ; then 31 | echo "Patching CloudDomain (${domain_name}) into nova.conf and restarting nova..." 32 | sudo sed -i.bak "s/^dhcp_domain=.*/dhcp_domain=${domain_name}/" /etc/nova/nova.conf || exit 1 33 | 34 | # Restart all of nova 35 | sudo systemctl restart openstack-nova-api.service || exit 1 36 | sudo systemctl restart openstack-nova-cert.service || exit 1 37 | sudo systemctl restart openstack-nova-compute.service || exit 1 38 | sudo systemctl restart openstack-nova-conductor.service || exit 1 39 | sudo systemctl restart openstack-nova-scheduler.service || exit 1 40 | fi 41 | -------------------------------------------------------------------------------- /src/pilot/powerflex/rpms/Place_PowerFlex_RPMs_here.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsp-jetpack/JetPack/1c7920fd328bc4c760488a949011bbdf99cf1934/src/pilot/powerflex/rpms/Place_PowerFlex_RPMs_here.txt -------------------------------------------------------------------------------- /src/pilot/powerflex_ansible_facts.patch: -------------------------------------------------------------------------------- 1 | -- roles/powerflex-facts/tasks/facts.yaml 2021-01-15 10:00:48.890130804 -0600 2 | +++ /usr/share/powerflex-ansible/roles/powerflex-facts/tasks/facts.yaml 2021-01-15 07:57:51.983749499 -0600 3 | @@ -53,3 +53,7 @@ 4 | - name: Set the spare policy based upon SDSs count 5 | set_fact: 6 | spare_policy_pct: "{{ ((100 / sds_count | int) | round) | int }}" 7 | + 8 | +- name: Check installed RPMS 9 | + package_facts: 10 | + manager: auto 11 | -------------------------------------------------------------------------------- /src/pilot/powerflex_ansible_site.patch: -------------------------------------------------------------------------------- 1 | --- site.yaml 2021-01-18 11:13:09.197458837 -0600 2 | +++ site.yaml.old 2021-01-18 11:14:40.543212747 -0600 3 | @@ -29,7 +29,7 @@ 4 | gather_facts: no 5 | become: true 6 | roles: 7 | + - { role: "powerflex-mdm", when: "'EMC-ScaleIO-mdm' not in ansible_facts.packages" } 8 | - - powerflex-mdm 9 | tags: powerflex-mdm 10 | 11 | - hosts: tbs 12 | @@ -37,14 +37,14 @@ 13 | gather_facts: no 14 | become: true 15 | roles: 16 | + - { role: "powerflex-tb", when: "'EMC-ScaleIO-mdm' not in ansible_facts.packages" } 17 | - - powerflex-tb 18 | tags: powerflex-tb 19 | 20 | - hosts: mdms 21 | name: "Configure PowerFlex storage" 22 | gather_facts: no 23 | roles: 24 | + - { role: "powerflex-config", when: "'EMC-ScaleIO-mdm' not in ansible_facts.packages" } 25 | - - powerflex-config 26 | tags: powerflex-config 27 | 28 | - hosts: sdss 29 | @@ -52,7 +52,7 @@ 30 | gather_facts: no 31 | become: true 32 | roles: 33 | + - { role: "powerflex-sds", when: "'EMC-ScaleIO-sds' not in ansible_facts.packages" } 34 | - - powerflex-sds 35 | tags: powerflex-sds 36 | 37 | - hosts: all 38 | @@ -60,7 +60,7 @@ 39 | gather_facts: no 40 | become: true 41 | roles: 42 | + - { role: "powerflex-lia", when: "'EMC-ScaleIO-lia' not in ansible_facts.packages" } 43 | - - powerflex-lia 44 | tags: powerflex-lia 45 | 46 | - hosts: sdcs 47 | @@ -68,5 +68,5 @@ 48 | gather_facts: no 49 | become: true 50 | roles: 51 | + - { role: "powerflex-sdc", when: "'EMC-ScaleIO-sdc' not in ansible_facts.packages" } 52 | - - powerflex-sdc 53 | tags: powerflex-sdc 54 | 55 | -------------------------------------------------------------------------------- /src/pilot/probe_idrac/README.rst: -------------------------------------------------------------------------------- 1 | .. 2 | # Copyright © 2016-2021 Dell Inc. or its subsidiaries. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | probe-idrac 16 | =========== 17 | 18 | Utility for gathering data from Dell Integrated Dell Remote Access Controllers 19 | (iDRAC). 20 | -------------------------------------------------------------------------------- /src/pilot/probe_idrac/probe_idrac/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | -------------------------------------------------------------------------------- /src/pilot/probe_idrac/requirements.txt: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | # The order of packages is significant, because pip processes them in the order 16 | # of appearance. Changing the order has an impact on the overall integration 17 | # process, which may cause wedges in the gate later. 18 | 19 | lxml>=2.3 20 | pbr>=1.8 21 | requests>=2.5.2 22 | python-dracclient>=0.0.4 23 | -------------------------------------------------------------------------------- /src/pilot/probe_idrac/setup.cfg: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | [metadata] 16 | name = probe-idrac 17 | summary = Utility for gathering data from Dell Integrated Dell Remote Access Controllers (iDRAC) 18 | description-file = README.rst 19 | maintainer = Richard Pioso 20 | maintainer_email = richard_pioso@dell.com 21 | home-page = https://tbd 22 | license = Apache-2 23 | classifier = 24 | Development Status :: 3 - Alpha 25 | Environment :: OpenStack 26 | Intended Audience :: System Administrators 27 | License :: OSI Approved :: Apache Software License 28 | Operating System :: POSIX 29 | Programming Language :: Python 30 | Programming Language :: Python :: 2 31 | Programming Language :: Python :: 2.7 32 | Programming Language :: Python :: 3 33 | Programming Language :: Python :: 3.4 34 | 35 | [files] 36 | packages = 37 | probe_idrac 38 | 39 | [entry_points] 40 | console_scripts = 41 | probe-idrac = probe_idrac.probe_idrac:main 42 | 43 | [pbr] 44 | warnerrors = True 45 | -------------------------------------------------------------------------------- /src/pilot/probe_idrac/setup.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | import setuptools 16 | 17 | # In python < 2.7.4, a lazy loading of package `pbr` will break 18 | # setuptools if some other modules registered functions in `atexit`. 19 | # solution from: http://bugs.python.org/issue15881#msg170215 20 | try: 21 | import multiprocessing # noqa 22 | except ImportError: 23 | pass 24 | 25 | setuptools.setup( 26 | setup_requires=['pbr>=1.8'], 27 | pbr=True) 28 | -------------------------------------------------------------------------------- /src/pilot/subscription.json: -------------------------------------------------------------------------------- 1 | { 2 | "cdn_credentials": { 3 | "cdn_username": "CHANGEME_username", 4 | "cdn_password": "CHANGEME_password" 5 | }, 6 | "_comment1": [ "If using red hat satellite, remove the leading underscore from", 7 | "_satellite_credentials below and fill in the following satellite", 8 | "information." ], 9 | "_satellite_credentials": { 10 | "satellite_organization": "CHANGEME_organiaztion", 11 | "satellite_activation_key": "CHANGEME_activationkey" 12 | }, 13 | "_comment2": [ "If using a proxy, remove the leading underscore from", 14 | "_proxy_credentials below and fill in the following proxy", 15 | "information." ], 16 | "_proxy_credentials": { 17 | "proxy_url": "CHANGEME_proxy_hostname:CHANGEME_proxy_port", 18 | "proxy_username": "CHANGEME_proxy_username", 19 | "proxy_password": "CHANGEME_proxy_password" 20 | }, 21 | "roles": { 22 | "control": { 23 | "pool_ids": [ "CHANGEME_RHEL_8_pool_id" ], 24 | "repos": [ "rhel-8-for-x86_64-baseos-eus-rpms" ] 25 | }, 26 | "compute": { 27 | "pool_ids": [ "CHANGEME_RHEL_8_pool_id" ], 28 | "repos": [ "rhel-8-for-x86_64-baseos-eus-rpms" ] 29 | }, 30 | "ceph-storage": { 31 | "pool_ids": [ "CHANGEME_RHEL_8_pool_id"], 32 | "repos": [ "rhel-8-for-x86_64-baseos-eus-rpms" ] 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/pilot/templates/.gitignore: -------------------------------------------------------------------------------- 1 | *.bak 2 | overcloud/ 3 | -------------------------------------------------------------------------------- /src/pilot/templates/ceph-osd-config.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2017-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | parameter_defaults: 16 | NodeDataLookup: {} 17 | -------------------------------------------------------------------------------- /src/pilot/templates/ceph-osd-config.yaml.orig: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2017-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | 16 | parameter_defaults: 17 | NodeDataLookup: 18 | {} 19 | -------------------------------------------------------------------------------- /src/pilot/templates/ceph_dashboard_admin.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | # A Heat environment file which can be used to enable 16 | # full rights to the ceph dashboard admin user 17 | 18 | parameter_defaults: 19 | CephDashboardAdminRO: false 20 | 21 | -------------------------------------------------------------------------------- /src/pilot/templates/configure-barbican.yaml: -------------------------------------------------------------------------------- 1 | # A Heat environment file which can be used to enable 2 | # Barbican with the default secret store backend. 3 | 4 | resource_registry: 5 | OS::TripleO::Services::BarbicanApi: ./overcloud/deployment/barbican/barbican-api-container-puppet.yaml 6 | OS::TripleO::Services::BarbicanBackendSimpleCrypto: ./overcloud/deployment/barbican/barbican-backend-simple-crypto-puppet.yaml 7 | 8 | parameter_defaults: 9 | # DELL-NFV Overrides 10 | BarbicanSimpleCryptoGlobalDefault: true 11 | BarbicanDebug: true 12 | VerifyGlanceSignatures: true 13 | -------------------------------------------------------------------------------- /src/pilot/templates/custom-dellemc-volume-mappings.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | NovaComputeOptVolumes: 3 | - /opt/emc/scaleio/openstack:/opt/emc/scaleio/openstack 4 | CinderVolumeOptVolumes: 5 | - /opt/emc/scaleio/openstack:/opt/emc/scaleio/openstack 6 | GlanceApiOptVolumes: 7 | - /opt/emc/scaleio/openstack:/opt/emc/scaleio/openstack 8 | -------------------------------------------------------------------------------- /src/pilot/templates/dell-cinder-backends.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | # A Heat environment file which can be used to enable 16 | # Cinder Storage 17 | 18 | parameter_defaults: 19 | CinderEnableRbdBackend: 20 | -------------------------------------------------------------------------------- /src/pilot/templates/dellemc-powerflex-cinder-backend.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | OS::TripleO::Services::CinderBackendDellEMCVxFlexOS: ./overcloud/deployment/cinder/cinder-backend-dellemc-vxflexos-puppet.yaml 3 | 4 | parameter_defaults: 5 | CinderEnableVxFlexOSBackend: true 6 | CinderVxFlexOSBackendName: 'tripleo_dellemc_powerflex' 7 | CinderVxFlexOSSanIp: '' 8 | CinderVxFlexOSSanLogin: '' 9 | CinderVxFlexOSSanPassword: '' 10 | CinderVxFlexOSStoragePools: '' 11 | CinderVxFlexOSAllowMigrationDuringRebuild: false 12 | CinderVxFlexOSAllowNonPaddedVolumes: false 13 | CinderVxFlexOSMaxOverSubscriptionRatio: 7.0 14 | CinderVxFlexOSRestServerPort: 443 15 | CinderVxFlexOSUnmapVolumeBeforeDeletion: false 16 | CinderVxFlexOSSanThinProvision: true 17 | CinderVxFlexOSDriverSSLCertVerify: false 18 | CinderVxFlexOSDriverSSLCertPath: '' 19 | -------------------------------------------------------------------------------- /src/pilot/templates/dellemc-powermax-fc-cinder-backend.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | ControllerExtraConfig: 3 | cinder::config::cinder_config: 4 | tripleo_dellemc_powermax/volume_driver: 5 | value: cinder.volume.drivers.dell_emc.vmax.fc.VMAXFCDriver 6 | tripleo_dellemc_powermax/volume_backend_name: 7 | value: tripleo_dellemc_powermax 8 | tripleo_dellemc_powermax/san_ip: 9 | value: 10 | tripleo_dellemc_powermax/san_login: 11 | value: 12 | tripleo_dellemc_powermax/san_password: 13 | value: 14 | tripleo_dellemc_powermax/vmax_port_groups: 15 | value: '' 16 | tripleo_dellemc_powermax/vmax_array: 17 | value: 18 | tripleo_dellemc_powermax/vmax_srp: 19 | value: 20 | cinder_user_enabled_backends: ['tripleo_dellemc_powermax'] 21 | -------------------------------------------------------------------------------- /src/pilot/templates/dellemc-powermax-iscsi-cinder-backend.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | CinderEnableIscsiBackend: false 3 | 4 | parameter_defaults: 5 | ControllerExtraConfig: 6 | cinder::config::cinder_config: 7 | tripleo_dellemc_powermax/volume_driver: 8 | value: cinder.volume.drivers.dell_emc.vmax.iscsi.VMAXISCSIDriver 9 | tripleo_dellemc_powermax/volume_backend_name: 10 | value: tripleo_dellemc_powermax 11 | tripleo_dellemc_powermax/san_ip: 12 | value: 13 | tripleo_dellemc_powermax/san_login: 14 | value: 15 | tripleo_dellemc_powermax/san_password: 16 | value: 17 | tripleo_dellemc_powermax/vmax_port_groups: 18 | value: '' 19 | tripleo_dellemc_powermax/vmax_array: 20 | value: 21 | tripleo_dellemc_powermax/vmax_srp: 22 | value: 23 | cinder_user_enabled_backends: ['tripleo_dellemc_powermax'] 24 | -------------------------------------------------------------------------------- /src/pilot/templates/dellemc-powerstore-cinder-backend.yaml: -------------------------------------------------------------------------------- 1 | # A Heat environment file which can be used to enable a 2 | # Cinder Dell EMC PowerMax backend, configured via puppet. 3 | resource_registry: 4 | OS::TripleO::Services::CinderBackendDellEMCPowerStore: ./overcloud/deployment/cinder/cinder-backend-dellemc-powerstore-puppet.yaml 5 | 6 | parameter_defaults: 7 | CinderEnablePowerStoreBackend: true 8 | CinderPowerStoreBackendName: 'tripleo_dellemc_powerstore' 9 | CinderPowerStoreMultiConfig: {} 10 | CinderPowerStoreAvailabilityZone: '' 11 | CinderPowerStoreSanIp: '' 12 | CinderPowerStoreSanLogin: '' 13 | CinderPowerStoreSanPassword: '' 14 | CinderPowerStoreAppliances: '' 15 | CinderPowerStorePorts: '' 16 | CinderPowerStoreStorageProtocol: '' 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/pilot/templates/dellemc-unity-cinder-backend.yaml: -------------------------------------------------------------------------------- 1 | # A Heat environment file which can be used to enable a 2 | # Cinder Dell EMC Unity backend, configured via puppet 3 | resource_registry: 4 | OS::TripleO::Services::CinderBackendDellEMCUnity: ./overcloud/deployment/cinder/cinder-backend-dellemc-unity-puppet.yaml 5 | 6 | parameter_defaults: 7 | CinderEnableDellEMCUnityBackend: true 8 | CinderDellEMCUnityBackendName: 'tripleo_dellemc_unity' 9 | CinderDellEMCUnitySanIp: '' 10 | CinderDellEMCUnitySanLogin: '' 11 | CinderDellEMCUnitySanPassword: '' 12 | CinderDellEMCUnityStorageProtocol: '' 13 | CinderDellEMCUnityIoPorts: '' 14 | CinderDellEMCUnityStoragePoolNames: '' 15 | -------------------------------------------------------------------------------- /src/pilot/templates/dellemc-unity-cinder-container.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | ContainerCinderVolumeImage: /dellemc/openstack-cinder-volume-dellemc-rhosp16:16.1-2 3 | -------------------------------------------------------------------------------- /src/pilot/templates/dellsc-cinder-config.yaml: -------------------------------------------------------------------------------- 1 | # A Heat environment file which can be used to enable a 2 | # Cinder Dell EMC Storage Center ISCSI backend, configured via puppet 3 | resource_registry: 4 | OS::TripleO::Services::CinderBackendDellSc: ./overcloud/deployment/cinder/cinder-backend-dellsc-puppet.yaml 5 | 6 | parameter_defaults: 7 | CinderEnableDellScBackend: 8 | CinderDellScBackendName: 'tripleo_dellsc' 9 | CinderDellScSanIp: 10 | CinderDellScSanLogin: 11 | CinderDellScSanPassword: 12 | CinderDellScSsn: 13 | CinderDellScIscsiIpAddress: 14 | CinderDellScIscsiPort: 15 | CinderDellScApiPort: 16 | CinderDellScServerFolder: 17 | CinderDellScVolumeFolder: 18 | CinderDellScSecondarySanIp: 19 | CinderDellScSecondarySanLogin: 20 | CinderDellScSecondarySanPassword: 21 | CinderDellScSecondaryScApiPort: 22 | CinderDellScExcludedDomainIp: 23 | CinderDellScMultipathXfer: 24 | -------------------------------------------------------------------------------- /src/pilot/templates/dhcpd.conf: -------------------------------------------------------------------------------- 1 | # 2 | # DHCP Server Configuration file. 3 | # see /usr/share/doc/dhcp*/dhcpd.conf.example 4 | # see dhcpd.conf(5) man page 5 | # 6 | set vendor-string = option vendor-class-identifier; 7 | 8 | class "idracs" { 9 | match if option vendor-class-identifier = "iDRAC"; 10 | } 11 | 12 | subnet SUBNET netmask NETMASK { 13 | pool { 14 | allow members of "idracs"; 15 | default-lease-time 28800; 16 | max-lease-time 28800; 17 | option subnet-mask NETMASK; 18 | option broadcast-address BROADCAST; 19 | option routers GATEWAY; 20 | range POOL_START POOL_END; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/pilot/templates/glance-powerflex-connector.conf: -------------------------------------------------------------------------------- 1 | [BACKEND] 2 | san_password = SAN_PASSWORD 3 | -------------------------------------------------------------------------------- /src/pilot/templates/neutron-ovs-dpdk.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | ## A Heat environment that can be used to deploy DPDK with OVS 16 | resource_registry: 17 | OS::TripleO::Services::ComputeNeutronOvsDpdk: ./overcloud/deployment/neutron/neutron-ovs-dpdk-agent-container-puppet.yaml 18 | OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None 19 | 20 | parameter_defaults: 21 | NeutronDatapathType: "netdev" 22 | NeutronVhostuserSocketDir: "/var/lib/vhost_sockets" 23 | # DELL-NFV Overrides 24 | HostNicDriver: "mlx5_core" 25 | NeutronPluginExtensions: "qos,port_security" 26 | NeutronOVSFirewallDriver: openvswitch 27 | DellComputeParameters: 28 | VhostuserSocketGroup: "hugetlbfs" 29 | OvsPmdCoreList: "4-7,28-31" 30 | OvsDpdkCoreList: "0-3,24-27" 31 | # IsolCpusList: "4-23,28-47" (Populated in Dell-environment.yaml) 32 | # NovaComputeCpuDedicatedSet: "4-23,28-47" (Populated in Dell-environment.yaml) 33 | # NovaComputeCpuSharedSet: "0-3,40-43" (Populated in Dell-environment.yaml) 34 | OvsDpdkMemoryChannels: "4" 35 | NovaReservedHostMemory: 4096 36 | OvsDpdkSocketMemory: "2048,2048" 37 | TunedProfileName: "cpu-partitioning" 38 | NovaLibvirtRxQueueSize: 1024 39 | NovaLibvirtTxQueueSize: 1024 40 | DellComputeHCIParameters: 41 | VhostuserSocketGroup: "hugetlbfs" 42 | OvsPmdCoreList: "4-7,28-31" 43 | OvsDpdkCoreList: "0-3,24-27" 44 | # IsolCpusList: "4-23,28-47" (Populated in Dell-environment.yaml) 45 | # NovaComputeCpuDedicatedSet: "4-23,28-47" (Populated in Dell-environment.yaml) 46 | # NovaComputeCpuSharedSet: "0-3,40-43" (Populated in Dell-environment.yaml) 47 | OvsDpdkMemoryChannels: "4" 48 | NovaReservedHostMemory: 4096 49 | OvsDpdkSocketMemory: "2048,2048" 50 | TunedProfileName: "cpu-partitioning" 51 | NovaLibvirtRxQueueSize: 1024 52 | NovaLibvirtTxQueueSize: 1024 53 | -------------------------------------------------------------------------------- /src/pilot/templates/neutron-ovs-dvr.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Services::ComputeNeutronL3Agent: ./overcloud/deployment/neutron/neutron-l3-container-puppet.yaml 17 | OS::TripleO::Services::ComputeNeutronMetadataAgent: ./overcloud/deployment/neutron/neutron-metadata-container-puppet.yaml 18 | # OS::TripleO::DellCompute::Net::SoftwareConfig: ./overcloud/net-config-bridge.yaml 19 | 20 | parameter_defaults: 21 | 22 | # DVR requires that the L2 population feature is enabled 23 | NeutronEnableL2Pop: 'True' 24 | 25 | # Setting NeutronEnableDVR enables distributed routing support in the 26 | # ML2 plugin and agents that support this feature 27 | NeutronEnableDVR: true 28 | 29 | # We also need to set the proper agent mode for the L3 agent. This will only 30 | # affect the agent on the controller node. 31 | NeutronL3AgentMode: 'dvr_snat' 32 | 33 | # Enabling DVR deploys additional services to the compute nodes that through 34 | # normal operation will consume memory. The amount required is roughly 35 | # proportional to the number of Neutron routers that will be scheduled to 36 | # that host. It is necessary to reserve memory on the compute nodes to avoid 37 | # memory issues when creating instances that are connected to routed 38 | # networks. The current expected consumption is 50 MB per router in addition 39 | # to the base reserved amount. 40 | NovaReservedHostMemory: 4096 41 | 42 | DellComputeParameters: 43 | NeutronL3AgentMode: 'dvr' 44 | 45 | -------------------------------------------------------------------------------- /src/pilot/templates/neutron-sriov.yaml: -------------------------------------------------------------------------------- 1 | ## A Heat environment that can be used to deploy SR-IOV 2 | resource_registry: 3 | OS::TripleO::Services::NeutronSriovAgent: ./overcloud/deployment/neutron/neutron-sriov-agent-container-puppet.yaml 4 | OS::TripleO::Services::NeutronSriovHostConfig: ./overcloud/deployment/deprecated/neutron/neutron-sriov-host-config.yaml 5 | 6 | parameter_defaults: 7 | # User defined Parameters 8 | NumSriovVfs: 9 | 10 | # DellCompute Role specific parameters 11 | DellComputeParameters: 12 | OvsHwOffload: False 13 | NeutronPhysicalDevMappings: 14 | NovaPCIPassthrough: 15 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/4_port/nic_environment.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute.yaml 18 | OS::TripleO::CephStorage::Net::SoftwareConfig: ./storage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines to include in 23 | # the controller nodes bonds 24 | ControllerBond0Interface1: eno1 25 | ControllerBond0Interface2: ens1f0 26 | ControllerBond1Interface1: eno2 27 | ControllerBond1Interface2: ens1f1 28 | # The bonding mode to use for controller nodes 29 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 30 | 31 | # CHANGEME: Change the interface names in the following lines to include in 32 | # the compute nodes bonds 33 | ComputeBond0Interface1: eno1 34 | ComputeBond0Interface2: ens1f0 35 | ComputeBond1Interface1: eno2 36 | ComputeBond1Interface2: ens1f1 37 | # The bonding mode to use for compute nodes 38 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 39 | 40 | # CHANGEME: Change the interface names in the following lines to include in 41 | # the storage nodes bonds 42 | StorageBond0Interface1: eno1 43 | StorageBond0Interface2: ens4f0 44 | StorageBond1Interface1: eno2 45 | StorageBond1Interface2: ens4f1 46 | # The bonding mode to use for storage nodes 47 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 48 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/4_port/nic_environment_powerflex.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute.yaml 18 | OS::TripleO::PowerflexStorage::Net::SoftwareConfig: ./powerflexstorage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines to include in 23 | # the controller nodes bonds 24 | ControllerBond0Interface1: eno1 25 | ControllerBond0Interface2: ens3f0 26 | ControllerBond1Interface1: eno2 27 | ControllerBond1Interface2: ens3f1 28 | # The bonding mode to use for controller nodes 29 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 30 | 31 | # CHANGEME: Change the interface names in the following lines to include in 32 | # the compute nodes bonds 33 | ComputeBond0Interface1: eno1 34 | ComputeBond0Interface2: ens3f0 35 | ComputeBond1Interface1: eno2 36 | ComputeBond1Interface2: ens3f1 37 | # The bonding mode to use for compute nodes 38 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 39 | 40 | # CHANGEME: Change the interface names in the following lines to include in 41 | # the storage nodes bonds 42 | StorageBond0Interface1: eno1 43 | StorageBond0Interface2: ens2f0 44 | StorageBond1Interface1: eno2 45 | StorageBond1Interface2: ens2f1 46 | # The bonding mode to use for storage nodes 47 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 48 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/4_port_hci/nic_environment.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellComputeHCI::Net::SoftwareConfig: ./dellcomputehci.yaml 18 | 19 | parameter_defaults: 20 | # CHANGEME: Change the interface names in the following lines for the 21 | # controller nodes provisioning interface and to include in the controller 22 | # nodes bonds 23 | ControllerBond0Interface1: ens1f0 24 | ControllerBond0Interface2: ens2f0 25 | ControllerBond1Interface1: ens1f1 26 | ControllerBond1Interface2: ens2f1 27 | # The bonding mode to use for controller nodes 28 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 29 | 30 | # CHANGEME: Change the interface names in the following lines for the 31 | # compute HCI nodes provisioning interface and to include in the compute 32 | # nodes bonds 33 | ComputeBond0Interface1: ens1f0 34 | ComputeBond0Interface2: ens3f0 35 | ComputeBond1Interface1: ens1f1 36 | ComputeBond1Interface2: ens3f1 37 | # The bonding mode to use for compute nodes 38 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 39 | 40 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/5_port/nic_environment.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute.yaml 18 | OS::TripleO::CephStorage::Net::SoftwareConfig: ./storage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines for the 23 | # controller nodes provisioning interface and to include in the controller 24 | # nodes bonds 25 | ControllerProvisioningInterface: eno3 26 | ControllerBond0Interface1: eno1 27 | ControllerBond0Interface2: ens3f0 28 | ControllerBond1Interface1: eno2 29 | ControllerBond1Interface2: ens3f1 30 | # The bonding mode to use for controller nodes 31 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 32 | 33 | # CHANGEME: Change the interface names in the following lines for the 34 | # compute nodes provisioning interface and to include in the compute 35 | # nodes bonds 36 | ComputeProvisioningInterface: eno3 37 | ComputeBond0Interface1: eno1 38 | ComputeBond0Interface2: ens3f0 39 | ComputeBond1Interface1: eno2 40 | ComputeBond1Interface2: ens3f1 41 | # The bonding mode to use for compute nodes 42 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 43 | 44 | # CHANGEME: Change the interface names in the following lines for the 45 | # storage nodes provisioning interface and to include in the storage 46 | # nodes bonds 47 | StorageProvisioningInterface: eno3 48 | StorageBond0Interface1: eno1 49 | StorageBond0Interface2: ens2f0 50 | StorageBond1Interface1: eno2 51 | StorageBond1Interface2: ens2f1 52 | # The bonding mode to use for storage nodes 53 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 54 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/5_port/nic_environment_powerflex.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute.yaml 18 | OS::TripleO::PowerflexStorage::Net::SoftwareConfig: ./powerflexstorage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines for the 23 | # controller nodes provisioning interface and to include in the controller 24 | # nodes bonds 25 | ControllerProvisioningInterface: eno3 26 | ControllerBond0Interface1: eno1 27 | ControllerBond0Interface2: ens3f0 28 | ControllerBond1Interface1: eno2 29 | ControllerBond1Interface2: ens3f1 30 | # The bonding mode to use for controller nodes 31 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 32 | 33 | # CHANGEME: Change the interface names in the following lines for the 34 | # compute nodes provisioning interface and to include in the compute 35 | # nodes bonds 36 | ComputeProvisioningInterface: eno3 37 | ComputeBond0Interface1: eno1 38 | ComputeBond0Interface2: ens3f0 39 | ComputeBond1Interface1: eno2 40 | ComputeBond1Interface2: ens3f1 41 | # The bonding mode to use for compute nodes 42 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 43 | 44 | # CHANGEME: Change the interface names in the following lines for the 45 | # storage nodes provisioning interface and to include in the storage 46 | # nodes bonds 47 | StorageProvisioningInterface: eno3 48 | StorageBond0Interface1: eno1 49 | StorageBond0Interface2: ens2f0 50 | StorageBond1Interface1: eno2 51 | StorageBond1Interface2: ens2f1 52 | # The bonding mode to use for storage nodes 53 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 54 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/5_port_hci/nic_environment.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellComputeHCI::Net::SoftwareConfig: ./dellcomputehci.yaml 18 | 19 | parameter_defaults: 20 | # CHANGEME: Change the interface names in the following lines for the 21 | # controller nodes provisioning interface and to include in the controller 22 | # nodes bonds 23 | ControllerProvisioningInterface: eno3 24 | ControllerBond0Interface1: ens1f0 25 | ControllerBond0Interface2: ens2f0 26 | ControllerBond1Interface1: ens1f1 27 | ControllerBond1Interface2: ens2f1 28 | # The bonding mode to use for controller nodes 29 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 30 | 31 | # CHANGEME: Change the interface names in the following lines for the 32 | # compute HCI nodes provisioning interface and to include in the compute 33 | # nodes bonds 34 | ComputeProvisioningInterface: eno3 35 | ComputeBond0Interface1: ens1f0 36 | ComputeBond0Interface2: ens3f0 37 | ComputeBond1Interface1: ens1f1 38 | ComputeBond1Interface2: ens3f1 39 | # The bonding mode to use for compute nodes 40 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 41 | 42 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/dvr_6_port/nic_environment.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute.yaml 18 | OS::TripleO::CephStorage::Net::SoftwareConfig: ./storage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines to include in 23 | # the controller nodes bonds 24 | ControllerBond0Interface1: eno1 25 | ControllerBond0Interface2: ens1f0 26 | ControllerBond1Interface1: eno2 27 | ControllerBond1Interface2: ens1f1 28 | # The bonding mode to use for controller nodes 29 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 30 | 31 | # CHANGEME: Change the interface names in the following lines to include in 32 | # the compute nodes bonds 33 | ComputeBond0Interface1: eno1 34 | ComputeBond0Interface2: ens3f1 35 | ComputeBond1Interface1: eno2 36 | ComputeBond1Interface2: ens1f0 37 | ComputeBond2Interface1: ens3f0 38 | ComputeBond2Interface2: ens1f1 39 | # The bonding mode to use for compute nodes 40 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 41 | 42 | # CHANGEME: Change the interface names in the following lines to include in 43 | # the storage nodes bonds 44 | StorageBond0Interface1: eno1 45 | StorageBond0Interface2: ens4f0 46 | StorageBond1Interface1: eno2 47 | StorageBond1Interface2: ens4f1 48 | # The bonding mode to use for storage nodes 49 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 50 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/dvr_6_port/nic_environment_powerflex.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute.yaml 18 | OS::TripleO::PowerflexStorage::Net::SoftwareConfig: ./powerflexstorage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines to include in 23 | # the controller nodes bonds 24 | ControllerBond0Interface1: eno1 25 | ControllerBond0Interface2: ens1f0 26 | ControllerBond1Interface1: eno2 27 | ControllerBond1Interface2: ens1f1 28 | # The bonding mode to use for controller nodes 29 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 30 | 31 | # CHANGEME: Change the interface names in the following lines to include in 32 | # the compute nodes bonds 33 | ComputeBond0Interface1: eno1 34 | ComputeBond0Interface2: ens3f1 35 | ComputeBond1Interface1: eno2 36 | ComputeBond1Interface2: ens1f0 37 | ComputeBond2Interface1: ens3f0 38 | ComputeBond2Interface2: ens1f1 39 | # The bonding mode to use for compute nodes 40 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 41 | 42 | # CHANGEME: Change the interface names in the following lines to include in 43 | # the storage nodes bonds 44 | StorageBond0Interface1: eno1 45 | StorageBond0Interface2: ens4f0 46 | StorageBond1Interface1: eno2 47 | StorageBond1Interface2: ens4f1 48 | # The bonding mode to use for storage nodes 49 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 50 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/ovs-dpdk_6_port/nic_environment.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute_dpdk.yaml 18 | OS::TripleO::CephStorage::Net::SoftwareConfig: ./storage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines 23 | # to include in the controller nodes bonds 24 | ControllerBond0Interface1: ens5f0 25 | ControllerBond0Interface2: ens7f0 26 | ControllerBond1Interface1: ens5f1 27 | ControllerBond1Interface2: ens7f1 28 | # The bonding mode to use for controller nodes 29 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 30 | 31 | # CHANGEME: Change the interface names in the following lines 32 | # to include in the compute nodes bonds 33 | ComputeBond0Interface1: ens5f0 34 | ComputeBond0Interface2: ens3f0 35 | ComputeBond1Interface1: ens5f1 36 | ComputeBond1Interface2: ens3f1 37 | # The bonding mode to use for compute nodes 38 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 39 | 40 | # CHANGEME: Change the interface names in the following lines 41 | # for the compute DPDK bonds 42 | ComputeOvsDpdkInterface1: ens4f0 43 | ComputeOvsDpdkInterface2: ens4f1 44 | # The DPDK bonding mode to use for compute nodes 45 | BondInterfaceOvsOptions: bond_mode=balance-tcp lacp=active 46 | 47 | # CHANGEME: Change the interface names in the following lines 48 | # to include in the storage nodes bonds 49 | StorageBond0Interface1: ens1f0 50 | StorageBond0Interface2: ens2f0 51 | StorageBond1Interface1: ens1f1 52 | StorageBond1Interface2: ens2f1 53 | # The bonding mode to use for storage nodes 54 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 55 | -------------------------------------------------------------------------------- /src/pilot/templates/nic-configs/ovs-dpdk_6_port/nic_environment_powerflex.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c)2018-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | resource_registry: 16 | OS::TripleO::Controller::Net::SoftwareConfig: ./controller.yaml 17 | OS::TripleO::DellCompute::Net::SoftwareConfig: ./dellcompute_dpdk.yaml 18 | OS::TripleO::PowerflexStorage::Net::SoftwareConfig: ./powerflexstorage.yaml 19 | 20 | 21 | parameter_defaults: 22 | # CHANGEME: Change the interface names in the following lines 23 | # to include in the controller nodes bonds 24 | ControllerBond0Interface1: ens5f0 25 | ControllerBond0Interface2: ens7f0 26 | ControllerBond1Interface1: ens5f1 27 | ControllerBond1Interface2: ens7f1 28 | # The bonding mode to use for controller nodes 29 | ControllerBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 30 | 31 | # CHANGEME: Change the interface names in the following lines 32 | # to include in the compute nodes bonds 33 | ComputeBond0Interface1: ens5f0 34 | ComputeBond0Interface2: ens3f0 35 | ComputeBond1Interface1: ens5f1 36 | ComputeBond1Interface2: ens3f1 37 | # The bonding mode to use for compute nodes 38 | ComputeBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 39 | 40 | # CHANGEME: Change the interface names in the following lines 41 | # for the compute DPDK bonds 42 | ComputeOvsDpdkInterface1: ens4f0 43 | ComputeOvsDpdkInterface2: ens4f1 44 | # The DPDK bonding mode to use for compute nodes 45 | BondInterfaceOvsOptions: bond_mode=balance-tcp lacp=active 46 | 47 | # CHANGEME: Change the interface names in the following lines 48 | # to include in the storage nodes bonds 49 | StorageBond0Interface1: ens1f0 50 | StorageBond0Interface2: ens2f0 51 | StorageBond1Interface1: ens1f1 52 | StorageBond1Interface2: ens2f1 53 | # The bonding mode to use for storage nodes 54 | StorageBondInterfaceOptions: mode=802.3ad miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1 55 | -------------------------------------------------------------------------------- /src/pilot/templates/node-placement.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | parameter_defaults: 16 | ControllerSchedulerHints: 17 | 'capabilities:node': 'control-%index%' 18 | 19 | DellComputeSchedulerHints: 20 | 'capabilities:node': 'compute-%index%' 21 | 22 | DellComputeHCISchedulerHints: 23 | 'capabilities:node': 'computehci-%index%' 24 | 25 | CephStorageSchedulerHints: 26 | 'capabilities:node': 'ceph-storage-%index%' 27 | 28 | PowerflexStorageSchedulerHints: 29 | 'capabilities:node': 'powerflex-storage-%index%' 30 | 31 | -------------------------------------------------------------------------------- /src/pilot/templates/octavia.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | OS::TripleO::Services::OctaviaApi: ./overcloud/deployment/octavia/octavia-api-container-puppet.yaml 3 | OS::TripleO::Services::OctaviaHousekeeping: ./overcloud/deployment/octavia/octavia-housekeeping-container-puppet.yaml 4 | OS::TripleO::Services::OctaviaHealthManager: ./overcloud/deployment/octavia/octavia-health-manager-container-puppet.yaml 5 | OS::TripleO::Services::OctaviaWorker: ./overcloud/deployment/octavia/octavia-worker-container-puppet.yaml 6 | OS::TripleO::Services::OctaviaDeploymentConfig: ./overcloud/deployment/octavia/octavia-deployment-config.yaml 7 | 8 | parameter_defaults: 9 | NeutronServicePlugins: "qos,router,trunk" 10 | NeutronEnableForceMetadata: true 11 | 12 | # This flag enables internal generation of certificates for communication 13 | # with amphorae. Use OctaviaCaCert, OctaviaCaKey, OctaviaCaKeyPassphrase, 14 | # OctaviaClient and OctaviaServerCertsKeyPassphrase cert to configure 15 | # secure production environments. 16 | OctaviaGenerateCerts: true 17 | -------------------------------------------------------------------------------- /src/pilot/templates/powermax-manila-config.yaml: -------------------------------------------------------------------------------- 1 | # This environment file enables Manila with the VMAX backend. 2 | resource_registry: 3 | OS::TripleO::Services::ManilaApi: ./overcloud/docker/services/manila-api.yaml 4 | OS::TripleO::Services::ManilaScheduler: ./overcloud/docker/services/manila-scheduler.yaml 5 | # Only manila-share is pacemaker managed: 6 | OS::TripleO::Services::ManilaShare: ./overcloud/docker/services/pacemaker/manila-share.yaml 7 | OS::TripleO::Services::ManilaBackendVMAX: ./overcloud/puppet/services/manila-backend-vmax.yaml 8 | 9 | parameter_defaults: 10 | ManilaVMAXBackendName: tripleo_manila_vmax 11 | ManilaVMAXDriverHandlesShareServers: 12 | ManilaVMAXNasLogin: 13 | ManilaVMAXNasPassword: 14 | ManilaVMAXNasServer: 15 | ManilaVMAXServerContainer: 16 | ManilaVMAXShareDataPools: 17 | ManilaVMAXEthernetPorts: 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/pilot/templates/static-vip-environment.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | # resource_registry: 16 | # OS::TripleO::Network::Ports::NetVipMap: ./overcloud/network/ports/net_ip_map.yaml 17 | # OS::TripleO::Network::Ports::ExternalVipPort: ./overcloud/network/ports/noop.yaml 18 | # OS::TripleO::Network::Ports::InternalApiVipPort: ./overcloud/network/ports/noop.yaml 19 | # OS::TripleO::Network::Ports::StorageVipPort: ./overcloud/network/ports/noop.yaml 20 | # OS::TripleO::Network::Ports::StorageMgmtVipPort: ./overcloud/network/ports/noop.yaml 21 | 22 | 23 | parameter_defaults: 24 | 25 | ControlFixedIPs: [{'ip_address':'192.168.120.250'}] 26 | InternalApiVirtualFixedIPs: [{'ip_address':'192.168.140.250'}] 27 | PublicVirtualFixedIPs: [{'ip_address':'100.67.59.51'}] 28 | StorageVirtualFixedIPs: [{'ip_address':'192.168.170.250'}] 29 | StorageMgmtVirtualFixedIPs: [{'ip_address':'192.168.120.249'}] 30 | RedisVirtualFixedIPs: [{'ip_address':'192.168.140.250'}] 31 | -------------------------------------------------------------------------------- /src/pilot/templates/unity-manila-config.yaml: -------------------------------------------------------------------------------- 1 | # This environment file enables Manila with the Unity backend. 2 | resource_registry: 3 | OS::TripleO::Services::ManilaApi: ./overcloud/deployment/manila/manila-api-container-puppet.yaml 4 | OS::TripleO::Services::ManilaScheduler: ./overcloud/deployment/manila/manila-scheduler-container-puppet.yaml 5 | # Only manila-share is pacemaker managed: 6 | OS::TripleO::Services::ManilaShare: ./overcloud/deployment/manila/manila-share-pacemaker-puppet.yaml 7 | OS::TripleO::Services::ManilaBackendUnity: ./overcloud/deployment/manila/manila-backend-unity.yaml 8 | 9 | parameter_defaults: 10 | ManilaUnityBackendName: tripleo_manila_unity 11 | # DELL-NFV Overrides 12 | ManilaUnityDriverHandlesShareServers: 13 | ManilaUnityNasLogin: '' 14 | ManilaUnityNasPassword: '' 15 | ManilaUnityNasServer: '' 16 | ManilaUnityServerMetaPool: '' 17 | ManilaUnityShareDataPools: '' 18 | ManilaUnityEthernetPorts: '' 19 | ManilaUnityEmcSslCertVerify: 20 | ManilaUnityEmcSslCertPath: '' 21 | -------------------------------------------------------------------------------- /src/pilot/templates/unity-manila-container.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | ContainerManilaShareImage: /dellemc/openstack-manila-share-dellemc-rhosp16:16.1-2 3 | -------------------------------------------------------------------------------- /src/pilot/undercloud_hieradata.yaml: -------------------------------------------------------------------------------- 1 | ironic::drivers::interfaces::enabled_inspect_interfaces: [idrac-redfish,idrac-wsman,ilo,inspector,no-inspect,redfish] 2 | ironic::drivers::interfaces::enabled_management_interfaces: [fake,idrac-redfish,idrac-wsman,ilo,ipmitool,noop,redfish] 3 | ironic::drivers::interfaces::enabled_power_interfaces: [fake,idrac-redfish,idrac-wsman,ilo,ipmitool,redfish] 4 | ironic::drivers::interfaces::enabled_raid_interfaces: [idrac-wsman,no-raid] 5 | ironic::drivers::interfaces::enabled_vendor_interfaces: [idrac-wsman,ipmitool,no-vendor] 6 | ironic::rpc_response_timeout: 600 7 | ironic::conductor::enabled_hardware_types: [idrac] 8 | ironic::drivers::interfaces::default_raid_interface: idrac-wsman 9 | ironic::drivers::interfaces::default_power_interface: idrac-wsman 10 | ironic::drivers::interfaces::default_management_interface: idrac-wsman 11 | ironic::drivers::interfaces::default_vendor_interface: idrac-wsman 12 | ironic::conductor::sync_power_state_interval: 70 13 | ironic::conductor::force_power_state_during_sync: true 14 | ironic::wsgi::apache::threads: 30 15 | 16 | ironic::config::ironic_config: 17 | conductor/node_locked_retry_attempts: 18 | value: 25 19 | conductor/clean_callback_timeout: 20 | value: 5400 21 | # DEFAULT/sync_power_state_interval: 22 | # value: 77 23 | # DEFAULT/default_raid_interface: 24 | # value: idrac-wsman 25 | # DEFAULT/default_power_interface: 26 | # value: idrac-wsman 27 | # DEFAULT/default_management_interface: 28 | # value: idrac-wsman 29 | # DEFAULT/default_vendor_interface: 30 | # value: idrac-wsman 31 | -------------------------------------------------------------------------------- /src/pilot/unregister_overcloud.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from register_overcloud import RegisterOvercloud 18 | 19 | 20 | if __name__ == "__main__": 21 | ro = RegisterOvercloud() 22 | ro.unregister_nodes() 23 | -------------------------------------------------------------------------------- /src/pilot/utils.patch: -------------------------------------------------------------------------------- 1 | --- utils.py 2020-04-10 14:32:27.000000000 -0400 2 | +++ utils.py.new 2020-09-08 19:15:08.009808499 -0400 3 | @@ -368,9 +368,14 @@ 4 | if type(current_setting_value) is list: 5 | current_setting_value = current_setting_value[0] 6 | 7 | - if current_settings[attr].read_only: 8 | + unchanged_attribute = str(new_settings[attr]) == str( 9 | + current_setting_value) 10 | + 11 | + # check if read-only attribute is unchanged 12 | + if current_settings[attr].read_only and not unchanged_attribute: 13 | read_only_keys.append(attr) 14 | - elif str(new_settings[attr]) == str(current_setting_value): 15 | + 16 | + if unchanged_attribute: 17 | unchanged_attribs.append(attr) 18 | else: 19 | validation_msg = current_settings[attr].validate( 20 | -------------------------------------------------------------------------------- /src/pilot/wsman.patch: -------------------------------------------------------------------------------- 1 | --- wsman.py 2020-03-10 09:18:37.000000000 -0400 2 | +++ wsman.py.new 2020-09-08 15:09:15.459367672 -0400 3 | @@ -25,6 +25,8 @@ 4 | 5 | LOG = logging.getLogger(__name__) 6 | 7 | +MAX_ELEMENTS = 384 8 | + 9 | NS_SOAP_ENV = 'http://www.w3.org/2003/05/soap-envelope' 10 | NS_WS_ADDR = 'http://schemas.xmlsoap.org/ws/2004/08/addressing' 11 | NS_WS_ADDR_ANONYM_ROLE = ('http://schemas.xmlsoap.org/ws/2004/08/addressing/' 12 | @@ -135,8 +137,9 @@ 13 | else: 14 | return resp 15 | 16 | - def enumerate(self, resource_uri, optimization=True, max_elems=100, 17 | - auto_pull=True, filter_query=None, filter_dialect='cql'): 18 | + def enumerate(self, resource_uri, optimization=True, 19 | + max_elems=MAX_ELEMENTS, auto_pull=True, filter_query=None, 20 | + filter_dialect='cql'): 21 | """Executes enumerate operation over WSMan. 22 | 23 | :param resource_uri: URI of resource to enumerate. 24 | @@ -200,7 +203,7 @@ 25 | else: 26 | return resp_xml 27 | 28 | - def pull(self, resource_uri, context, max_elems=100): 29 | + def pull(self, resource_uri, context, max_elems=MAX_ELEMENTS): 30 | """Executes pull operation over WSMan. 31 | 32 | :param resource_uri: URI of resource to pull 33 | @@ -291,7 +294,8 @@ 34 | """Payload generation for WSMan enumerate operation.""" 35 | 36 | def __init__(self, endpoint, resource_uri, optimization=True, 37 | - max_elems=100, filter_query=None, filter_dialect=None): 38 | + max_elems=MAX_ELEMENTS, filter_query=None, 39 | + filter_dialect=None): 40 | self.endpoint = endpoint 41 | self.resource_uri = resource_uri 42 | self.filter_dialect = None 43 | @@ -351,7 +355,8 @@ 44 | class _PullPayload(_Payload): 45 | """Payload generation for WSMan pull operation.""" 46 | 47 | - def __init__(self, endpoint, resource_uri, context, max_elems=100): 48 | + def __init__(self, endpoint, resource_uri, context, 49 | + max_elems=MAX_ELEMENTS): 50 | self.endpoint = endpoint 51 | self.resource_uri = resource_uri 52 | self.context = context 53 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/mysql/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | """Cleanup will only execute subclasses defined here, adds a bit of safety.""" 18 | __all__ = ['reset_quotas'] 19 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/mysql/delete_images.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from tempest.cmd.db.mysql.mysql_db import MySqlDb 18 | 19 | 20 | class DeleteImages(MySqlDb): 21 | 22 | def __init__(self, config): 23 | super(DeleteImages, self).__init__(config, "glance") 24 | 25 | self.get_image_ids() 26 | sqls = self.sqls 27 | 28 | # delete from image_locations 29 | sql = self.build_sql('delete from ' + 30 | 'image_locations where ' + 31 | 'image_id in (%s)') 32 | sqls.append(sql) 33 | 34 | # delete from image_members 35 | sql = self.build_sql('delete from ' + 36 | 'image_members where ' + 37 | 'image_id in (%s)') 38 | sqls.append(sql) 39 | 40 | # delete from image_properties 41 | sql = self.build_sql('delete from ' + 42 | 'image_properties where ' + 43 | 'image_id in (%s)') 44 | sqls.append(sql) 45 | 46 | # delete from image_tags 47 | sql = self.build_sql('delete from ' + 48 | 'image_tags where ' + 49 | 'image_id in (%s)') 50 | sqls.append(sql) 51 | 52 | # delete from security_groups 53 | sql = self.build_sql('delete from ' + 54 | 'images where ' + 55 | 'id in (%s)') 56 | sqls.append(sql) 57 | 58 | def get_image_ids(self): 59 | ids = [] 60 | cur = self.db.cursor() 61 | cur.execute('select id from ' + 62 | 'images') 63 | 64 | res = cur.fetchall() 65 | for rec in res: 66 | ids.append(rec[0]) 67 | self.ids = ids 68 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/mysql/delete_secgroup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from tempest.cmd.db.mysql.mysql_db import MySqlDb 18 | 19 | 20 | class DeleteSecGroup(MySqlDb): 21 | 22 | def __init__(self, config): 23 | super(DeleteSecGroup, self).__init__(config, "nova") 24 | 25 | self.get_instance_ids() 26 | sqls = self.sqls 27 | # delete security_group_rules 28 | sql = self.build_sql('delete from ' + 29 | 'security_group_rules where ' + 30 | 'parent_group_id in (%s)') 31 | sqls.append(sql) 32 | 33 | # delete from security_group_instance_association 34 | sql = self.build_sql('delete from ' + 35 | 'security_group_instance_association where ' + 36 | 'parent_group_id in (%s)') 37 | sqls.append(sql) 38 | 39 | # delete from security_groups 40 | sql = self.build_sql('delete from ' + 41 | 'security_groups where ' + 42 | 'id in (%s)') 43 | sqls.append(sql) 44 | 45 | def get_instance_ids(self): 46 | ids = [] 47 | cur = self.db.cursor() 48 | cur.execute('select id from ' + 49 | 'security_groups where ' + 50 | 'name !="default"') 51 | 52 | res = cur.fetchall() 53 | for rec in res: 54 | ids.append(rec[0]) 55 | self.ids = ids 56 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/mysql/delete_stack.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from tempest.cmd.db.mysql.mysql_db import MySqlDb 18 | 19 | 20 | class DeleteStack(MySqlDb): 21 | 22 | def __init__(self, config): 23 | 24 | super(DeleteStack, self).__init__(config, "heat") 25 | 26 | self.get_stack_ids() 27 | sqls = self.sqls 28 | 29 | # delete event 30 | sql = self.build_sql('delete from ' + 31 | 'event where ' + 32 | 'stack_id in (%s)') 33 | sqls.append(sql) 34 | 35 | # delete stack 36 | sql = self.build_sql('delete from ' + 37 | 'stack where ' + 38 | 'id in (%s)') 39 | sqls.append(sql) 40 | 41 | def get_stack_ids(self): 42 | ids = [] 43 | cur = self.db.cursor() 44 | cur.execute('select id from ' + 45 | 'stack where ' + 46 | 'status in ("IN_PROGRESS","FAILED","ERROR_DELETE",' + 47 | '"DELETE_IN_PROGRESS");') 48 | res = cur.fetchall() 49 | for rec in res: 50 | ids.append(rec[0]) 51 | self.ids = ids 52 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/mysql/mysql_db.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from tempest.cmd.db import db_base 18 | # from tempest.openstack.common import log as logging 19 | 20 | import MySQLdb 21 | 22 | 23 | class MySqlDb(db_base.DbBase): 24 | """ 25 | classdocs 26 | """ 27 | def __get_connection__(self): 28 | return MySQLdb.connect(self.host, self.user, 29 | self.passwd, self.db_name) 30 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/mysql/reset_quotas.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from tempest.cmd.db.mysql.mysql_db import MySqlDb 18 | 19 | 20 | class ResetQuotas(MySqlDb): 21 | 22 | def __init__(self, config): 23 | super(ResetQuotas, self).__init__(config, "nova") 24 | self.ids = None 25 | # Reset the quotas to 0, this is nec because there are several 26 | # openstack bugs where in_use is not updated when an object is 27 | # deleted through api. 28 | sql = self.build_sql('update quota_usages ' + 29 | 'set in_use = 0 where in_use != -1') 30 | self.sqls.append(sql) 31 | -------------------------------------------------------------------------------- /src/tempest/tempest/cmd/db/mysql/reset_volume_quotas.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2016-2021 Dell Inc. or its subsidiaries. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | from tempest.cmd.db.mysql.mysql_db import MySqlDb 18 | 19 | 20 | class ResetVolumeQuotas(MySqlDb): 21 | 22 | def __init__(self, config): 23 | super(ResetVolumeQuotas, self).__init__(config, "cinder") 24 | self.ids = None 25 | # Reset the volume quotas to 0, 26 | # this is nec because there are several 27 | # openstack bugs where in_use is not updated when an object is 28 | # deleted through api. 29 | sql = self.build_sql('update quota_usages ' + 30 | 'set in_use = 0 where in_use != -1') 31 | self.sqls.append(sql) 32 | --------------------------------------------------------------------------------