forked from suse-edge/Factory
		
	Compare commits
	
		
			125 Commits
		
	
	
		
			3.3
			...
			kube-rbac-
		
	
	| Author | SHA256 | Date | |
|---|---|---|---|
| 86065a61ae | |||
| 
						
						
							
						
						a8a7b3a542
	
				 | 
					
					
						|||
| 
						
						
							
						
						6059a859a1
	
				 | 
					
					
						|||
| 
						
						
							
						
						8da51ba73f
	
				 | 
					
					
						|||
| 
						
						
							
						
						5bf3812659
	
				 | 
					
					
						|||
| 
						
						
							
						
						a11bb47c19
	
				 | 
					
					
						|||
| 
						
						
							
						
						d18aef225e
	
				 | 
					
					
						|||
| 
						
						
							
						
						8d1f677931
	
				 | 
					
					
						|||
| 
						
						
							
						
						d0bbc1d844
	
				 | 
					
					
						|||
| 
						
						
							
						
						47df258e97
	
				 | 
					
					
						|||
| 
						
						
							
						
						5ece6cd64e
	
				 | 
					
					
						|||
| 
						
						
							
						
						0da5de1c06
	
				 | 
					
					
						|||
| 
						
						
							
						
						27af056dce
	
				 | 
					
					
						|||
| 
						
						
							
						
						e233adfec2
	
				 | 
					
					
						|||
| 
						
						
							
						
						8617c36789
	
				 | 
					
					
						|||
| 
						
						
							
						
						aa56c231d4
	
				 | 
					
					
						|||
| 
						
						
							
						
						29dd8dda17
	
				 | 
					
					
						|||
| 
						
						
							
						
						6012f480b0
	
				 | 
					
					
						|||
| 
						
						
							
						
						110a7b1f7c
	
				 | 
					
					
						|||
| 
						
						
							
						
						343fcd24b7
	
				 | 
					
					
						|||
| 
						
						
							
						
						03d7a39ead
	
				 | 
					
					
						|||
| 
						
						
							
						
						e2d38a867c
	
				 | 
					
					
						|||
| 
						
						
							
						
						eecd30e90d
	
				 | 
					
					
						|||
| 
						
						
							
						
						fc0cfda2c0
	
				 | 
					
					
						|||
| 
						
						
							
						
						582aaaa424
	
				 | 
					
					
						|||
| 
						
						
							
						
						a94cde2a35
	
				 | 
					
					
						|||
| 
						
						
							
						
						ad01fecc4f
	
				 | 
					
					
						|||
| 
						
						
							
						
						d59126b517
	
				 | 
					
					
						|||
| 
						
						
							
						
						19394a8b03
	
				 | 
					
					
						|||
| 
						
						
							
						
						ca7da400d0
	
				 | 
					
					
						|||
| 
						
						
							
						
						c69044ff2b
	
				 | 
					
					
						|||
| 
						
						
							
						
						60f0bdd5f0
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e4f9e591a
	
				 | 
					
					
						|||
| 
						 | 
					51b082a3f1 | ||
| d45c9764a4 | |||
| efd8bf1075 | |||
| 892400cea7 | |||
| ff1b390d09 | |||
| c3f1be5640 | |||
| e021cfa92f | |||
| 5f0d0b019e | |||
| dc254aa461 | |||
| 
						
						
							
						
						62f9faf144
	
				 | 
					
					
						|||
| 
						
						
							
						
						8164b5f125
	
				 | 
					
					
						|||
| 
						
						
							
						
						5f6e0185f5
	
				 | 
					
					
						|||
| 
						
						
							
						
						57dca6f0a4
	
				 | 
					
					
						|||
| 
						
						
							
						
						54bf2edf7b
	
				 | 
					
					
						|||
| 
						
						
							
						
						9c60855914
	
				 | 
					
					
						|||
| 
						
						
							
						
						bc1d924cc6
	
				 | 
					
					
						|||
| 
						
						
							
						
						2f4f94238f
	
				 | 
					
					
						|||
| 
						
						
							
						
						dae0b33326
	
				 | 
					
					
						|||
| 
						
						
							
						
						4e4231b39e
	
				 | 
					
					
						|||
| 
						
						
							
						
						c9f13a514a
	
				 | 
					
					
						|||
| 
						
						
							
						
						f8f730087f
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c0423ee04
	
				 | 
					
					
						|||
| 
						
						
							
						
						0358093370
	
				 | 
					
					
						|||
| 
						
						
							
						
						a69e54a6df
	
				 | 
					
					
						|||
| 
						
						
							
						
						65201fd575
	
				 | 
					
					
						|||
| 2adc97e581 | |||
| ed4448d7a6 | |||
| 6251d8b670 | |||
| 3a98fe8f00 | |||
| f9df52a457 | |||
| 9bcffd112d | |||
| 83b660285a | |||
| 
						
						
							
						
						f23003c01f
	
				 | 
					
					
						|||
| 
						
						
							
						
						4b9928ccdf
	
				 | 
					
					
						|||
| df55d2abd4 | |||
| 214a65f2db | |||
| 
						
						
							
						
						d00b6ece5f
	
				 | 
					
					
						|||
| 
						
						
							
						
						67f63aadc7
	
				 | 
					
					
						|||
| 
						
						
							
						
						f88e75a724
	
				 | 
					
					
						|||
| 
						
						
							
						
						ef6989b0d8
	
				 | 
					
					
						|||
| 
						
						
							
						
						b2ca623d14
	
				 | 
					
					
						|||
| 
						
						
							
						
						53c16ce7c9
	
				 | 
					
					
						|||
| e55bf1ab63 | |||
| 
						
						
							
						
						4f71473b0a
	
				 | 
					
					
						|||
| 
						
						
							
						
						e20624cf98
	
				 | 
					
					
						|||
| afba5dedef | |||
| 5cbf832b02 | |||
| 7cf1b8ea26 | |||
| 83b44c9bc7 | |||
| a7cb23a9c1 | |||
| 07505665e4 | |||
| e5da642203 | |||
| 13b18090d0 | |||
| 22947d9847 | |||
| 3d087070a7 | |||
| 9bc3066279 | |||
| ec4c51d003 | |||
| 70ff1fdd31 | |||
| ce6519f470 | |||
| 0ccade5817 | |||
| 87f163939c | |||
| f0d7ede6e0 | |||
| aa677745a8 | |||
| 08797b0030 | |||
| 8b37096c3a | |||
| 6ca1cc0ded | |||
| fc24747ee5 | |||
| 9c2d445b06 | |||
| e5de658ae9 | |||
| 8cc06f4ccb | |||
| 
						
						
							
						
						9dc5ba4c52
	
				 | 
					
					
						|||
| f92f3600e6 | |||
| e379d5df4e | |||
| 346d6137fe | |||
| 1f36228510 | |||
| ec7da715f4 | |||
| 1ad6c99257 | |||
| 
						
						
							
						
						12e91c2102
	
				 | 
					
					
						|||
| 6fb80441cd | |||
| 93a5f6813d | |||
| bdaa422813 | |||
| c25bf622bc | |||
| fa57d15ff9 | |||
| 1a29da28ca | |||
| f2d39a7025 | |||
| 629e96dded | |||
| c190a1c800 | |||
| be87fb0fc6 | |||
| 01dfdc5fd9 | |||
| 90ce8e165c | |||
| ad68a91755 | |||
| c37782e077 | 
@@ -17,7 +17,7 @@ jobs:
 | 
				
			|||||||
          object-format: 'sha256'
 | 
					          object-format: 'sha256'
 | 
				
			||||||
      - name: Setup dependencies
 | 
					      - name: Setup dependencies
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          zypper in -y python3-PyYAML
 | 
					          zypper in -y python3-ruamel.yaml
 | 
				
			||||||
      - name: Check release manifest
 | 
					      - name: Check release manifest
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          python3 .obs/manifest-check.py
 | 
					          python3 .obs/manifest-check.py --check
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
*/.osc
 | 
					*/.osc
 | 
				
			||||||
*/__pycache__
 | 
					*/__pycache__
 | 
				
			||||||
.venv/
 | 
					.venv/
 | 
				
			||||||
 | 
					.idea/
 | 
				
			||||||
							
								
								
									
										51
									
								
								.obs/manifest-check.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										51
									
								
								.obs/manifest-check.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,11 +1,15 @@
 | 
				
			|||||||
#!/usr/bin/python3
 | 
					#!/usr/bin/python3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import yaml
 | 
					import ruamel.yaml
 | 
				
			||||||
 | 
					import pathlib
 | 
				
			||||||
 | 
					import argparse
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					yaml = ruamel.yaml.YAML()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_chart_version(chart_name: str) -> str:
 | 
					def get_chart_version(chart_name: str) -> str:
 | 
				
			||||||
    with open(f"./{chart_name}-chart/Chart.yaml") as f:
 | 
					    with open(f"./{chart_name}-chart/Chart.yaml") as f:
 | 
				
			||||||
        chart = yaml.safe_load(f)
 | 
					        chart = yaml.load(f)
 | 
				
			||||||
        return chart["version"]
 | 
					        return chart["version"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_charts(chart):
 | 
					def get_charts(chart):
 | 
				
			||||||
@@ -21,22 +25,57 @@ def get_charts(chart):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def get_charts_list():
 | 
					def get_charts_list():
 | 
				
			||||||
    with open("./release-manifest-image/release_manifest.yaml") as f:
 | 
					    with open("./release-manifest-image/release_manifest.yaml") as f:
 | 
				
			||||||
        manifest = yaml.safe_load(f)
 | 
					        manifest = yaml.load(f)
 | 
				
			||||||
    charts = {}
 | 
					    charts = {}
 | 
				
			||||||
    for chart in manifest["spec"]["components"]["workloads"]["helm"]:
 | 
					    for chart in manifest["spec"]["components"]["workloads"]["helm"]:
 | 
				
			||||||
        charts.update(get_charts(chart))
 | 
					        charts.update(get_charts(chart))
 | 
				
			||||||
    return charts
 | 
					    return charts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def check_charts(fix: bool) -> bool:
 | 
				
			||||||
    print("Checking charts versions in release manifest")
 | 
					 | 
				
			||||||
    success = True
 | 
					    success = True
 | 
				
			||||||
    charts = get_charts_list()
 | 
					    charts = get_charts_list()
 | 
				
			||||||
 | 
					    to_fix = {}
 | 
				
			||||||
    for chart in charts:
 | 
					    for chart in charts:
 | 
				
			||||||
        expected_version = get_chart_version(chart)
 | 
					        expected_version = get_chart_version(chart)
 | 
				
			||||||
        if expected_version != charts[chart]:
 | 
					        if expected_version != charts[chart]:
 | 
				
			||||||
            success = False
 | 
					            success = False
 | 
				
			||||||
 | 
					            to_fix[f'%%CHART_REPO%%/%%CHART_PREFIX%%{chart}'] = expected_version
 | 
				
			||||||
            print(f"{chart}: Expected: {expected_version}, Got: {charts[chart]}")
 | 
					            print(f"{chart}: Expected: {expected_version}, Got: {charts[chart]}")
 | 
				
			||||||
    if not success:
 | 
					    if fix and not success:
 | 
				
			||||||
 | 
					        fix_charts(to_fix)
 | 
				
			||||||
 | 
					        return True
 | 
				
			||||||
 | 
					    return success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def fix_charts(to_fix):
 | 
				
			||||||
 | 
					    manifest_path = pathlib.Path("./release-manifest-image/release_manifest.yaml")
 | 
				
			||||||
 | 
					    manifest = yaml.load(manifest_path)
 | 
				
			||||||
 | 
					    yaml.indent(mapping=2, sequence=4, offset=2)
 | 
				
			||||||
 | 
					    yaml.width = 4096
 | 
				
			||||||
 | 
					    for chart_index, chart in enumerate(manifest["spec"]["components"]["workloads"]["helm"]):
 | 
				
			||||||
 | 
					        changed = False
 | 
				
			||||||
 | 
					        if chart["chart"] in to_fix.keys():
 | 
				
			||||||
 | 
					            changed = True
 | 
				
			||||||
 | 
					            chart["version"] = to_fix[chart["chart"]]
 | 
				
			||||||
 | 
					        for subchart_index, subchart in enumerate(chart.get("addonCharts", [])):
 | 
				
			||||||
 | 
					            if subchart["chart"] in to_fix.keys():
 | 
				
			||||||
 | 
					                changed = True
 | 
				
			||||||
 | 
					                subchart["version"] = to_fix[subchart["chart"]]
 | 
				
			||||||
 | 
					                chart["addonCharts"][subchart_index] = subchart
 | 
				
			||||||
 | 
					        for subchart_index, subchart in enumerate(chart.get("dependencyCharts", [])):
 | 
				
			||||||
 | 
					            if subchart["chart"] in to_fix.keys():
 | 
				
			||||||
 | 
					                changed = True
 | 
				
			||||||
 | 
					                subchart["version"] = to_fix[subchart["chart"]]
 | 
				
			||||||
 | 
					                chart["dependencyCharts"][subchart_index] = subchart
 | 
				
			||||||
 | 
					        if changed:
 | 
				
			||||||
 | 
					            manifest["spec"]["components"]["workloads"]["helm"][chart_index] = chart
 | 
				
			||||||
 | 
					    yaml.dump(manifest, manifest_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main():
 | 
				
			||||||
 | 
					    print("Checking charts versions in release manifest")
 | 
				
			||||||
 | 
					    parser = argparse.ArgumentParser()
 | 
				
			||||||
 | 
					    parser.add_argument('-c', '--check', action='store_true')
 | 
				
			||||||
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 | 
					    if not check_charts(not args.check):
 | 
				
			||||||
        sys.exit(1)
 | 
					        sys.exit(1)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        print("All local charts in release manifest are using the right version")
 | 
					        print("All local charts in release manifest are using the right version")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								.pre-commit-config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.pre-commit-config.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					repos:
 | 
				
			||||||
 | 
					  - repo: local
 | 
				
			||||||
 | 
					    hooks:
 | 
				
			||||||
 | 
					      - id: check-manifest
 | 
				
			||||||
 | 
					        name: "Check release-manifest"
 | 
				
			||||||
 | 
					        entry: .obs/manifest-check.py
 | 
				
			||||||
 | 
					        language: python
 | 
				
			||||||
 | 
					        additional_dependencies: ['ruamel.yaml']
 | 
				
			||||||
 | 
					        pass_filenames: false
 | 
				
			||||||
 | 
					        always_run: true
 | 
				
			||||||
							
								
								
									
										17
									
								
								_config
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								_config
									
									
									
									
									
								
							@@ -1,4 +1,5 @@
 | 
				
			|||||||
Prefer: -libqpid-proton10 -python311-urllib3_1
 | 
					Prefer: -libqpid-proton10 -python311-urllib3_1
 | 
				
			||||||
 | 
					Prefer: -cargo1.58 -cargo1.57 cargo1.88
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Macros:
 | 
					Macros:
 | 
				
			||||||
%__python3 /usr/bin/python3.11
 | 
					%__python3 /usr/bin/python3.11
 | 
				
			||||||
@@ -60,6 +61,7 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
    BuildFlags: excludebuild:endpoint-copier-operator-image
 | 
					    BuildFlags: excludebuild:endpoint-copier-operator-image
 | 
				
			||||||
    BuildFlags: excludebuild:ironic-image
 | 
					    BuildFlags: excludebuild:ironic-image
 | 
				
			||||||
    BuildFlags: excludebuild:ironic-ipa-downloader-image
 | 
					    BuildFlags: excludebuild:ironic-ipa-downloader-image
 | 
				
			||||||
 | 
					    BuildFlags: excludebuild:kiwi-builder-image
 | 
				
			||||||
    BuildFlags: excludebuild:kubectl-image
 | 
					    BuildFlags: excludebuild:kubectl-image
 | 
				
			||||||
    BuildFlags: excludebuild:kube-rbac-proxy-image
 | 
					    BuildFlags: excludebuild:kube-rbac-proxy-image
 | 
				
			||||||
    BuildFlags: excludebuild:metallb-controller-image
 | 
					    BuildFlags: excludebuild:metallb-controller-image
 | 
				
			||||||
@@ -104,11 +106,16 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
    Patterntype: none
 | 
					    Patterntype: none
 | 
				
			||||||
    BuildEngine: podman
 | 
					    BuildEngine: podman
 | 
				
			||||||
    Prefer: sles-release
 | 
					    Prefer: sles-release
 | 
				
			||||||
    BuildFlags: dockerarg:SLE_VERSION=15.6
 | 
					    BuildFlags: dockerarg:SLE_VERSION=15.7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Publish multi-arch container images only once all archs have been built
 | 
					    # Publish multi-arch container images only once all archs have been built
 | 
				
			||||||
    PublishFlags: archsync
 | 
					    PublishFlags: archsync
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    # skopeo and umoci are used by build scripts to list packages
 | 
				
			||||||
 | 
					    Substitute: system-packages:podman podman buildah createrepo_c release-compare skopeo umoci
 | 
				
			||||||
 | 
					%endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%if "%_repository" == "images"
 | 
				
			||||||
    # skopeo and umoci are used by build scripts to list packages
 | 
					    # skopeo and umoci are used by build scripts to list packages
 | 
				
			||||||
    Substitute: system-packages:podman podman buildah createrepo_c release-compare edge-build-checks skopeo umoci
 | 
					    Substitute: system-packages:podman podman buildah createrepo_c release-compare edge-build-checks skopeo umoci
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -123,6 +130,8 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
    BuildFlags: dockerarg:SLE_VERSION=16.0
 | 
					    BuildFlags: dockerarg:SLE_VERSION=16.0
 | 
				
			||||||
    BuildFlags: onlybuild:kiwi-builder-image
 | 
					    BuildFlags: onlybuild:kiwi-builder-image
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    Substitute: system-packages:podman podman buildah createrepo_c release-compare skopeo umoci
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Publish multi-arch container images only once all archs have been built
 | 
					    # Publish multi-arch container images only once all archs have been built
 | 
				
			||||||
    PublishFlags: archsync
 | 
					    PublishFlags: archsync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -140,7 +149,13 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
    %endif
 | 
					    %endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%else
 | 
					%else
 | 
				
			||||||
 | 
					    %if "%{sub %{reverse %_project} 1 7}" != "%{reverse :ToTest}" && "%{sub %{reverse %_project} 1 9}" != "%{reverse :Snapshot}"
 | 
				
			||||||
      BuildFlags: excludebuild:kiwi-builder-image
 | 
					      BuildFlags: excludebuild:kiwi-builder-image
 | 
				
			||||||
 | 
					    %else
 | 
				
			||||||
 | 
					      %ifarch aarch64
 | 
				
			||||||
 | 
					        BuildFlags: onlybuild:kiwi-builder-image
 | 
				
			||||||
 | 
					      %endif
 | 
				
			||||||
 | 
					    %endif
 | 
				
			||||||
%endif
 | 
					%endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								_meta
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								_meta
									
									
									
									
									
								
							@@ -23,6 +23,9 @@
 | 
				
			|||||||
    <disable/>
 | 
					    <disable/>
 | 
				
			||||||
    <enable repository="charts"/>
 | 
					    <enable repository="charts"/>
 | 
				
			||||||
    <enable repository="test_manifest_images"/>
 | 
					    <enable repository="test_manifest_images"/>
 | 
				
			||||||
 | 
					    {%- if for_release %}
 | 
				
			||||||
 | 
					    <enable repository="releasecharts"/>
 | 
				
			||||||
 | 
					    {%- endif %}
 | 
				
			||||||
  </build>
 | 
					  </build>
 | 
				
			||||||
  <publish>
 | 
					  <publish>
 | 
				
			||||||
    <disable repository="phantomcharts"/>
 | 
					    <disable repository="phantomcharts"/>
 | 
				
			||||||
@@ -42,7 +45,7 @@
 | 
				
			|||||||
      <path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
 | 
					      <path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
 | 
				
			||||||
      <path project="SUSE:SLFO:Main:Build" repository="standard"/>
 | 
					      <path project="SUSE:SLFO:Main:Build" repository="standard"/>
 | 
				
			||||||
    {%- else %}
 | 
					    {%- else %}
 | 
				
			||||||
      <path project="SUSE:CA" repository="SLE_15_SP6"/>
 | 
					      <path project="SUSE:CA" repository="SLE_15_SP7"/>
 | 
				
			||||||
      <path project="{{ project }}" repository="standard"/>
 | 
					      <path project="{{ project }}" repository="standard"/>
 | 
				
			||||||
    {%- endif %}
 | 
					    {%- endif %}
 | 
				
			||||||
    <arch>x86_64</arch>
 | 
					    <arch>x86_64</arch>
 | 
				
			||||||
@@ -53,8 +56,8 @@
 | 
				
			|||||||
    {%- if release_project is defined and not for_release %}
 | 
					    {%- if release_project is defined and not for_release %}
 | 
				
			||||||
    <releasetarget project="{{ release_project }}" repository="standard" trigger="manual"/>
 | 
					    <releasetarget project="{{ release_project }}" repository="standard" trigger="manual"/>
 | 
				
			||||||
    {%- endif %}
 | 
					    {%- endif %}
 | 
				
			||||||
    <path project="{{ ironic_base }}:2024.2" repository="15.6"/>
 | 
					    <path project="{{ ironic_base }}:2025.1" repository="15.7"/>
 | 
				
			||||||
    <path project="SUSE:SLE-15-SP6:Update" repository="standard"/>
 | 
					    <path project="SUSE:SLE-15-SP7:Update" repository="standard"/>
 | 
				
			||||||
    <arch>x86_64</arch>
 | 
					    <arch>x86_64</arch>
 | 
				
			||||||
    <arch>aarch64</arch>
 | 
					    <arch>aarch64</arch>
 | 
				
			||||||
  </repository>
 | 
					  </repository>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,3 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2
 | 
					 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1
 | 
					#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1-%RELEASE%
 | 
				
			||||||
annotations:
 | 
					annotations:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,12 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM registry.suse.com/bci/bci-base:$SLE_VERSION AS base
 | 
					FROM registry.suse.com/bci/bci-base:$SLE_VERSION AS base
 | 
				
			||||||
COPY --from=micro / /installroot/
 | 
					COPY --from=micro / /installroot/
 | 
				
			||||||
RUN zypper --installroot /installroot --non-interactive install --no-recommends baremetal-operator iproute2 bind-utils vim shadow; zypper -n clean; rm -rf /var/log/*
 | 
					RUN zypper --installroot /installroot --non-interactive install --no-recommends baremetal-operator inotify-tools procps iproute2 bind-utils vim shadow; zypper -n clean; rm -rf /var/log/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM micro AS final
 | 
					FROM micro AS final
 | 
				
			||||||
# Define labels according to https://en.opensuse.org/Building_derived_containers
 | 
					# Define labels according to https://en.opensuse.org/Building_derived_containers
 | 
				
			||||||
@@ -19,7 +18,7 @@ LABEL org.opencontainers.image.version="%%baremetal-operator_version%%"
 | 
				
			|||||||
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
@@ -29,6 +28,8 @@ LABEL com.suse.release-stage="released"
 | 
				
			|||||||
# endlabelprefix
 | 
					# endlabelprefix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COPY --from=base /installroot /
 | 
					COPY --from=base /installroot /
 | 
				
			||||||
 | 
					COPY bmo-run /usr/bin/bmo-run
 | 
				
			||||||
 | 
					RUN chmod +x /usr/bin/bmo-run
 | 
				
			||||||
RUN groupadd -r -g 11000 bmo
 | 
					RUN groupadd -r -g 11000 bmo
 | 
				
			||||||
RUN useradd -u 11000 -g 11000 bmo
 | 
					RUN useradd -u 11000 -g 11000 bmo
 | 
				
			||||||
ENTRYPOINT [ "/usr/bin/baremetal-operator" ]
 | 
					ENTRYPOINT [ "/usr/bin/bmo-run" ]
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								baremetal-operator-image/bmo-run
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								baremetal-operator-image/bmo-run
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					export RESTART_CONTAINER_CERTIFICATE_UPDATED=${RESTART_CONTAINER_CERTIFICATE_UPDATED:-"false"}
 | 
				
			||||||
 | 
					export IRONIC_CACERT_FILE=${IRONIC_CACERT_FILE:-"/opt/metal3/certs/ca/tls.crt"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
				
			||||||
 | 
					    # shellcheck disable=SC2034
 | 
				
			||||||
 | 
					    inotifywait -m -e delete_self "${IRONIC_CACERT_FILE}" | while read -r file event; do
 | 
				
			||||||
 | 
					        kill $(pgrep baremetal-opera)
 | 
				
			||||||
 | 
					    done &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec /usr/bin/baremetal-operator $@
 | 
				
			||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.0
 | 
					#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.0-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-base:$SLE_VERSION
 | 
					FROM registry.suse.com/bci/bci-base:$SLE_VERSION
 | 
				
			||||||
MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
					MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
				
			||||||
@@ -15,11 +14,11 @@ RUN zypper --non-interactive install --no-recommends edge-image-builder qemu-x86
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE edge-image-builder Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE edge-image-builder Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="edge-image-builder based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="edge-image-builder based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="1.2.0"
 | 
					LABEL org.opencontainers.image.version="1.2.1"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%edge-image-builder:1.2.0-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%edge-image-builder:1.2.1-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ metallb:
 | 
				
			|||||||
endpoint-copier-operator:
 | 
					endpoint-copier-operator:
 | 
				
			||||||
  chart: endpoint-copier-operator
 | 
					  chart: endpoint-copier-operator
 | 
				
			||||||
  repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"
 | 
					  repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"
 | 
				
			||||||
  version: "%%CHART_MAJOR%%.0.0+up0.2.1"
 | 
					  version: "%%CHART_MAJOR%%.0.1+up0.3.0"
 | 
				
			||||||
kubernetes:
 | 
					kubernetes:
 | 
				
			||||||
  k3s:
 | 
					  k3s:
 | 
				
			||||||
    selinuxPackage: k3s-selinux-1.6-1.slemicro.noarch
 | 
					    selinuxPackage: k3s-selinux-1.6-1.slemicro.noarch
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
    <param name="url">https://github.com/suse-edge/edge-image-builder.git</param>
 | 
					    <param name="url">https://github.com/suse-edge/edge-image-builder.git</param>
 | 
				
			||||||
    <param name="scm">git</param>
 | 
					    <param name="scm">git</param>
 | 
				
			||||||
    <param name="exclude">.git</param>
 | 
					    <param name="exclude">.git</param>
 | 
				
			||||||
    <param name="revision">v1.2.0</param>
 | 
					    <param name="revision">v1.2.1</param>
 | 
				
			||||||
    <!-- Uncomment and set this For Pre-Release Version -->
 | 
					    <!-- Uncomment and set this For Pre-Release Version -->
 | 
				
			||||||
    <!-- <param name="version">1.2.0~rc1</param> -->
 | 
					    <!-- <param name="version">1.2.0~rc1</param> -->
 | 
				
			||||||
    <!-- Uncomment and this for regular version -->
 | 
					    <!-- Uncomment and this for regular version -->
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           edge-image-builder
 | 
					Name:           edge-image-builder
 | 
				
			||||||
Version:        1.2.0
 | 
					Version:        1.2.1
 | 
				
			||||||
Release:        0
 | 
					Release:        0
 | 
				
			||||||
Summary:        Edge Image Builder
 | 
					Summary:        Edge Image Builder
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.0_up0.2.1
 | 
					#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.1_up0.3.0
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.0_up0.2.1-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.1_up0.3.0-%RELEASE%
 | 
				
			||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: v0.2.0
 | 
					appVersion: v0.3.0
 | 
				
			||||||
description: A Helm chart for Kubernetes
 | 
					description: A Helm chart for Kubernetes
 | 
				
			||||||
name: endpoint-copier-operator
 | 
					name: endpoint-copier-operator
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: "%%CHART_MAJOR%%.0.0+up0.2.1"
 | 
					version: "%%CHART_MAJOR%%.0.1+up0.3.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,8 +20,23 @@ spec:
 | 
				
			|||||||
      labels:
 | 
					      labels:
 | 
				
			||||||
        {{- include "endpoint-copier-operator.selectorLabels" . | nindent 8 }}
 | 
					        {{- include "endpoint-copier-operator.selectorLabels" . | nindent 8 }}
 | 
				
			||||||
    spec:
 | 
					    spec:
 | 
				
			||||||
 | 
					      {{- if .Values.priorityClassName }}
 | 
				
			||||||
 | 
					      priorityClassName: {{ .Values.priorityClassName }}
 | 
				
			||||||
 | 
					      {{- end }}
 | 
				
			||||||
      securityContext:
 | 
					      securityContext:
 | 
				
			||||||
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
 | 
					        {{- toYaml .Values.podSecurityContext | nindent 8 }}
 | 
				
			||||||
 | 
					      {{- with .Values.nodeSelector }}
 | 
				
			||||||
 | 
					      nodeSelector:
 | 
				
			||||||
 | 
					        {{- toYaml . | nindent 8 }}
 | 
				
			||||||
 | 
					      {{- end }}
 | 
				
			||||||
 | 
					      {{- with .Values.affinity }}
 | 
				
			||||||
 | 
					      affinity:
 | 
				
			||||||
 | 
					        {{- toYaml . | nindent 8 }}
 | 
				
			||||||
 | 
					      {{- end }}
 | 
				
			||||||
 | 
					      {{- with .Values.tolerations }}
 | 
				
			||||||
 | 
					      tolerations:
 | 
				
			||||||
 | 
					        {{- toYaml . | nindent 8 }}
 | 
				
			||||||
 | 
					      {{- end }}
 | 
				
			||||||
      containers:
 | 
					      containers:
 | 
				
			||||||
      - command:
 | 
					      - command:
 | 
				
			||||||
        - /manager
 | 
					        - /manager
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ metadata:
 | 
				
			|||||||
  name: {{ include "endpoint-copier-operator.fullname" . }}
 | 
					  name: {{ include "endpoint-copier-operator.fullname" . }}
 | 
				
			||||||
rules:
 | 
					rules:
 | 
				
			||||||
- apiGroups:
 | 
					- apiGroups:
 | 
				
			||||||
  - ""
 | 
					  - "discovery.k8s.io"
 | 
				
			||||||
  resources:
 | 
					  resources:
 | 
				
			||||||
  - endpoints
 | 
					  - endpointslices
 | 
				
			||||||
  verbs:
 | 
					  verbs:
 | 
				
			||||||
  - create
 | 
					  - create
 | 
				
			||||||
  - delete
 | 
					  - delete
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ image:
 | 
				
			|||||||
  repository: %%IMG_REPO%%/%%IMG_PREFIX%%endpoint-copier-operator
 | 
					  repository: %%IMG_REPO%%/%%IMG_PREFIX%%endpoint-copier-operator
 | 
				
			||||||
  pullPolicy: IfNotPresent
 | 
					  pullPolicy: IfNotPresent
 | 
				
			||||||
  # Overrides the image tag whose default is the chart appVersion.
 | 
					  # Overrides the image tag whose default is the chart appVersion.
 | 
				
			||||||
  tag: "0.2.0"
 | 
					  tag: "0.3.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nameOverride: "endpoint-copier-operator"
 | 
					nameOverride: "endpoint-copier-operator"
 | 
				
			||||||
fullnameOverride: "endpoint-copier-operator"
 | 
					fullnameOverride: "endpoint-copier-operator"
 | 
				
			||||||
@@ -29,6 +29,8 @@ podSecurityContext:
 | 
				
			|||||||
  seccompProfile:
 | 
					  seccompProfile:
 | 
				
			||||||
    type: RuntimeDefault
 | 
					    type: RuntimeDefault
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					priorityClassName: "system-cluster-critical"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
securityContext:
 | 
					securityContext:
 | 
				
			||||||
  allowPrivilegeEscalation: false
 | 
					  allowPrivilegeEscalation: false
 | 
				
			||||||
  capabilities:
 | 
					  capabilities:
 | 
				
			||||||
@@ -37,11 +39,11 @@ securityContext:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
resources:
 | 
					resources:
 | 
				
			||||||
  limits:
 | 
					  limits:
 | 
				
			||||||
    cpu: 500m
 | 
					    cpu: 100m
 | 
				
			||||||
    memory: 128Mi
 | 
					 | 
				
			||||||
  requests:
 | 
					 | 
				
			||||||
    cpu: 10m
 | 
					 | 
				
			||||||
    memory: 64Mi
 | 
					    memory: 64Mi
 | 
				
			||||||
 | 
					  requests:
 | 
				
			||||||
 | 
					    cpu: 5m
 | 
				
			||||||
 | 
					    memory: 32Mi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
autoscaling:
 | 
					autoscaling:
 | 
				
			||||||
  enabled: false
 | 
					  enabled: false
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 <service name="obs_scm">
 | 
					 <service name="obs_scm">
 | 
				
			||||||
    <param name="url">https://github.com/suse-edge/endpoint-copier-operator</param>
 | 
					    <param name="url">https://github.com/suse-edge/endpoint-copier-operator</param>
 | 
				
			||||||
    <param name="scm">git</param>
 | 
					    <param name="scm">git</param>
 | 
				
			||||||
    <param name="revision">v0.2.0</param>
 | 
					    <param name="revision">v0.3.0</param>
 | 
				
			||||||
    <param name="version">_auto_</param>
 | 
					    <param name="version">_auto_</param>
 | 
				
			||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="changesgenerate">enable</param>
 | 
					    <param name="changesgenerate">enable</param>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,14 +17,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           endpoint-copier-operator
 | 
					Name:           endpoint-copier-operator
 | 
				
			||||||
Version:        0.2.0
 | 
					Version:        0.3.0
 | 
				
			||||||
Release:        0.2.0
 | 
					Release:        0.3.0
 | 
				
			||||||
Summary:        Implements a Kubernetes API for copying endpoint resources
 | 
					Summary:        Implements a Kubernetes API for copying endpoint resources
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
URL:            https://github.com/suse-edge/endpoint-copier-operator
 | 
					URL:            https://github.com/suse-edge/endpoint-copier-operator
 | 
				
			||||||
Source:         endpoint-copier-operator-%{version}.tar
 | 
					Source:         endpoint-copier-operator-%{version}.tar
 | 
				
			||||||
Source1:        vendor.tar.gz
 | 
					Source1:        vendor.tar.gz
 | 
				
			||||||
BuildRequires:  golang(API) = 1.20
 | 
					BuildRequires:  golang(API) = 1.24
 | 
				
			||||||
ExcludeArch:    s390
 | 
					ExcludeArch:    s390
 | 
				
			||||||
ExcludeArch:    %{ix86}
 | 
					ExcludeArch:    %{ix86}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: MIT
 | 
					# SPDX-License-Identifier: MIT
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6
 | 
					#!BuildTag: %%IMG_PREFIX%%frr:8.5.6
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%frr:8.5.6-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.4
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.1
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.4-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.1-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
@@ -20,11 +19,11 @@ RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#!ArchExclusiveLine: x86_64
 | 
					#!ArchExclusiveLine: x86_64
 | 
				
			||||||
RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
					RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
				
			||||||
      zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi inotify-tools ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
 | 
					      zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 bind-utils procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic; \
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
#!ArchExclusiveLine: aarch64
 | 
					#!ArchExclusiveLine: aarch64
 | 
				
			||||||
RUN if [ "$(uname -m)" = "aarch64" ];then \
 | 
					RUN if [ "$(uname -m)" = "aarch64" ];then \
 | 
				
			||||||
      zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi inotify-tools ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
 | 
					      zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 bind-utils procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic; \
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
# DATABASE
 | 
					# DATABASE
 | 
				
			||||||
@@ -32,7 +31,9 @@ RUN mkdir -p /installroot/var/lib/ironic && \
 | 
				
			|||||||
  /installroot/usr/bin/sqlite3 /installroot/var/lib/ironic/ironic.sqlite "pragma journal_mode=wal" && \
 | 
					  /installroot/usr/bin/sqlite3 /installroot/var/lib/ironic/ironic.sqlite "pragma journal_mode=wal" && \
 | 
				
			||||||
  zypper --installroot /installroot --non-interactive remove sqlite3
 | 
					  zypper --installroot /installroot --non-interactive remove sqlite3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# build actual image
 | 
				
			||||||
FROM micro AS final
 | 
					FROM micro AS final
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
					MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
				
			||||||
# Define labels according to https://en.opensuse.org/Building_derived_containers
 | 
					# Define labels according to https://en.opensuse.org/Building_derived_containers
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Openstack Ironic Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Openstack Ironic Container Image"
 | 
				
			||||||
@@ -40,8 +41,8 @@ LABEL org.opencontainers.image.description="Openstack Ironic based on the SLE Ba
 | 
				
			|||||||
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opencontainers.image.version="26.1.2.4"
 | 
					LABEL org.opencontainers.image.version="29.0.4.1"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:26.1.2.4-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:29.0.4.1-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
@@ -62,14 +63,19 @@ RUN echo 'alias mkisofs="xorriso -as mkisofs"' >> ~/.bashrc
 | 
				
			|||||||
COPY mkisofs_wrapper /usr/bin/mkisofs
 | 
					COPY mkisofs_wrapper /usr/bin/mkisofs
 | 
				
			||||||
RUN set -euo pipefail; chmod +x /usr/bin/mkisofs
 | 
					RUN set -euo pipefail; chmod +x /usr/bin/mkisofs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COPY auth-common.sh configure-ironic.sh ironic-common.sh rundnsmasq runhttpd runironic runlogwatch.sh tls-common.sh configure-nonroot.sh ironic-probe.j2 /bin/
 | 
					 | 
				
			||||||
RUN set -euo pipefail; chmod +x /bin/auth-common.sh; chmod +x /bin/configure-ironic.sh; chmod +x /bin/ironic-common.sh; chmod +x /bin/rundnsmasq; chmod +x /bin/runhttpd; chmod +x /bin/runironic; chmod +x /bin/runlogwatch.sh; chmod +x /bin/tls-common.sh; chmod +x /bin/configure-nonroot.sh;
 | 
					 | 
				
			||||||
RUN mkdir -p /tftpboot
 | 
					RUN mkdir -p /tftpboot
 | 
				
			||||||
RUN mkdir -p $GRUB_DIR
 | 
					RUN mkdir -p $GRUB_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# No need to support the Legacy BIOS boot
 | 
					COPY scripts/ /bin/
 | 
				
			||||||
#RUN cp /usr/share/syslinux/pxelinux.0 /tftpboot
 | 
					COPY configure-nonroot.sh /bin/
 | 
				
			||||||
#RUN cp /usr/share/syslinux/chain.c32 /tftpboot/
 | 
					RUN set -euo pipefail; chmod +x /bin/configure-ironic.sh /bin/ironic-probe.sh /bin/rundatabase-upgrade /bin/rundnsmasq /bin/runhttpd /bin/runironic /bin/runlogwatch.sh /bin/runonline-data-migrations /bin/configure-nonroot.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN mv /bin/ironic-probe.sh /bin/ironic-readiness
 | 
				
			||||||
 | 
					RUN cp /bin/ironic-readiness /bin/ironic-liveness
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY ironic-config/inspector.ipxe.j2 ironic-config/httpd-ironic-api.conf.j2 \
 | 
				
			||||||
 | 
					     ironic-config/ipxe_config.template ironic-config/dnsmasq.conf.j2 \
 | 
				
			||||||
 | 
					     /tmp/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# IRONIC #
 | 
					# IRONIC #
 | 
				
			||||||
RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
 | 
					RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
 | 
				
			||||||
@@ -77,7 +83,7 @@ RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
 | 
				
			|||||||
RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
					RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
				
			||||||
      cp /usr/share/ipxe/ipxe-x86_64.efi /tftpboot/ipxe.efi ;\
 | 
					      cp /usr/share/ipxe/ipxe-x86_64.efi /tftpboot/ipxe.efi ;\
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
#!ArchExclusiveLine: x86_64
 | 
					#!ArchExclusiveLine: aarch64 
 | 
				
			||||||
RUN if [ "$(uname -m)" = "aarch64" ]; then\ 
 | 
					RUN if [ "$(uname -m)" = "aarch64" ]; then\ 
 | 
				
			||||||
      cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
 | 
					      cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@@ -85,23 +91,17 @@ RUN if [ "$(uname -m)" = "aarch64" ]; then\
 | 
				
			|||||||
COPY --from=base /tmp/esp-x86_64.img /tmp/uefi_esp-x86_64.img
 | 
					COPY --from=base /tmp/esp-x86_64.img /tmp/uefi_esp-x86_64.img
 | 
				
			||||||
COPY --from=base /tmp/esp-aarch64.img /tmp/uefi_esp-arm64.img
 | 
					COPY --from=base /tmp/esp-aarch64.img /tmp/uefi_esp-arm64.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COPY ironic.conf.j2 /etc/ironic/
 | 
					COPY ironic-config/ironic.conf.j2 ironic-config/network-data-schema-empty.json /etc/ironic/
 | 
				
			||||||
COPY inspector.ipxe.j2 httpd-ironic-api.conf.j2 ipxe_config.template /tmp/
 | 
					 | 
				
			||||||
COPY network-data-schema-empty.json /etc/ironic/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# DNSMASQ
 | 
					 | 
				
			||||||
COPY dnsmasq.conf.j2 /etc/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Custom httpd config, removes all but the bare minimum needed modules
 | 
					 | 
				
			||||||
COPY httpd.conf.j2 /etc/httpd/conf/
 | 
					 | 
				
			||||||
COPY httpd-modules.conf /etc/httpd/conf.modules.d/
 | 
					 | 
				
			||||||
COPY apache2-vmedia.conf.j2 /etc/httpd-vmedia.conf.j2
 | 
					 | 
				
			||||||
COPY apache2-ipxe.conf.j2 /etc/httpd-ipxe.conf.j2
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Workaround
 | 
					# Workaround
 | 
				
			||||||
# Removing the 010-ironic.conf file that comes with the package 
 | 
					# Removing the 010-ironic.conf file that comes with the package 
 | 
				
			||||||
RUN rm /etc/ironic/ironic.conf.d/010-ironic.conf
 | 
					RUN rm /etc/ironic/ironic.conf.d/010-ironic.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Custom httpd config, removes all but the bare minimum needed modules
 | 
				
			||||||
 | 
					COPY ironic-config/httpd.conf.j2 /etc/httpd/conf/
 | 
				
			||||||
 | 
					COPY ironic-config/httpd-modules.conf /etc/httpd/conf.modules.d/
 | 
				
			||||||
 | 
					COPY ironic-config/apache2-vmedia.conf.j2 /tmp/httpd-vmedia.conf.j2
 | 
				
			||||||
 | 
					COPY ironic-config/apache2-ipxe.conf.j2 /tmp/httpd-ipxe.conf.j2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# configure non-root user and set relevant permissions
 | 
					# configure non-root user and set relevant permissions
 | 
				
			||||||
RUN configure-nonroot.sh && \
 | 
					RUN configure-nonroot.sh && rm -f /bin/configure-nonroot.sh
 | 
				
			||||||
  rm -f /bin/configure-nonroot.sh
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,59 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_REVERSE_PROXY_SETUP=${IRONIC_REVERSE_PROXY_SETUP:-false}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Backward compatibility
 | 
					 | 
				
			||||||
if [[ "${IRONIC_DEPLOYMENT:-}" == "Conductor" ]]; then
 | 
					 | 
				
			||||||
    export IRONIC_EXPOSE_JSON_RPC=true
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    export IRONIC_EXPOSE_JSON_RPC="${IRONIC_EXPOSE_JSON_RPC:-false}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRONIC_HTPASSWD_FILE=/etc/ironic/htpasswd
 | 
					 | 
				
			||||||
if [[ -f "/auth/ironic/htpasswd" ]]; then
 | 
					 | 
				
			||||||
    IRONIC_HTPASSWD=$(</auth/ironic/htpasswd)
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
export IRONIC_HTPASSWD=${IRONIC_HTPASSWD:-${HTTP_BASIC_HTPASSWD:-}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_client_basic_auth()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    local auth_config_file="/auth/$1/auth-config"
 | 
					 | 
				
			||||||
    local dest="${2:-/etc/ironic/ironic.conf}"
 | 
					 | 
				
			||||||
    if [[ -f "${auth_config_file}" ]]; then
 | 
					 | 
				
			||||||
        # Merge configurations in the "auth" directory into the default ironic configuration file
 | 
					 | 
				
			||||||
        crudini --merge "${dest}" < "${auth_config_file}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_json_rpc_auth()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ "${IRONIC_EXPOSE_JSON_RPC}" == "true" ]]; then
 | 
					 | 
				
			||||||
        if [[ -z "${IRONIC_HTPASSWD}" ]]; then
 | 
					 | 
				
			||||||
            echo "FATAL: enabling JSON RPC requires authentication"
 | 
					 | 
				
			||||||
            exit 1
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}-rpc"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_ironic_auth()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    local config=/etc/ironic/ironic.conf
 | 
					 | 
				
			||||||
    # Configure HTTP basic auth for API server
 | 
					 | 
				
			||||||
    if [[ -n "${IRONIC_HTPASSWD}" ]]; then
 | 
					 | 
				
			||||||
        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
					 | 
				
			||||||
        if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "false" ]]; then
 | 
					 | 
				
			||||||
            crudini --set "${config}" DEFAULT auth_strategy http_basic
 | 
					 | 
				
			||||||
            crudini --set "${config}" DEFAULT http_basic_auth_user_file "${IRONIC_HTPASSWD_FILE}"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
write_htpasswd_files()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ -n "${IRONIC_HTPASSWD:-}" ]]; then
 | 
					 | 
				
			||||||
        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										57
									
								
								ironic-image/configure-nonroot.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										57
									
								
								ironic-image/configure-nonroot.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,53 +1,70 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This script changes permissions to allow Ironic container to run as non-root
 | 
				
			||||||
 | 
					# user. As the same image is used to run ironic, ironic-httpd, ironic-dsnmasq,
 | 
				
			||||||
 | 
					# and ironic-log-watch via BMO's ironic k8s manifest, it has
 | 
				
			||||||
 | 
					# to be configured to work with multiple different users and groups, while they
 | 
				
			||||||
 | 
					# share files via bind mounts (/shared, /certs/*), which can only get one
 | 
				
			||||||
 | 
					# group id as "fsGroup". Additionally, dnsmasq needs three capabilities to run
 | 
				
			||||||
 | 
					# which we provide via "setcap", and "allowPrivilegeEscalation: true" in
 | 
				
			||||||
 | 
					# manifest.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -eux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# user and group are from ironic rpms (uid 997, gid 994)
 | 
				
			||||||
NONROOT_UID=10475
 | 
					NONROOT_UID=10475
 | 
				
			||||||
NONROOT_GID=10475
 | 
					NONROOT_GID=10475
 | 
				
			||||||
USER="ironic-suse"
 | 
					IRONIC_USER="ironic-suse"
 | 
				
			||||||
 | 
					IRONIC_GROUP="ironic-suse"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
groupadd -r -g ${NONROOT_GID} ${USER}
 | 
					groupadd -r -g ${NONROOT_GID} ${IRONIC_GROUP}
 | 
				
			||||||
useradd -r -g ${NONROOT_GID} \
 | 
					useradd -r -g ${NONROOT_GID} \
 | 
				
			||||||
           -u ${NONROOT_UID} \
 | 
					           -u ${NONROOT_UID} \
 | 
				
			||||||
           -d /var/lib/ironic \
 | 
					           -d /var/lib/ironic \
 | 
				
			||||||
           -s /sbin/nologin \
 | 
					           -s /sbin/nologin \
 | 
				
			||||||
           ${USER}
 | 
					           ${IRONIC_USER}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# create ironic's http_root directory
 | 
					# most containers mount /shared but dnsmasq can live without it
 | 
				
			||||||
mkdir -p /shared/html
 | 
					mkdir -p /shared
 | 
				
			||||||
chown "${NONROOT_UID}":"${NONROOT_GID}" /shared/html
 | 
					mkdir -p /data
 | 
				
			||||||
 | 
					mkdir -p /conf
 | 
				
			||||||
 | 
					chown "${IRONIC_USER}":"${IRONIC_GROUP}" /shared
 | 
				
			||||||
 | 
					chown "${IRONIC_USER}":"${IRONIC_GROUP}" /data
 | 
				
			||||||
 | 
					chown "${IRONIC_USER}":"${IRONIC_GROUP}" /conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# we'll bind mount shared ca and ironic certificate dirs here
 | 
					# we'll bind mount shared ca and ironic certificate dirs here
 | 
				
			||||||
# that need to have correct ownership as the entire ironic in BMO
 | 
					# that need to have correct ownership as the entire ironic in BMO
 | 
				
			||||||
# deployment shares a single fsGroup in manifest's securityContext
 | 
					# deployment shares a single fsGroup in manifest's securityContext
 | 
				
			||||||
mkdir -p /certs/ca
 | 
					mkdir -p /certs/ca
 | 
				
			||||||
chown "${NONROOT_UID}":"${NONROOT_GID}" /certs{,/ca}
 | 
					chown "${IRONIC_USER}":"${IRONIC_GROUP}" /certs{,/ca}
 | 
				
			||||||
chmod 2775 /certs{,/ca}
 | 
					chmod 2775 /certs{,/ca}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# apache2 permission changes
 | 
					# apache2 permission changes
 | 
				
			||||||
chown -R "${NONROOT_UID}":"${NONROOT_GID}" /etc/apache2
 | 
					chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/apache2
 | 
				
			||||||
chown -R "${NONROOT_UID}":"${NONROOT_GID}" /run
 | 
					chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ironic and httpd related changes
 | 
					# ironic and httpd related changes
 | 
				
			||||||
mkdir -p /etc/httpd/conf.d
 | 
					mkdir -p /etc/httpd/conf.d
 | 
				
			||||||
chown -R "${NONROOT_UID}":"${NONROOT_GID}" /etc/ironic /etc/httpd /etc/httpd
 | 
					chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/ironic /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d/
 | 
				
			||||||
chown -R "${NONROOT_UID}":"${NONROOT_GID}" /var/log
 | 
					chmod 2775 /etc/ironic /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d/
 | 
				
			||||||
chmod 2775 /etc/ironic /etc/httpd/conf /etc/httpd/conf.d
 | 
					#chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.d/*
 | 
				
			||||||
chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.d/*
 | 
					chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.modules.d/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
chown -R "${NONROOT_UID}":"${NONROOT_GID}" /var/lib/ironic
 | 
					chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /var/lib/ironic
 | 
				
			||||||
 | 
					chmod 2775 /var/lib/ironic
 | 
				
			||||||
chmod 664 /var/lib/ironic/ironic.sqlite
 | 
					chmod 664 /var/lib/ironic/ironic.sqlite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# dnsmasq, and the capabilities required to run it as non-root user
 | 
					# dnsmasq, and the capabilities required to run it as non-root user
 | 
				
			||||||
chown -R "${NONROOT_UID}":"${NONROOT_GID}" /etc/dnsmasq.conf /var/lib/dnsmasq
 | 
					chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/dnsmasq.conf
 | 
				
			||||||
chmod 2775 /var/lib/dnsmasq
 | 
					#handled at chart level
 | 
				
			||||||
touch /var/lib/dnsmasq/dnsmasq.leases
 | 
					#setcap "cap_net_raw,cap_net_admin,cap_net_bind_service=+eip" /usr/sbin/dnsmasq
 | 
				
			||||||
chmod 664 /etc/dnsmasq.conf /var/lib/dnsmasq/dnsmasq.leases
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ca-certificates permission changes
 | 
					# ca-certificates permission changes
 | 
				
			||||||
touch /var/lib/ca-certificates/ca-bundle.pem.new
 | 
					touch /var/lib/ca-certificates/ca-bundle.pem.new
 | 
				
			||||||
chown -R "${NONROOT_UID}":"${NONROOT_GID}" /var/lib/ca-certificates/
 | 
					chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /var/lib/ca-certificates/
 | 
				
			||||||
chmod -R +w /var/lib/ca-certificates/
 | 
					chmod -R +w /var/lib/ca-certificates/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# probes that are created before start
 | 
					# probes that are created before start
 | 
				
			||||||
touch /bin/ironic-{readi,live}ness
 | 
					touch /bin/ironic-{readi,live}ness
 | 
				
			||||||
chown root:"${NONROOT_GID}" /bin/ironic-{readi,live}ness
 | 
					chown root:"${IRONIC_GROUP}" /bin/ironic-{readi,live}ness
 | 
				
			||||||
chmod 775 /bin/ironic-{readi,live}ness
 | 
					chmod 775 /bin/ironic-{readi,live}ness
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,57 +0,0 @@
 | 
				
			|||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
					 | 
				
			||||||
# not use this file except in compliance with the License. You may obtain
 | 
					 | 
				
			||||||
# a copy of the License at
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
					 | 
				
			||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
					 | 
				
			||||||
# License for the specific language governing permissions and limitations
 | 
					 | 
				
			||||||
# under the License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
					 | 
				
			||||||
Listen {{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
					 | 
				
			||||||
 <VirtualHost *:{{ env.IRONIC_INSPECTOR_LISTEN_PORT }}>
 | 
					 | 
				
			||||||
{% else %}
 | 
					 | 
				
			||||||
Listen {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
					 | 
				
			||||||
 <VirtualHost {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_INSPECTOR_LISTEN_PORT }}>
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
    {% if env.IRONIC_INSPECTOR_PRIVATE_PORT == "unix" %}
 | 
					 | 
				
			||||||
    ProxyPass "/"  "unix:/shared/inspector.sock|http://127.0.0.1/"
 | 
					 | 
				
			||||||
    ProxyPassReverse "/"  "unix:/shared/inspector.sock|http://127.0.0.1/"
 | 
					 | 
				
			||||||
    {% else %}
 | 
					 | 
				
			||||||
    ProxyPass "/"  "http://127.0.0.1:{{ env.IRONIC_INSPECTOR_PRIVATE_PORT }}/"
 | 
					 | 
				
			||||||
    ProxyPassReverse "/"  "http://127.0.0.1:{{ env.IRONIC_INSPECTOR_PRIVATE_PORT }}/"
 | 
					 | 
				
			||||||
    {% endif %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SetEnv APACHE_RUN_USER ironic-suse
 | 
					 | 
				
			||||||
    SetEnv APACHE_RUN_GROUP ironic-suse
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ErrorLog /dev/stdout
 | 
					 | 
				
			||||||
    LogLevel debug
 | 
					 | 
				
			||||||
    CustomLog /dev/stdout combined
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SSLEngine On
 | 
					 | 
				
			||||||
    SSLProtocol {{ env.IRONIC_SSL_PROTOCOL }}
 | 
					 | 
				
			||||||
    SSLCertificateFile {{ env.IRONIC_INSPECTOR_CERT_FILE }} 
 | 
					 | 
				
			||||||
    SSLCertificateKeyFile {{ env.IRONIC_INSPECTOR_KEY_FILE }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {% if "INSPECTOR_HTPASSWD" in env and env.INSPECTOR_HTPASSWD | length %}
 | 
					 | 
				
			||||||
    <Location / >
 | 
					 | 
				
			||||||
        AuthType Basic
 | 
					 | 
				
			||||||
        AuthName "Restricted area"
 | 
					 | 
				
			||||||
        AuthUserFile "/etc/ironic-inspector/htpasswd"
 | 
					 | 
				
			||||||
        Require valid-user
 | 
					 | 
				
			||||||
    </Location>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <Location ~ "^/(v1/?)?$" >
 | 
					 | 
				
			||||||
        Require all granted
 | 
					 | 
				
			||||||
    </Location>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <Location /v1/continue >
 | 
					 | 
				
			||||||
        Require all granted
 | 
					 | 
				
			||||||
    </Location>
 | 
					 | 
				
			||||||
    {% endif %}
 | 
					 | 
				
			||||||
</VirtualHost>
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
#!ipxe
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:retry_boot
 | 
					 | 
				
			||||||
echo In inspector.ipxe
 | 
					 | 
				
			||||||
imgfree
 | 
					 | 
				
			||||||
# NOTE(dtantsur): keep inspection kernel params in [mdns]params in
 | 
					 | 
				
			||||||
# ironic-inspector-image and configuration in configure-ironic.sh
 | 
					 | 
				
			||||||
kernel --timeout 60000 http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/images/ironic-python-agent-${buildarch}.kernel ipa-insecure=1 ipa-inspection-collectors={{ env.IRONIC_IPA_COLLECTORS }} systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-debug=1 ipa-enable-vlan-interfaces={{ env.IRONIC_ENABLE_VLAN_INTERFACES }} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 {{ env.INSPECTOR_EXTRA_ARGS }} initrd=ironic-python-agent.initramfs {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} || goto retry_boot
 | 
					 | 
				
			||||||
initrd --timeout 60000 http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/images/ironic-python-agent-${buildarch}.initramfs || goto retry_boot
 | 
					 | 
				
			||||||
boot
 | 
					 | 
				
			||||||
@@ -1,107 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRONIC_IP="${IRONIC_IP:-}"
 | 
					 | 
				
			||||||
PROVISIONING_INTERFACE="${PROVISIONING_INTERFACE:-}"
 | 
					 | 
				
			||||||
PROVISIONING_IP="${PROVISIONING_IP:-}"
 | 
					 | 
				
			||||||
PROVISIONING_MACS="${PROVISIONING_MACS:-}"
 | 
					 | 
				
			||||||
IPXE_CUSTOM_FIRMWARE_DIR="${IPXE_CUSTOM_FIRMWARE_DIR:-/shared/custom_ipxe_firmware}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
get_provisioning_interface()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ -n "$PROVISIONING_INTERFACE" ]]; then
 | 
					 | 
				
			||||||
        # don't override the PROVISIONING_INTERFACE if one is provided
 | 
					 | 
				
			||||||
        echo "$PROVISIONING_INTERFACE"
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local interface="provisioning"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ -n "${PROVISIONING_IP}" ]]; then
 | 
					 | 
				
			||||||
        if ip -br addr show | grep -qi " ${PROVISIONING_IP}/"; then
 | 
					 | 
				
			||||||
            interface="$(ip -br addr show | grep -i " ${PROVISIONING_IP}/" | cut -f 1 -d ' ' | cut -f 1 -d '@')"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for mac in ${PROVISIONING_MACS//,/ }; do
 | 
					 | 
				
			||||||
        if ip -br link show up | grep -qi "$mac"; then
 | 
					 | 
				
			||||||
            interface="$(ip -br link show up | grep -i "$mac" | cut -f 1 -d ' ' | cut -f 1 -d '@')"
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    echo "$interface"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PROVISIONING_INTERFACE="$(get_provisioning_interface)"
 | 
					 | 
				
			||||||
export PROVISIONING_INTERFACE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export LISTEN_ALL_INTERFACES="${LISTEN_ALL_INTERFACES:-true}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Wait for the interface or IP to be up, sets $IRONIC_IP
 | 
					 | 
				
			||||||
wait_for_interface_or_ip()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    # If $PROVISIONING_IP is specified, then we wait for that to become available on an interface, otherwise we look at $PROVISIONING_INTERFACE for an IP
 | 
					 | 
				
			||||||
    if [[ -n "$PROVISIONING_IP" ]]; then
 | 
					 | 
				
			||||||
        # Convert the address using ipcalc which strips out the subnet. For IPv6 addresses, this will give the short-form address
 | 
					 | 
				
			||||||
        IRONIC_IP="$(ipcalc "${PROVISIONING_IP}" | grep "^Address:" | awk '{print $2}')"
 | 
					 | 
				
			||||||
        export IRONIC_IP
 | 
					 | 
				
			||||||
        until grep -F " ${IRONIC_IP}/" <(ip -br addr show); do
 | 
					 | 
				
			||||||
            echo "Waiting for ${IRONIC_IP} to be configured on an interface"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        until [[ -n "$IRONIC_IP" ]]; do
 | 
					 | 
				
			||||||
            echo "Waiting for ${PROVISIONING_INTERFACE} interface to be configured"
 | 
					 | 
				
			||||||
            IRONIC_IP="$(ip -br add show scope global up dev "${PROVISIONING_INTERFACE}" | awk '{print $3}' | sed -e 's%/.*%%' | head -n 1)"
 | 
					 | 
				
			||||||
            export IRONIC_IP
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # If the IP contains a colon, then it's an IPv6 address, and the HTTP
 | 
					 | 
				
			||||||
    # host needs surrounding with brackets
 | 
					 | 
				
			||||||
    if [[ "$IRONIC_IP" =~ .*:.* ]]; then
 | 
					 | 
				
			||||||
        export IPV=6
 | 
					 | 
				
			||||||
        export IRONIC_URL_HOST="[$IRONIC_IP]"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        export IPV=4
 | 
					 | 
				
			||||||
        export IRONIC_URL_HOST="$IRONIC_IP"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
render_j2_config()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ls $1 # DEBUG
 | 
					 | 
				
			||||||
    python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$1"
 | 
					 | 
				
			||||||
    python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$1" > "$2"
 | 
					 | 
				
			||||||
    ls $2 # DEBUG
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
run_ironic_dbsync()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ "${IRONIC_USE_MARIADB:-true}" == "true" ]]; then
 | 
					 | 
				
			||||||
        # It's possible for the dbsync to fail if mariadb is not up yet, so
 | 
					 | 
				
			||||||
        # retry until success
 | 
					 | 
				
			||||||
        until ironic-dbsync --config-file /etc/ironic/ironic.conf upgrade; do
 | 
					 | 
				
			||||||
            echo "WARNING: ironic-dbsync failed, retrying"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        # SQLite does not support some statements. Fortunately, we can just create
 | 
					 | 
				
			||||||
        # the schema in one go if not already created, instead of going through an upgrade
 | 
					 | 
				
			||||||
        DB_VERSION="$(ironic-dbsync --config-file /etc/ironic/ironic.conf version)"
 | 
					 | 
				
			||||||
        if [[ "${DB_VERSION}" == "None" ]]; then
 | 
					 | 
				
			||||||
            ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Use the special value "unix" for unix sockets
 | 
					 | 
				
			||||||
export IRONIC_PRIVATE_PORT=${IRONIC_PRIVATE_PORT:-unix}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_ACCESS_PORT=${IRONIC_ACCESS_PORT:-6385}
 | 
					 | 
				
			||||||
export IRONIC_LISTEN_PORT=${IRONIC_LISTEN_PORT:-$IRONIC_ACCESS_PORT}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_ENABLE_DISCOVERY=${IRONIC_ENABLE_DISCOVERY:-${IRONIC_INSPECTOR_ENABLE_DISCOVERY:-false}}
 | 
					 | 
				
			||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
Listen {{ env.IPXE_TLS_PORT }}
 | 
					Listen 0.0.0.0:{{ env.IPXE_TLS_PORT }}
 | 
				
			||||||
 | 
					Listen [::]:{{ env.IPXE_TLS_PORT }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<VirtualHost *:{{ env.IPXE_TLS_PORT }}>
 | 
					<VirtualHost *:{{ env.IPXE_TLS_PORT }}>
 | 
				
			||||||
    ErrorLog /dev/stderr
 | 
					    ErrorLog /dev/stderr
 | 
				
			||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
Listen {{ env.VMEDIA_TLS_PORT }}
 | 
					Listen 0.0.0.0:{{ env.VMEDIA_TLS_PORT }}
 | 
				
			||||||
 | 
					Listen [::]:{{ env.VMEDIA_TLS_PORT }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<VirtualHost *:{{ env.VMEDIA_TLS_PORT }}>
 | 
					<VirtualHost *:{{ env.VMEDIA_TLS_PORT }}>
 | 
				
			||||||
    ErrorLog /dev/stderr
 | 
					    ErrorLog /dev/stderr
 | 
				
			||||||
@@ -10,12 +11,12 @@ Listen {{ env.VMEDIA_TLS_PORT }}
 | 
				
			|||||||
    SSLCertificateFile {{ env.IRONIC_VMEDIA_CERT_FILE }}
 | 
					    SSLCertificateFile {{ env.IRONIC_VMEDIA_CERT_FILE }}
 | 
				
			||||||
    SSLCertificateKeyFile {{ env.IRONIC_VMEDIA_KEY_FILE }}
 | 
					    SSLCertificateKeyFile {{ env.IRONIC_VMEDIA_KEY_FILE }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <Directory "/shared">
 | 
					    <Directory "/shared/html/">
 | 
				
			||||||
 | 
					        Options Indexes FollowSymLinks
 | 
				
			||||||
        AllowOverride None
 | 
					        AllowOverride None
 | 
				
			||||||
        Require all granted
 | 
					        Require all granted
 | 
				
			||||||
    </Directory>
 | 
					    </Directory>
 | 
				
			||||||
 | 
					    <Directory ~ "/shared/html/(redfish|ilo)/">
 | 
				
			||||||
    <Directory "/shared/html">
 | 
					 | 
				
			||||||
        Options Indexes FollowSymLinks
 | 
					        Options Indexes FollowSymLinks
 | 
				
			||||||
        AllowOverride None
 | 
					        AllowOverride None
 | 
				
			||||||
        Require all granted
 | 
					        Require all granted
 | 
				
			||||||
@@ -3,6 +3,7 @@ bind-dynamic
 | 
				
			|||||||
enable-tftp
 | 
					enable-tftp
 | 
				
			||||||
tftp-root=/shared/tftpboot
 | 
					tftp-root=/shared/tftpboot
 | 
				
			||||||
log-queries
 | 
					log-queries
 | 
				
			||||||
 | 
					dhcp-leasefile=/data/dnsmasq/dnsmasq.leases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Configure listening for DNS (0 disables DNS)
 | 
					# Configure listening for DNS (0 disables DNS)
 | 
				
			||||||
port={{ env.DNS_PORT }}
 | 
					port={{ env.DNS_PORT }}
 | 
				
			||||||
@@ -31,11 +32,11 @@ dhcp-match=ipxe,175
 | 
				
			|||||||
# Client is already running iPXE; move to next stage of chainloading
 | 
					# Client is already running iPXE; move to next stage of chainloading
 | 
				
			||||||
{%- if env.IPXE_TLS_SETUP == "true"  %}
 | 
					{%- if env.IPXE_TLS_SETUP == "true"  %}
 | 
				
			||||||
# iPXE with (U)EFI
 | 
					# iPXE with (U)EFI
 | 
				
			||||||
dhcp-boot=tag:efi,tag:ipxe,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/custom-ipxe/snponly.efi
 | 
					dhcp-boot=tag:efi,tag:ipxe,{{ env.IRONIC_HTTP_URL }}/custom-ipxe/snponly.efi
 | 
				
			||||||
# iPXE with BIOS
 | 
					# iPXE with BIOS
 | 
				
			||||||
dhcp-boot=tag:ipxe,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/custom-ipxe/undionly.kpxe
 | 
					dhcp-boot=tag:ipxe,{{ env.IRONIC_HTTP_URL }}/custom-ipxe/undionly.kpxe
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
dhcp-boot=tag:ipxe,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/boot.ipxe
 | 
					dhcp-boot=tag:ipxe,{{ env.IRONIC_HTTP_URL }}/boot.ipxe
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Note: Need to test EFI booting
 | 
					# Note: Need to test EFI booting
 | 
				
			||||||
@@ -59,8 +60,8 @@ ra-param={{ env.PROVISIONING_INTERFACE }},0,0
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
dhcp-vendorclass=set:pxe6,enterprise:343,PXEClient
 | 
					dhcp-vendorclass=set:pxe6,enterprise:343,PXEClient
 | 
				
			||||||
dhcp-userclass=set:ipxe6,iPXE
 | 
					dhcp-userclass=set:ipxe6,iPXE
 | 
				
			||||||
dhcp-option=tag:pxe6,option6:bootfile-url,tftp://{{ env.IRONIC_URL_HOST }}/snponly.efi
 | 
					dhcp-option=tag:pxe6,option6:bootfile-url,{{ env.IRONIC_TFTP_URL }}/snponly.efi
 | 
				
			||||||
dhcp-option=tag:ipxe6,option6:bootfile-url,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/boot.ipxe
 | 
					dhcp-option=tag:ipxe6,option6:bootfile-url,{{ env.IRONIC_HTTP_URL }}/boot.ipxe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# It can be used when setting DNS or GW variables.
 | 
					# It can be used when setting DNS or GW variables.
 | 
				
			||||||
{%- if env["GATEWAY_IP"] is undefined %}
 | 
					{%- if env["GATEWAY_IP"] is undefined %}
 | 
				
			||||||
@@ -12,11 +12,21 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
					{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
				
			||||||
Listen {{ env.IRONIC_LISTEN_PORT }}
 | 
					Listen 0.0.0.0:{{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
 | 
					Listen [::]:{{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
 <VirtualHost *:{{ env.IRONIC_LISTEN_PORT }}>
 | 
					 <VirtualHost *:{{ env.IRONIC_LISTEN_PORT }}>
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
Listen {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_LISTEN_PORT }}
 | 
					{% if env.ENABLE_IPV4 %}
 | 
				
			||||||
 <VirtualHost {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_LISTEN_PORT }}>
 | 
					Listen {{ env.IRONIC_IP }}:{{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					{% if env.ENABLE_IPV6 %}
 | 
				
			||||||
 | 
					Listen [{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					{% if env.IRONIC_URL_HOSTNAME is defined and env.IRONIC_URL_HOSTNAME|length %}
 | 
				
			||||||
 | 
					<VirtualHost {{ env.IRONIC_URL_HOSTNAME }}:{{ env.IRONIC_LISTEN_PORT }}>
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					<VirtualHost {% if env.ENABLE_IPV4 %}{{ env.IRONIC_IP }}:{{ env.IRONIC_LISTEN_PORT }}{% endif %} {% if env.ENABLE_IPV6 %}[{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}{% endif %}>
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {% if env.IRONIC_PRIVATE_PORT == "unix" %}
 | 
					    {% if env.IRONIC_PRIVATE_PORT == "unix" %}
 | 
				
			||||||
@@ -45,7 +55,7 @@ Listen {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_LISTEN_PORT }}
 | 
				
			|||||||
         {% if "IRONIC_HTPASSWD" in env and env.IRONIC_HTPASSWD | length %}
 | 
					         {% if "IRONIC_HTPASSWD" in env and env.IRONIC_HTPASSWD | length %}
 | 
				
			||||||
            AuthType Basic
 | 
					            AuthType Basic
 | 
				
			||||||
            AuthName "Restricted area"
 | 
					            AuthName "Restricted area"
 | 
				
			||||||
            AuthUserFile "/etc/ironic/htpasswd"
 | 
					            AuthUserFile {{ env.HTPASSWD_FILE }}
 | 
				
			||||||
            Require valid-user
 | 
					            Require valid-user
 | 
				
			||||||
         {% endif %}
 | 
					         {% endif %}
 | 
				
			||||||
    </Location>
 | 
					    </Location>
 | 
				
			||||||
@@ -17,4 +17,4 @@ LoadModule authn_core_module /usr/lib64/apache2/mod_authn_core.so
 | 
				
			|||||||
LoadModule auth_basic_module /usr/lib64/apache2/mod_auth_basic.so
 | 
					LoadModule auth_basic_module /usr/lib64/apache2/mod_auth_basic.so
 | 
				
			||||||
LoadModule authn_file_module /usr/lib64/apache2/mod_authn_file.so
 | 
					LoadModule authn_file_module /usr/lib64/apache2/mod_authn_file.so
 | 
				
			||||||
LoadModule authz_user_module /usr/lib64/apache2/mod_authz_user.so
 | 
					LoadModule authz_user_module /usr/lib64/apache2/mod_authz_user.so
 | 
				
			||||||
LoadModule access_compat_module /usr/lib64/apache2/mod_access_compat.so
 | 
					#LoadModule access_compat_module /usr/lib64/apache2/mod_access_compat.so
 | 
				
			||||||
@@ -1,10 +1,16 @@
 | 
				
			|||||||
ServerRoot "/etc/httpd"
 | 
					ServerRoot {{ env.HTTPD_DIR }}
 | 
				
			||||||
{%- if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
					{%- if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
				
			||||||
Listen {{ env.HTTP_PORT }}
 | 
					Listen 0.0.0.0:{{ env.HTTP_PORT }}
 | 
				
			||||||
 | 
					Listen [::]:{{ env.HTTP_PORT }}
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
Listen {{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}
 | 
					{% if env.ENABLE_IPV4 %}
 | 
				
			||||||
 | 
					Listen {{ env.IRONIC_IP }}:{{ env.HTTP_PORT }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
Include conf.modules.d/*.conf
 | 
					{% if env.ENABLE_IPV6 %}
 | 
				
			||||||
 | 
					Listen [{{ env.IRONIC_IPV6 }}]:{{ env.HTTP_PORT }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					Include /etc/httpd/conf.modules.d/*.conf
 | 
				
			||||||
User ironic-suse
 | 
					User ironic-suse
 | 
				
			||||||
Group ironic-suse
 | 
					Group ironic-suse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								ironic-image/ironic-config/inspector.ipxe.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ironic-image/ironic-config/inspector.ipxe.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					#!ipxe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:retry_boot
 | 
				
			||||||
 | 
					echo In inspector.ipxe
 | 
				
			||||||
 | 
					imgfree
 | 
				
			||||||
 | 
					# NOTE(dtantsur): keep inspection kernel params in [mdns]params in
 | 
				
			||||||
 | 
					# ironic-inspector-image and configuration in configure-ironic.sh
 | 
				
			||||||
 | 
					kernel --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.kernel ipa-insecure={{ env.IPA_INSECURE }} ipa-inspection-collectors={{ env.IRONIC_IPA_COLLECTORS }} systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-debug=1 ipa-enable-vlan-interfaces={{ env.IRONIC_ENABLE_VLAN_INTERFACES }} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 {{ env.INSPECTOR_EXTRA_ARGS }} initrd=ironic-python-agent-${buildarch}.initramfs {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} || goto retry_boot
 | 
				
			||||||
 | 
					initrd --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.initramfs || goto retry_boot
 | 
				
			||||||
 | 
					boot
 | 
				
			||||||
@@ -25,8 +25,15 @@ rpc_transport = none
 | 
				
			|||||||
use_stderr = true
 | 
					use_stderr = true
 | 
				
			||||||
# NOTE(dtantsur): the default md5 is not compatible with FIPS mode
 | 
					# NOTE(dtantsur): the default md5 is not compatible with FIPS mode
 | 
				
			||||||
hash_ring_algorithm = sha256
 | 
					hash_ring_algorithm = sha256
 | 
				
			||||||
 | 
					{% if env.ENABLE_IPV4 %}
 | 
				
			||||||
my_ip = {{ env.IRONIC_IP }}
 | 
					my_ip = {{ env.IRONIC_IP }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					{% if env.ENABLE_IPV6 %}
 | 
				
			||||||
 | 
					my_ipv6 = {{ env.IRONIC_IPV6 }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
host = {{ env.IRONIC_CONDUCTOR_HOST }}
 | 
					host = {{ env.IRONIC_CONDUCTOR_HOST }}
 | 
				
			||||||
 | 
					tempdir = {{ env.IRONIC_TMP_DATA_DIR }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# If a path to a certificate is defined, use that first for webserver
 | 
					# If a path to a certificate is defined, use that first for webserver
 | 
				
			||||||
{% if env.WEBSERVER_CACERT_FILE %}
 | 
					{% if env.WEBSERVER_CACERT_FILE %}
 | 
				
			||||||
@@ -49,6 +56,7 @@ deploy_logs_local_path = /shared/log/ironic/deploy
 | 
				
			|||||||
# retries here works around such problems without affecting the normal path.
 | 
					# retries here works around such problems without affecting the normal path.
 | 
				
			||||||
# See https://bugzilla.redhat.com/show_bug.cgi?id=1822763
 | 
					# See https://bugzilla.redhat.com/show_bug.cgi?id=1822763
 | 
				
			||||||
max_command_attempts = 30
 | 
					max_command_attempts = 30
 | 
				
			||||||
 | 
					certificates_path = {{ env.IRONIC_GEN_CERT_DIR }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[api]
 | 
					[api]
 | 
				
			||||||
{% if env.IRONIC_REVERSE_PROXY_SETUP == "true" %}
 | 
					{% if env.IRONIC_REVERSE_PROXY_SETUP == "true" %}
 | 
				
			||||||
@@ -63,7 +71,7 @@ port = {{ env.IRONIC_PRIVATE_PORT }}
 | 
				
			|||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
public_endpoint = {{ env.IRONIC_BASE_URL }}
 | 
					public_endpoint = {{ env.IRONIC_BASE_URL }}
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
host_ip = {% if env.LISTEN_ALL_INTERFACES | lower == "true" %}::{% else %}{{ env.IRONIC_IP }}{% endif %}
 | 
					host_ip = {{ env.IRONIC_HOST_IP }}
 | 
				
			||||||
port = {{ env.IRONIC_LISTEN_PORT }}
 | 
					port = {{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
					{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
				
			||||||
enable_ssl_api = true
 | 
					enable_ssl_api = true
 | 
				
			||||||
@@ -83,7 +91,11 @@ send_sensor_data = {{ env.SEND_SENSOR_DATA }}
 | 
				
			|||||||
# Power state is checked every 60 seconds and BMC activity should
 | 
					# Power state is checked every 60 seconds and BMC activity should
 | 
				
			||||||
# be avoided more often than once every sixty seconds.
 | 
					# be avoided more often than once every sixty seconds.
 | 
				
			||||||
send_sensor_data_interval = 160
 | 
					send_sensor_data_interval = 160
 | 
				
			||||||
bootloader = {{ env.IRONIC_BOOT_BASE_URL }}/uefi_esp-{{ env.DEPLOY_ARCHITECTURE }}.img
 | 
					{% if env.VMEDIA_TLS_PORT %}
 | 
				
			||||||
 | 
					bootloader = {{ env.IRONIC_HTTPS_VMEDIA_URL }}/uefi_esp-{{ env.DEPLOY_ARCHITECTURE }}.img
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					bootloader = {{ env.IRONIC_HTTP_URL }}/uefi_esp-{{ env.DEPLOY_ARCHITECTURE }}.img
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
verify_step_priority_override = management.clear_job_queue:90
 | 
					verify_step_priority_override = management.clear_job_queue:90
 | 
				
			||||||
# We don't use this feature, and it creates an additional load on the database
 | 
					# We don't use this feature, and it creates an additional load on the database
 | 
				
			||||||
node_history = False
 | 
					node_history = False
 | 
				
			||||||
@@ -95,16 +107,19 @@ deploy_kernel = file://{{ env.IRONIC_DEFAULT_KERNEL }}
 | 
				
			|||||||
{% if env.IRONIC_DEFAULT_RAMDISK is defined %}
 | 
					{% if env.IRONIC_DEFAULT_RAMDISK is defined %}
 | 
				
			||||||
deploy_ramdisk = file://{{ env.IRONIC_DEFAULT_RAMDISK }}
 | 
					deploy_ramdisk = file://{{ env.IRONIC_DEFAULT_RAMDISK }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					{% if env.DISABLE_DEEP_IMAGE_INSPECTION | lower == "true" %}
 | 
				
			||||||
 | 
					disable_deep_image_inspection = True
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[database]
 | 
					[database]
 | 
				
			||||||
{% if env.IRONIC_USE_MARIADB | lower == "false" %}
 | 
					{% if env.IRONIC_USE_MARIADB | lower == "true" %}
 | 
				
			||||||
connection = sqlite:////var/lib/ironic/ironic.sqlite
 | 
					connection = {{ env.MARIADB_CONNECTION }}
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					connection = {{ env.LOCAL_DB_URI }}
 | 
				
			||||||
# Synchronous mode is required for data integrity in case of operating system
 | 
					# Synchronous mode is required for data integrity in case of operating system
 | 
				
			||||||
# crash. In our case we restart the container from scratch, so we can save some
 | 
					# crash. In our case we restart the container from scratch, so we can save some
 | 
				
			||||||
# IO by not doing syncs all the time.
 | 
					# IO by not doing syncs all the time.
 | 
				
			||||||
sqlite_synchronous = False
 | 
					sqlite_synchronous = False
 | 
				
			||||||
{% else %}
 | 
					 | 
				
			||||||
connection = {{ env.MARIADB_CONNECTION }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[deploy]
 | 
					[deploy]
 | 
				
			||||||
@@ -112,15 +127,15 @@ default_boot_option = local
 | 
				
			|||||||
erase_devices_metadata_priority = 10
 | 
					erase_devices_metadata_priority = 10
 | 
				
			||||||
erase_devices_priority = 0
 | 
					erase_devices_priority = 0
 | 
				
			||||||
http_root = /shared/html/
 | 
					http_root = /shared/html/
 | 
				
			||||||
http_url = {{ env.IRONIC_BOOT_BASE_URL }}
 | 
					http_url = {% if env.VMEDIA_TLS_PORT %}{{ env.IRONIC_HTTPS_VMEDIA_URL }}{% else %}{{ env.IRONIC_HTTP_URL }}{% endif %}
 | 
				
			||||||
fast_track = {{ env.IRONIC_FAST_TRACK }}
 | 
					fast_track = {{ env.IRONIC_FAST_TRACK }}
 | 
				
			||||||
{% if env.IRONIC_BOOT_ISO_SOURCE %}
 | 
					{% if env.IRONIC_BOOT_ISO_SOURCE %}
 | 
				
			||||||
ramdisk_image_download_source = {{ env.IRONIC_BOOT_ISO_SOURCE }}
 | 
					ramdisk_image_download_source = {{ env.IRONIC_BOOT_ISO_SOURCE }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
{% if env.IRONIC_EXTERNAL_HTTP_URL %}
 | 
					{% if env.IRONIC_EXTERNAL_HTTP_URL %}
 | 
				
			||||||
external_http_url = {{ env.IRONIC_EXTERNAL_HTTP_URL }}
 | 
					external_http_url = {{ env.IRONIC_EXTERNAL_HTTP_URL }}
 | 
				
			||||||
{% elif env.IRONIC_VMEDIA_TLS_SETUP == "true" %}
 | 
					{% elif env.VMEDIA_TLS_PORT %}
 | 
				
			||||||
external_http_url = https://{{ env.IRONIC_URL_HOST }}:{{ env.VMEDIA_TLS_PORT }}
 | 
					external_http_url = {{ env.IRONIC_HTTPS_VMEDIA_URL }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
{% if env.IRONIC_EXTERNAL_CALLBACK_URL %}
 | 
					{% if env.IRONIC_EXTERNAL_CALLBACK_URL %}
 | 
				
			||||||
external_callback_url = {{ env.IRONIC_EXTERNAL_CALLBACK_URL }}
 | 
					external_callback_url = {{ env.IRONIC_EXTERNAL_CALLBACK_URL }}
 | 
				
			||||||
@@ -175,8 +190,8 @@ cipher_suite_versions = 3,17
 | 
				
			|||||||
# unauthenticated connections from other processes in the same host since the
 | 
					# unauthenticated connections from other processes in the same host since the
 | 
				
			||||||
# containers are in host networking.
 | 
					# containers are in host networking.
 | 
				
			||||||
auth_strategy = http_basic
 | 
					auth_strategy = http_basic
 | 
				
			||||||
http_basic_auth_user_file = /etc/ironic/htpasswd-rpc
 | 
					http_basic_auth_user_file = {{ env.IRONIC_RPC_HTPASSWD_FILE }}
 | 
				
			||||||
host_ip = {% if env.LISTEN_ALL_INTERFACES | lower == "true" %}::{% else %}{{ env.IRONIC_IP }}{% endif %}
 | 
					host_ip = {{ env.IRONIC_HOST_IP }}
 | 
				
			||||||
{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
					{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
				
			||||||
use_ssl = true
 | 
					use_ssl = true
 | 
				
			||||||
cafile = {{ env.IRONIC_CACERT_FILE }}
 | 
					cafile = {{ env.IRONIC_CACERT_FILE }}
 | 
				
			||||||
@@ -187,11 +202,6 @@ insecure = {{ env.IRONIC_INSECURE }}
 | 
				
			|||||||
[nova]
 | 
					[nova]
 | 
				
			||||||
send_power_notifications = false
 | 
					send_power_notifications = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[oslo_messaging_notifications]
 | 
					 | 
				
			||||||
driver = prometheus_exporter
 | 
					 | 
				
			||||||
location = /shared/ironic_prometheus_exporter
 | 
					 | 
				
			||||||
transport_url = fake://
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[pxe]
 | 
					[pxe]
 | 
				
			||||||
# NOTE(dtantsur): keep this value at least 3x lower than
 | 
					# NOTE(dtantsur): keep this value at least 3x lower than
 | 
				
			||||||
# [conductor]deploy_callback_timeout so that at least some retries happen.
 | 
					# [conductor]deploy_callback_timeout so that at least some retries happen.
 | 
				
			||||||
@@ -201,7 +211,7 @@ images_path = /shared/html/tmp
 | 
				
			|||||||
instance_master_path = /shared/html/master_images
 | 
					instance_master_path = /shared/html/master_images
 | 
				
			||||||
tftp_master_path = /shared/tftpboot/master_images
 | 
					tftp_master_path = /shared/tftpboot/master_images
 | 
				
			||||||
tftp_root = /shared/tftpboot
 | 
					tftp_root = /shared/tftpboot
 | 
				
			||||||
kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }}
 | 
					kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes
 | 
				
			||||||
# This makes networking boot templates generated even for nodes using local
 | 
					# This makes networking boot templates generated even for nodes using local
 | 
				
			||||||
# boot (the default), ensuring that they boot correctly even if they start
 | 
					# boot (the default), ensuring that they boot correctly even if they start
 | 
				
			||||||
# netbooting for some reason (e.g. with the noop management interface).
 | 
					# netbooting for some reason (e.g. with the noop management interface).
 | 
				
			||||||
@@ -214,14 +224,14 @@ ipxe_config_template = /tmp/ipxe_config.template
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[redfish]
 | 
					[redfish]
 | 
				
			||||||
use_swift = false
 | 
					use_swift = false
 | 
				
			||||||
kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }}
 | 
					kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ilo]
 | 
					[ilo]
 | 
				
			||||||
kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }}
 | 
					kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes
 | 
				
			||||||
use_web_server_for_images = true
 | 
					use_web_server_for_images = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[irmc]
 | 
					[irmc]
 | 
				
			||||||
kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }}
 | 
					kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[service_catalog]
 | 
					[service_catalog]
 | 
				
			||||||
endpoint_override = {{ env.IRONIC_BASE_URL }}
 | 
					endpoint_override = {{ env.IRONIC_BASE_URL }}
 | 
				
			||||||
@@ -1,68 +0,0 @@
 | 
				
			|||||||
[DEFAULT]
 | 
					 | 
				
			||||||
auth_strategy = noauth
 | 
					 | 
				
			||||||
debug = true
 | 
					 | 
				
			||||||
transport_url = fake://
 | 
					 | 
				
			||||||
use_stderr = true
 | 
					 | 
				
			||||||
{% if env.INSPECTOR_REVERSE_PROXY_SETUP == "true" %}
 | 
					 | 
				
			||||||
{% if env.IRONIC_INSPECTOR_PRIVATE_PORT == "unix" %}
 | 
					 | 
				
			||||||
listen_unix_socket = /shared/inspector.sock
 | 
					 | 
				
			||||||
# NOTE(dtantsur): this is not ideal, but since the socket is accessed from
 | 
					 | 
				
			||||||
# another container, we need to make it world-writeable.
 | 
					 | 
				
			||||||
listen_unix_socket_mode = 0666
 | 
					 | 
				
			||||||
{% else %}
 | 
					 | 
				
			||||||
listen_port = {{ env.IRONIC_INSPECTOR_PRIVATE_PORT }}
 | 
					 | 
				
			||||||
listen_address = 127.0.0.1
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% elif env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
					 | 
				
			||||||
listen_port = {{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
					 | 
				
			||||||
listen_address = ::
 | 
					 | 
				
			||||||
{% else %}
 | 
					 | 
				
			||||||
listen_port = {{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
					 | 
				
			||||||
listen_address = {{ env.IRONIC_IP }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
host = {{ env.IRONIC_IP }}
 | 
					 | 
				
			||||||
{% if env.IRONIC_INSPECTOR_TLS_SETUP == "true" and env.INSPECTOR_REVERSE_PROXY_SETUP == "false" %}
 | 
					 | 
				
			||||||
use_ssl = true
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[database]
 | 
					 | 
				
			||||||
connection = sqlite:////var/lib/ironic-inspector/ironic-inspector.db
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{% if env.IRONIC_INSPECTOR_ENABLE_DISCOVERY == "true" %}
 | 
					 | 
				
			||||||
[discovery]
 | 
					 | 
				
			||||||
enroll_node_driver = ipmi
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[ironic]
 | 
					 | 
				
			||||||
auth_type = none
 | 
					 | 
				
			||||||
endpoint_override = {{ env.IRONIC_BASE_URL }}
 | 
					 | 
				
			||||||
{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
					 | 
				
			||||||
cafile = {{ env.IRONIC_CACERT_FILE }}
 | 
					 | 
				
			||||||
insecure = {{ env.IRONIC_INSECURE }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[processing]
 | 
					 | 
				
			||||||
add_ports = all
 | 
					 | 
				
			||||||
always_store_ramdisk_logs = true
 | 
					 | 
				
			||||||
keep_ports = present
 | 
					 | 
				
			||||||
{% if env.IRONIC_INSPECTOR_ENABLE_DISCOVERY == "true" %}
 | 
					 | 
				
			||||||
node_not_found_hook = enroll
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
permit_active_introspection = true
 | 
					 | 
				
			||||||
power_off = false
 | 
					 | 
				
			||||||
processing_hooks = $default_processing_hooks,lldp_basic
 | 
					 | 
				
			||||||
ramdisk_logs_dir = /shared/log/ironic-inspector/ramdisk
 | 
					 | 
				
			||||||
store_data = database
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[pxe_filter]
 | 
					 | 
				
			||||||
driver = noop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[service_catalog]
 | 
					 | 
				
			||||||
auth_type = none
 | 
					 | 
				
			||||||
endpoint_override = {{ env.IRONIC_INSPECTOR_BASE_URL }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{% if env.IRONIC_INSPECTOR_TLS_SETUP == "true" and env.INSPECTOR_REVERSE_PROXY_SETUP == "false" %}
 | 
					 | 
				
			||||||
[ssl]
 | 
					 | 
				
			||||||
cert_file = {{ env.IRONIC_INSPECTOR_CERT_FILE }}
 | 
					 | 
				
			||||||
key_file = {{ env.IRONIC_INSPECTOR_KEY_FILE }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -eu -o pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
curl -sSf {{ env.PROBE_CURL_ARGS }} "{{ env.PROBE_URL }}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# TODO(dtantsur): when PROBE_KIND==readiness, try the conductor and driver API
 | 
					 | 
				
			||||||
# to make sure the conductor is ready. This requires having access to secrets
 | 
					 | 
				
			||||||
# since these endpoints are authenticated.
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This setting must go before configure-ironic since it has different defaults.
 | 
					 | 
				
			||||||
export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-false}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/configure-ironic.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ramdisk logs
 | 
					 | 
				
			||||||
mkdir -p /shared/log/ironic/deploy
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
run_ironic_dbsync
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
					 | 
				
			||||||
    # shellcheck disable=SC2034
 | 
					 | 
				
			||||||
    inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
 | 
					 | 
				
			||||||
        kill $(pgrep ironic)
 | 
					 | 
				
			||||||
    done &
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_ironic_auth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exec /usr/bin/ironic
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_DEPLOYMENT="API"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/configure-ironic.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_REVERSE_PROXY_SETUP=false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < /tmp/httpd-ironic-api.conf.j2 > /etc/httpd/conf.d/ironic.conf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/runhttpd
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_DEPLOYMENT="Conductor"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/configure-ironic.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ramdisk logs
 | 
					 | 
				
			||||||
mkdir -p /shared/log/ironic/deploy
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
run_ironic_dbsync
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
					 | 
				
			||||||
    # shellcheck disable=SC2034
 | 
					 | 
				
			||||||
    inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
 | 
					 | 
				
			||||||
        kill $(pgrep ironic)
 | 
					 | 
				
			||||||
    done &
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exec /usr/bin/ironic-conductor
 | 
					 | 
				
			||||||
@@ -1,12 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/configure-ironic.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
FLASK_RUN_HOST=${FLASK_RUN_HOST:-0.0.0.0}
 | 
					 | 
				
			||||||
FLASK_RUN_PORT=${FLASK_RUN_PORT:-9608}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_CONFIG="/etc/ironic/ironic.conf"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exec gunicorn -b "${FLASK_RUN_HOST}:${FLASK_RUN_PORT}" -w 4 \
 | 
					 | 
				
			||||||
    ironic_prometheus_exporter.app.wsgi:application
 | 
					 | 
				
			||||||
@@ -1,62 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CONFIG=/etc/ironic-inspector/ironic-inspector.conf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_INSPECTOR_ENABLE_DISCOVERY=${IRONIC_INSPECTOR_ENABLE_DISCOVERY:-false}
 | 
					 | 
				
			||||||
export INSPECTOR_REVERSE_PROXY_SETUP=${INSPECTOR_REVERSE_PROXY_SETUP:-false}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/tls-common.sh
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/ironic-common.sh
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/auth-common.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ "$USE_IRONIC_INSPECTOR" == "false" ]]; then
 | 
					 | 
				
			||||||
    echo "FATAL: ironic-inspector is disabled via USE_IRONIC_INSPECTOR"
 | 
					 | 
				
			||||||
    exit 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wait_for_interface_or_ip
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRONIC_INSPECTOR_PORT=${IRONIC_INSPECTOR_ACCESS_PORT}
 | 
					 | 
				
			||||||
if [[ "$IRONIC_INSPECTOR_TLS_SETUP" == "true" ]]; then
 | 
					 | 
				
			||||||
    if [[ "${INSPECTOR_REVERSE_PROXY_SETUP}" == "true" ]] && [[ "${IRONIC_INSPECTOR_PRIVATE_PORT}" != "unix" ]]; then
 | 
					 | 
				
			||||||
        IRONIC_INSPECTOR_PORT=$IRONIC_INSPECTOR_PRIVATE_PORT
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    export INSPECTOR_REVERSE_PROXY_SETUP="false" # If TLS is not used, we have no reason to use the reverse proxy
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_INSPECTOR_BASE_URL="${IRONIC_INSPECTOR_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_INSPECTOR_PORT}"
 | 
					 | 
				
			||||||
export IRONIC_BASE_URL="${IRONIC_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_ACCESS_PORT}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
build_j2_config()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    local CONFIG_FILE="$1"
 | 
					 | 
				
			||||||
    python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$CONFIG_FILE.j2"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Merge with the original configuration file from the package.
 | 
					 | 
				
			||||||
build_j2_config "$CONFIG" | crudini --merge "$CONFIG"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_inspector_auth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_client_basic_auth ironic "${CONFIG}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ironic-inspector-dbsync --config-file "${CONFIG}" upgrade
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ "$INSPECTOR_REVERSE_PROXY_SETUP" == "false" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
					 | 
				
			||||||
    # shellcheck disable=SC2034
 | 
					 | 
				
			||||||
    inotifywait -m -e delete_self "${IRONIC_INSPECTOR_CERT_FILE}" | while read -r file event; do
 | 
					 | 
				
			||||||
        kill $(pgrep ironic)
 | 
					 | 
				
			||||||
    done &
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Make sure ironic traffic bypasses any proxies
 | 
					 | 
				
			||||||
export NO_PROXY="${NO_PROXY:-},$IRONIC_IP"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC2086
 | 
					 | 
				
			||||||
exec /usr/bin/ironic-inspector
 | 
					 | 
				
			||||||
@@ -1,19 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ramdisk logs path
 | 
					 | 
				
			||||||
LOG_DIR="/shared/log/ironic/deploy"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The ironic container creates the directory, wait for
 | 
					 | 
				
			||||||
# it to exist before running inotifywait or it can fail causing
 | 
					 | 
				
			||||||
# a spurious restart
 | 
					 | 
				
			||||||
while [ ! -d "${LOG_DIR}" ]; do
 | 
					 | 
				
			||||||
  echo "Waiting for ${LOG_DIR}"
 | 
					 | 
				
			||||||
  sleep 5
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
inotifywait -m "${LOG_DIR}" -e close_write |
 | 
					 | 
				
			||||||
    while read -r path _action file; do
 | 
					 | 
				
			||||||
        echo "************ Contents of ${path}/${file} ramdisk log file bundle **************"
 | 
					 | 
				
			||||||
        tar -xOzvvf "${path}/${file}" | sed -e "s/^/${file}: /"
 | 
					 | 
				
			||||||
        rm -f "${path}/${file}"
 | 
					 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
							
								
								
									
										97
									
								
								ironic-image/scripts/auth-common.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								ironic-image/scripts/auth-common.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_REVERSE_PROXY_SETUP=${IRONIC_REVERSE_PROXY_SETUP:-false}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CUSTOM_CONFIG_DIR is also managed in the ironic-common.sh, in order to
 | 
				
			||||||
 | 
					# keep auth-common and ironic-common separate (to stay consistent with the
 | 
				
			||||||
 | 
					# architecture) part of the ironic-common logic had to be duplicated
 | 
				
			||||||
 | 
					CUSTOM_CONFIG_DIR="${CUSTOM_CONFIG_DIR:-/conf}"
 | 
				
			||||||
 | 
					IRONIC_CONF_DIR="${CUSTOM_CONFIG_DIR}/ironic"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Backward compatibility
 | 
				
			||||||
 | 
					if [[ "${IRONIC_DEPLOYMENT:-}" == "Conductor" ]]; then
 | 
				
			||||||
 | 
					    export IRONIC_EXPOSE_JSON_RPC=true
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    export IRONIC_EXPOSE_JSON_RPC="${IRONIC_EXPOSE_JSON_RPC:-false}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRONIC_HTPASSWD_FILE="${IRONIC_CONF_DIR}/htpasswd"
 | 
				
			||||||
 | 
					export IRONIC_RPC_HTPASSWD_FILE="${IRONIC_HTPASSWD_FILE}-rpc"
 | 
				
			||||||
 | 
					if [[ -f "/auth/ironic/htpasswd" ]]; then
 | 
				
			||||||
 | 
					    IRONIC_HTPASSWD=$(</auth/ironic/htpasswd)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [[ -f "/auth/ironic-rpc/htpasswd" ]]; then
 | 
				
			||||||
 | 
					    IRONIC_RPC_HTPASSWD=$(</auth/ironic-rpc/htpasswd)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					export IRONIC_HTPASSWD=${IRONIC_HTPASSWD:-${HTTP_BASIC_HTPASSWD:-}}
 | 
				
			||||||
 | 
					export IRONIC_RPC_HTPASSWD=${IRONIC_RPC_HTPASSWD:-${IRONIC_HTPASSWD}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -n "${MARIADB_PASSWORD:-}" ]]; then
 | 
				
			||||||
 | 
					    echo "WARNING: passing MARIADB_PASSWORD is deprecated, mount a secret under /auth/mariadb instead"
 | 
				
			||||||
 | 
					elif [[ -f /auth/mariadb/password ]]; then
 | 
				
			||||||
 | 
					    MARIADB_PASSWORD=$(</auth/mariadb/password)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -z "${MARIADB_USER:-}" ]] && [[ -f /auth/mariadb/username ]]; then
 | 
				
			||||||
 | 
					    MARIADB_USER=$(</auth/mariadb/username)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRONIC_CONFIG="${IRONIC_CONF_DIR}/ironic.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_json_rpc_auth()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ "${IRONIC_EXPOSE_JSON_RPC}" != "true" ]]; then
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local auth_config_file="/auth/ironic-rpc/auth-config"
 | 
				
			||||||
 | 
					    local username_file="/auth/ironic-rpc/username"
 | 
				
			||||||
 | 
					    local password_file="/auth/ironic-rpc/password"
 | 
				
			||||||
 | 
					    if [[ -f "${username_file}" ]] && [[ -f "${password_file}" ]]; then
 | 
				
			||||||
 | 
					        crudini --set "${IRONIC_CONFIG}" json_rpc username "$(<${username_file})"
 | 
				
			||||||
 | 
					        set +x
 | 
				
			||||||
 | 
					        crudini --set "${IRONIC_CONFIG}" json_rpc password "$(<${password_file})"
 | 
				
			||||||
 | 
					        set -x
 | 
				
			||||||
 | 
					    elif [[ -f "${auth_config_file}" ]]; then
 | 
				
			||||||
 | 
					        echo "WARNING: using auth-config is deprecated, mount a secret directly"
 | 
				
			||||||
 | 
					        # Merge configurations in the "auth" directory into the default ironic configuration file
 | 
				
			||||||
 | 
					        crudini --merge "${IRONIC_CONFIG}" < "${auth_config_file}"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        echo "FATAL: no client-side credentials provided for JSON RPC"
 | 
				
			||||||
 | 
					        echo "HINT: mount a secret with username and password fields under /auth/ironic-rpc"
 | 
				
			||||||
 | 
					        exit 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ -z "${IRONIC_RPC_HTPASSWD}" ]]; then
 | 
				
			||||||
 | 
					        if [[ -f "${username_file}" ]] && [[ -f "${password_file}" ]]; then
 | 
				
			||||||
 | 
					            htpasswd -c -i -B "${IRONIC_RPC_HTPASSWD_FILE}" "$(<${username_file})" <"${password_file}"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            echo "FATAL: enabling JSON RPC requires authentication"
 | 
				
			||||||
 | 
					            echo "HINT: mount a secret with either username and password or htpasswd under /auth/ironic-rpc"
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        printf "%s\n" "${IRONIC_RPC_HTPASSWD}" > "${IRONIC_RPC_HTPASSWD_FILE}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_ironic_auth()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    # Configure HTTP basic auth for API server
 | 
				
			||||||
 | 
					    if [[ -n "${IRONIC_HTPASSWD}" ]]; then
 | 
				
			||||||
 | 
					        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
				
			||||||
 | 
					        if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "false" ]]; then
 | 
				
			||||||
 | 
					            crudini --set "${IRONIC_CONFIG}" DEFAULT auth_strategy http_basic
 | 
				
			||||||
 | 
					            crudini --set "${IRONIC_CONFIG}" DEFAULT http_basic_auth_user_file "${IRONIC_HTPASSWD_FILE}"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					write_htpasswd_files()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ -n "${IRONIC_HTPASSWD:-}" ]]; then
 | 
				
			||||||
 | 
					        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										68
									
								
								ironic-image/configure-ironic.sh → ironic-image/scripts/configure-ironic.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										68
									
								
								ironic-image/configure-ironic.sh → ironic-image/scripts/configure-ironic.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -3,6 +3,7 @@
 | 
				
			|||||||
set -euxo pipefail
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IRONIC_EXTERNAL_IP="${IRONIC_EXTERNAL_IP:-}"
 | 
					IRONIC_EXTERNAL_IP="${IRONIC_EXTERNAL_IP:-}"
 | 
				
			||||||
 | 
					export VMEDIA_TLS_PORT="${VMEDIA_TLS_PORT:-}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Define the VLAN interfaces to be included in introspection report, e.g.
 | 
					# Define the VLAN interfaces to be included in introspection report, e.g.
 | 
				
			||||||
#   all - all VLANs on all interfaces using LLDP information
 | 
					#   all - all VLANs on all interfaces using LLDP information
 | 
				
			||||||
@@ -19,10 +20,11 @@ export IRONIC_ENABLE_VLAN_INTERFACES=${IRONIC_ENABLE_VLAN_INTERFACES:-${IRONIC_I
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export HTTP_PORT=${HTTP_PORT:-80}
 | 
					export HTTP_PORT=${HTTP_PORT:-80}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-true}
 | 
					if [[ "${IRONIC_USE_MARIADB}" == true ]]; then
 | 
				
			||||||
 | 
					    if [[ -z "${MARIADB_PASSWORD:-}" ]]; then
 | 
				
			||||||
if [[ "$IRONIC_USE_MARIADB" == "true" ]]; then
 | 
					        echo "FATAL: IRONIC_USE_MARIADB requires password, mount a secret under /auth/mariadb"
 | 
				
			||||||
    MARIADB_PASSWORD=${MARIADB_PASSWORD}
 | 
					        exit 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
    MARIADB_DATABASE=${MARIADB_DATABASE:-ironic}
 | 
					    MARIADB_DATABASE=${MARIADB_DATABASE:-ironic}
 | 
				
			||||||
    MARIADB_USER=${MARIADB_USER:-ironic}
 | 
					    MARIADB_USER=${MARIADB_USER:-ironic}
 | 
				
			||||||
    MARIADB_HOST=${MARIADB_HOST:-127.0.0.1}
 | 
					    MARIADB_HOST=${MARIADB_HOST:-127.0.0.1}
 | 
				
			||||||
@@ -32,13 +34,9 @@ if [[ "$IRONIC_USE_MARIADB" == "true" ]]; then
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO(dtantsur): remove the explicit default once we get
 | 
					# zero makes it do cpu number detection on Ironic side
 | 
				
			||||||
# https://review.opendev.org/761185 in the repositories
 | 
					export NUMWORKERS=${NUMWORKERS:-0}
 | 
				
			||||||
NUMPROC="$(grep -c "^processor" /proc/cpuinfo)"
 | 
					
 | 
				
			||||||
if [[ "$NUMPROC" -lt 4 ]]; then
 | 
					 | 
				
			||||||
    NUMPROC=4
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
export NUMWORKERS=${NUMWORKERS:-$NUMPROC}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Whether to enable fast_track provisioning or not
 | 
					# Whether to enable fast_track provisioning or not
 | 
				
			||||||
export IRONIC_FAST_TRACK=${IRONIC_FAST_TRACK:-true}
 | 
					export IRONIC_FAST_TRACK=${IRONIC_FAST_TRACK:-true}
 | 
				
			||||||
@@ -54,11 +52,21 @@ export IRONIC_IPA_COLLECTORS=${IRONIC_IPA_COLLECTORS:-default,logs}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
wait_for_interface_or_ip
 | 
					wait_for_interface_or_ip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$(echo "$LISTEN_ALL_INTERFACES" | tr '[:upper:]' '[:lower:]')" == "true" ]]; then
 | 
				
			||||||
 | 
					export IRONIC_HOST_IP="::"
 | 
				
			||||||
 | 
					elif [[ -n "${ENABLE_IPV6}" ]]; then
 | 
				
			||||||
 | 
					export IRONIC_HOST_IP="$IRONIC_IPV6"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					export IRONIC_HOST_IP="$IRONIC_IP"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "${VMEDIA_TLS_PORT}" ]]; then
 | 
				
			||||||
 | 
					   export IRONIC_HTTPS_VMEDIA_URL="https://${IRONIC_URL_HOST}:${VMEDIA_TLS_PORT}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Hostname to use for the current conductor instance.
 | 
					# Hostname to use for the current conductor instance.
 | 
				
			||||||
export IRONIC_CONDUCTOR_HOST=${IRONIC_CONDUCTOR_HOST:-${IRONIC_URL_HOST}}
 | 
					export IRONIC_CONDUCTOR_HOST=${IRONIC_CONDUCTOR_HOST:-${IRONIC_URL_HOST}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export IRONIC_BASE_URL=${IRONIC_BASE_URL:-"${IRONIC_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_ACCESS_PORT}"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -n "$IRONIC_EXTERNAL_IP" ]]; then
 | 
					if [[ -n "$IRONIC_EXTERNAL_IP" ]]; then
 | 
				
			||||||
    export IRONIC_EXTERNAL_CALLBACK_URL=${IRONIC_EXTERNAL_CALLBACK_URL:-"${IRONIC_SCHEME}://${IRONIC_EXTERNAL_IP}:${IRONIC_ACCESS_PORT}"}
 | 
					    export IRONIC_EXTERNAL_CALLBACK_URL=${IRONIC_EXTERNAL_CALLBACK_URL:-"${IRONIC_SCHEME}://${IRONIC_EXTERNAL_IP}:${IRONIC_ACCESS_PORT}"}
 | 
				
			||||||
    if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
					    if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
@@ -74,9 +82,9 @@ if [[ -f "${IMAGE_CACHE_PREFIX}.kernel" ]] && [[ -f "${IMAGE_CACHE_PREFIX}.initr
 | 
				
			|||||||
    export IRONIC_DEFAULT_RAMDISK="${IMAGE_CACHE_PREFIX}.initramfs"
 | 
					    export IRONIC_DEFAULT_RAMDISK="${IMAGE_CACHE_PREFIX}.initramfs"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ -f /etc/ironic/ironic.conf ]]; then
 | 
					if [[ -f "${IRONIC_CONF_DIR}/ironic.conf" ]]; then
 | 
				
			||||||
    # Make a copy of the original supposed empty configuration file
 | 
					    # Make a copy of the original supposed empty configuration file
 | 
				
			||||||
    cp /etc/ironic/ironic.conf /etc/ironic/ironic.conf_orig
 | 
					    cp "${IRONIC_CONF_DIR}/ironic.conf" "${IRONIC_CONF_DIR}/ironic.conf.orig"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# oslo.config also supports Config Opts From Environment, log them to stdout
 | 
					# oslo.config also supports Config Opts From Environment, log them to stdout
 | 
				
			||||||
@@ -84,9 +92,6 @@ echo 'Options set from Environment variables'
 | 
				
			|||||||
env | grep "^OS_" || true
 | 
					env | grep "^OS_" || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mkdir -p /shared/html
 | 
					mkdir -p /shared/html
 | 
				
			||||||
mkdir -p /shared/ironic_prometheus_exporter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_json_rpc_auth
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ -f /proc/sys/crypto/fips_enabled ]]; then
 | 
					if [[ -f /proc/sys/crypto/fips_enabled ]]; then
 | 
				
			||||||
    ENABLE_FIPS_IPA=$(cat /proc/sys/crypto/fips_enabled)
 | 
					    ENABLE_FIPS_IPA=$(cat /proc/sys/crypto/fips_enabled)
 | 
				
			||||||
@@ -94,26 +99,17 @@ if [[ -f /proc/sys/crypto/fips_enabled ]]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The original ironic.conf is empty, and can be found in ironic.conf_orig
 | 
					# The original ironic.conf is empty, and can be found in ironic.conf_orig
 | 
				
			||||||
render_j2_config /etc/ironic/ironic.conf.j2 /etc/ironic/ironic.conf
 | 
					render_j2_config "/etc/ironic/ironic.conf.j2" \
 | 
				
			||||||
 | 
					    "${IRONIC_CONF_DIR}/ironic.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
configure_client_basic_auth ironic-rpc
 | 
					configure_json_rpc_auth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Make sure ironic traffic bypasses any proxies
 | 
					# Make sure ironic traffic bypasses any proxies
 | 
				
			||||||
export NO_PROXY="${NO_PROXY:-},$IRONIC_IP"
 | 
					export NO_PROXY="${NO_PROXY:-}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PROBE_CURL_ARGS=
 | 
					if [[ -n "$IRONIC_IPV6" ]]; then
 | 
				
			||||||
if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
					export NO_PROXY="${NO_PROXY},${IRONIC_IPV6}"
 | 
				
			||||||
    if [[ "${IRONIC_PRIVATE_PORT}" == "unix" ]]; then
 | 
					fi
 | 
				
			||||||
        PROBE_URL="http://127.0.0.1:6385"
 | 
					if [[ -n "$IRONIC_IP" ]]; then
 | 
				
			||||||
        PROBE_CURL_ARGS="--unix-socket /shared/ironic.sock"
 | 
					export NO_PROXY="${NO_PROXY},${IRONIC_IP}"
 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        PROBE_URL="http://127.0.0.1:${IRONIC_PRIVATE_PORT}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
        PROBE_URL="${IRONIC_BASE_URL}"
 | 
					 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
export PROBE_CURL_ARGS
 | 
					 | 
				
			||||||
export PROBE_URL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PROBE_KIND=readiness render_j2_config /bin/ironic-probe.j2 /bin/ironic-readiness
 | 
					 | 
				
			||||||
PROBE_KIND=liveness render_j2_config /bin/ironic-probe.j2 /bin/ironic-liveness
 | 
					 | 
				
			||||||
							
								
								
									
										295
									
								
								ironic-image/scripts/ironic-common.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										295
									
								
								ironic-image/scripts/ironic-common.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,295 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Export IRONIC_IP to avoid needing to lean on IRONIC_URL_HOST for consumption in
 | 
				
			||||||
 | 
					# e.g. dnsmasq configuration
 | 
				
			||||||
 | 
					export IRONIC_IP="${IRONIC_IP:-}"
 | 
				
			||||||
 | 
					IRONIC_IPV6="${IRONIC_IPV6:-}"
 | 
				
			||||||
 | 
					PROVISIONING_INTERFACE="${PROVISIONING_INTERFACE:-}"
 | 
				
			||||||
 | 
					PROVISIONING_IP="${PROVISIONING_IP:-}"
 | 
				
			||||||
 | 
					PROVISIONING_MACS="${PROVISIONING_MACS:-}"
 | 
				
			||||||
 | 
					IRONIC_URL_HOSTNAME="${IRONIC_URL_HOSTNAME:-}"
 | 
				
			||||||
 | 
					IPXE_CUSTOM_FIRMWARE_DIR="${IPXE_CUSTOM_FIRMWARE_DIR:-/shared/custom_ipxe_firmware}"
 | 
				
			||||||
 | 
					CUSTOM_CONFIG_DIR="${CUSTOM_CONFIG_DIR:-/conf}"
 | 
				
			||||||
 | 
					CUSTOM_DATA_DIR="${CUSTOM_DATA_DIR:-/data}"
 | 
				
			||||||
 | 
					export DNSMASQ_CONF_DIR="${CUSTOM_CONFIG_DIR}/dnsmasq"
 | 
				
			||||||
 | 
					export DNSMASQ_DATA_DIR="${CUSTOM_DATA_DIR}/dnsmasq"
 | 
				
			||||||
 | 
					export DNSMASQ_TEMP_DIR="${CUSTOM_CONFIG_DIR}/dnsmasq"
 | 
				
			||||||
 | 
					export HTTPD_DIR="${CUSTOM_CONFIG_DIR}/httpd"
 | 
				
			||||||
 | 
					export HTTPD_CONF_DIR="${HTTPD_DIR}/conf"
 | 
				
			||||||
 | 
					export HTTPD_CONF_DIR_D="${HTTPD_DIR}/conf.d"
 | 
				
			||||||
 | 
					export IRONIC_CONF_DIR="${CUSTOM_CONFIG_DIR}/ironic"
 | 
				
			||||||
 | 
					export IRONIC_DB_DIR="${CUSTOM_DATA_DIR}/db"
 | 
				
			||||||
 | 
					export IRONIC_GEN_CERT_DIR="${CUSTOM_DATA_DIR}/auto_gen_certs"
 | 
				
			||||||
 | 
					export IRONIC_TMP_DATA_DIR="${CUSTOM_DATA_DIR}/tmp"
 | 
				
			||||||
 | 
					export PROBE_CONF_DIR="${CUSTOM_CONFIG_DIR}/probes"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p "${IRONIC_CONF_DIR}" "${PROBE_CONF_DIR}" "${HTTPD_CONF_DIR}" \
 | 
				
			||||||
 | 
					    "${HTTPD_CONF_DIR_D}" "${DNSMASQ_CONF_DIR}" "${DNSMASQ_TEMP_DIR}" \
 | 
				
			||||||
 | 
					    "${IRONIC_DB_DIR}" "${IRONIC_GEN_CERT_DIR}" "${DNSMASQ_DATA_DIR}" \
 | 
				
			||||||
 | 
					    "${IRONIC_TMP_DATA_DIR}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export HTPASSWD_FILE="${IRONIC_CONF_DIR}/htpasswd"
 | 
				
			||||||
 | 
					export LOCAL_DB_URI="sqlite:///${IRONIC_DB_DIR}/ironic.sqlite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-false}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					get_ip_of_hostname()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ "$#" -ne 2 ]]; then
 | 
				
			||||||
 | 
					        echo "${FUNCNAME}: two parameters required, $# provided" >&2
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    case $2 in
 | 
				
			||||||
 | 
					        4)
 | 
				
			||||||
 | 
					            QUERY="a";;
 | 
				
			||||||
 | 
					        6)
 | 
				
			||||||
 | 
					            QUERY="aaaa";;
 | 
				
			||||||
 | 
					        *)
 | 
				
			||||||
 | 
					            echo "${FUNCNAME}: the second parameter should be [a|aaaa] for A and AAAA records"
 | 
				
			||||||
 | 
					            return 1;;
 | 
				
			||||||
 | 
					    esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local HOSTNAME=$1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo $(nslookup -type=${QUERY} "${HOSTNAME}" | tail -n2 | grep -w "Address:" | cut -d " " -f2)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					get_interface_of_ip()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    local IP_VERS=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ "$#" -gt 2 ]]; then
 | 
				
			||||||
 | 
					        echo "${FUNCNAME}: too many parameters" >&2
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ "$#" -eq 2 ]]; then
 | 
				
			||||||
 | 
					        case $2 in
 | 
				
			||||||
 | 
					        4|6)
 | 
				
			||||||
 | 
					            local IP_VERS="-${2}"
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					        *)
 | 
				
			||||||
 | 
					            echo "${FUNCNAME}: the second parameter should be [4|6] (or missing for both)" >&2
 | 
				
			||||||
 | 
					            return 2
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					        esac
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local IP_ADDR=$1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Convert the address using ipcalc which strips out the subnet.
 | 
				
			||||||
 | 
					    # For IPv6 addresses, this will give the short-form address
 | 
				
			||||||
 | 
					    IP_ADDR="$(ipcalc "${IP_ADDR}" | grep "^Address:" | awk '{print $2}')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo $(ip ${IP_VERS} -br addr show scope global | grep -i " ${IP_ADDR}/" | cut -f 1 -d ' ' | cut -f 1 -d '@')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					get_ip_of_interface()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    local IP_VERS=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ "$#" -gt 2 ]]; then
 | 
				
			||||||
 | 
					        echo "${FUNCNAME}: too many parameters" >&2
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ "$#" -eq 2 ]]; then
 | 
				
			||||||
 | 
					        case $2 in
 | 
				
			||||||
 | 
					        4|6)
 | 
				
			||||||
 | 
					            local IP_VERS="-${2}"
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					        *)
 | 
				
			||||||
 | 
					            echo "${FUNCNAME}: the second parameter should be [4|6] (or missing for both)" >&2
 | 
				
			||||||
 | 
					            return 2
 | 
				
			||||||
 | 
					            ;;
 | 
				
			||||||
 | 
					        esac
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local IFACE=$1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo $(ip ${IP_VERS} -br addr show scope global up dev ${IFACE} | awk '{print $3}' | sed -e 's%/.*%%' | head -n 1)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					get_provisioning_interface()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ -n "$PROVISIONING_INTERFACE" ]]; then
 | 
				
			||||||
 | 
					        # don't override the PROVISIONING_INTERFACE if one is provided
 | 
				
			||||||
 | 
					        echo "$PROVISIONING_INTERFACE"
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local interface=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for mac in ${PROVISIONING_MACS//,/ }; do
 | 
				
			||||||
 | 
					        if ip -br link show up | grep -i "$mac" &>/dev/null; then
 | 
				
			||||||
 | 
					            interface="$(ip -br link show up | grep -i "$mac" | cut -f 1 -d ' ' | cut -f 1 -d '@')"
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo "$interface"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROVISIONING_INTERFACE="$(get_provisioning_interface)"
 | 
				
			||||||
 | 
					export PROVISIONING_INTERFACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export LISTEN_ALL_INTERFACES="${LISTEN_ALL_INTERFACES:-true}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Wait for the interface or IP to be up, sets $IRONIC_IP
 | 
				
			||||||
 | 
					wait_for_interface_or_ip()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    # If $PROVISIONING_IP is specified, then we wait for that to become
 | 
				
			||||||
 | 
					    # available on an interface, otherwise we look at $PROVISIONING_INTERFACE
 | 
				
			||||||
 | 
					    # for an IP
 | 
				
			||||||
 | 
					    if [[ -n "${PROVISIONING_IP}" ]]; then
 | 
				
			||||||
 | 
					        local IFACE_OF_IP=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        until [[ -n "$IFACE_OF_IP" ]]; do
 | 
				
			||||||
 | 
					            echo "Waiting for ${PROVISIONING_IP} to be configured on an interface..."
 | 
				
			||||||
 | 
					            IFACE_OF_IP="$(get_interface_of_ip "${PROVISIONING_IP}")"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        echo "Found $PROVISIONING_IP on interface \"${IFACE_OF_IP}\"!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        export PROVISIONING_INTERFACE="$IFACE_OF_IP"
 | 
				
			||||||
 | 
						# If the IP contains a colon, then it's an IPv6 address
 | 
				
			||||||
 | 
					        if [[ "$PROVISIONING_IP" =~ .*:.* ]]; then
 | 
				
			||||||
 | 
					            export IRONIC_IPV6="$PROVISIONING_IP"
 | 
				
			||||||
 | 
					            export IRONIC_IP=""
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            export IRONIC_IP="$PROVISIONING_IP"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    elif [[ -n "${IRONIC_IP}" ]]; then
 | 
				
			||||||
 | 
					        if [[ "$IRONIC_IP" =~ .*:.* ]]; then
 | 
				
			||||||
 | 
					            export IRONIC_IPV6="$IRONIC_IP"
 | 
				
			||||||
 | 
					            export IRONIC_IP=""
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    elif [[ -n "${PROVISIONING_INTERFACE}" ]]; then
 | 
				
			||||||
 | 
					        until [[ -n "$IRONIC_IPV6" ]] || [[ -n "$IRONIC_IP" ]]; do
 | 
				
			||||||
 | 
					            echo "Waiting for ${PROVISIONING_INTERFACE} interface to be configured..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            IRONIC_IPV6="$(get_ip_of_interface "${PROVISIONING_INTERFACE}" 6)"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            IRONIC_IP="$(get_ip_of_interface "${PROVISIONING_INTERFACE}" 4)"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if [[ -n "$IRONIC_IPV6" ]]; then
 | 
				
			||||||
 | 
					            echo "Found $IRONIC_IPV6 on interface \"${PROVISIONING_INTERFACE}\"!"
 | 
				
			||||||
 | 
						    export IRONIC_IPV6
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        if [[ -n "$IRONIC_IP" ]]; then
 | 
				
			||||||
 | 
					            echo "Found $IRONIC_IP on interface \"${PROVISIONING_INTERFACE}\"!"
 | 
				
			||||||
 | 
						    export IRONIC_IP
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    elif [[ -n "$IRONIC_URL_HOSTNAME" ]]; then
 | 
				
			||||||
 | 
					        local IPV6_IFACE=""
 | 
				
			||||||
 | 
					        local IPV4_IFACE=""
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # we should get at least one IP address
 | 
				
			||||||
 | 
					        until [[ -n "$IPV6_IFACE" ]] || [[ -n "$IPV4_IFACE" ]]; do
 | 
				
			||||||
 | 
					            local IPV6_RECORD=""
 | 
				
			||||||
 | 
					            local IPV4_RECORD=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            IPV6_RECORD="$(get_ip_of_hostname "${IRONIC_URL_HOSTNAME}" 6)"
 | 
				
			||||||
 | 
					            IPV4_RECORD="$(get_ip_of_hostname "${IRONIC_URL_HOSTNAME}" 4)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # We couldn't get any IP
 | 
				
			||||||
 | 
					            if [[ -z "$IPV4_RECORD" ]] && [[ -z "$IPV6_RECORD" ]]; then
 | 
				
			||||||
 | 
					                echo "${FUNCNAME}: no valid IP found for hostname ${IRONIC_URL_HOSTNAME}" >&2
 | 
				
			||||||
 | 
					                return 1
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            echo "Waiting for ${IPV6_RECORD} to be configured on an interface"
 | 
				
			||||||
 | 
					            IPV6_IFACE="$(get_interface_of_ip "${IPV6_RECORD}" 6)"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            echo "Waiting for ${IPV4_RECORD} to be configured on an interface"
 | 
				
			||||||
 | 
					            IPV4_IFACE="$(get_interface_of_ip "${IPV4_RECORD}" 4)"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Add some debugging output
 | 
				
			||||||
 | 
					        if [[ -n "$IPV6_IFACE" ]]; then
 | 
				
			||||||
 | 
					            echo "Found $IPV6_RECORD on interface \"${IPV6_IFACE}\"!"
 | 
				
			||||||
 | 
					            export IRONIC_IPV6="$IPV6_RECORD"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        if [[ -n "$IPV4_IFACE" ]]; then
 | 
				
			||||||
 | 
					            echo "Found $IPV4_RECORD on interface \"${IPV4_IFACE}\"!"
 | 
				
			||||||
 | 
					            export IRONIC_IP="$IPV4_RECORD"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Make sure both IPs are asigned to the same interface
 | 
				
			||||||
 | 
					        if [[ -n "$IPV6_IFACE" ]] && [[ -n "$IPV4_IFACE" ]] && [[ "$IPV6_IFACE" != "$IPV4_IFACE" ]]; then
 | 
				
			||||||
 | 
					            echo "Warning, the IPv4 and IPv6 addresses from \"${HOSTNAME}\" are assigned to different " \
 | 
				
			||||||
 | 
					            "interfaces (\"${IPV6_IFACE}\" and \"${IPV4_IFACE}\")" >&2
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        echo "Cannot determine an interface or an IP for binding and creating URLs"
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Define the URLs based on the what we have found,
 | 
				
			||||||
 | 
					    # prioritize IPv6 for IRONIC_URL_HOST
 | 
				
			||||||
 | 
					    if [[ -n "$IRONIC_IP" ]]; then
 | 
				
			||||||
 | 
					        export ENABLE_IPV4=yes
 | 
				
			||||||
 | 
					        export IRONIC_URL_HOST="$IRONIC_IP"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    if [[ -n "$IRONIC_IPV6" ]]; then
 | 
				
			||||||
 | 
					        export ENABLE_IPV6=yes
 | 
				
			||||||
 | 
					        export IRONIC_URL_HOST="[${IRONIC_IPV6}]" # The HTTP host needs surrounding with brackets
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Once determined if we have IPv4 and/or IPv6, override the hostname if provided
 | 
				
			||||||
 | 
					    if [[ -n "$IRONIC_URL_HOSTNAME" ]]; then
 | 
				
			||||||
 | 
					        IRONIC_URL_HOST=$IRONIC_URL_HOSTNAME
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Avoid having to construct full URL multiple times while allowing
 | 
				
			||||||
 | 
					    # the override of IRONIC_HTTP_URL for environments in which IRONIC_IP
 | 
				
			||||||
 | 
					    # is unreachable from hosts being provisioned.
 | 
				
			||||||
 | 
					    export IRONIC_HTTP_URL="${IRONIC_HTTP_URL:-http://${IRONIC_URL_HOST}:${HTTP_PORT}}"
 | 
				
			||||||
 | 
					    export IRONIC_TFTP_URL="${IRONIC_TFTP_URL:-tftp://${IRONIC_URL_HOST}}"
 | 
				
			||||||
 | 
					    export IRONIC_BASE_URL=${IRONIC_BASE_URL:-"${IRONIC_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_ACCESS_PORT}"}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					render_j2_config()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    python3.11 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$1" > "$2"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					run_ironic_dbsync()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ "${IRONIC_USE_MARIADB}" == "true" ]]; then
 | 
				
			||||||
 | 
					        # It's possible for the dbsync to fail if mariadb is not up yet, so
 | 
				
			||||||
 | 
					        # retry until success
 | 
				
			||||||
 | 
					        until ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" upgrade; do
 | 
				
			||||||
 | 
					            echo "WARNING: ironic-dbsync failed, retrying"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        # SQLite does not support some statements. Fortunately, we can just
 | 
				
			||||||
 | 
					        # create the schema in one go if not already created, instead of going
 | 
				
			||||||
 | 
					        # through an upgrade
 | 
				
			||||||
 | 
					        cp "/var/lib/ironic/ironic.sqlite" "${IRONIC_DB_DIR}/ironic.sqlite"
 | 
				
			||||||
 | 
					        DB_VERSION="$(ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" version)"
 | 
				
			||||||
 | 
					        if [[ "${DB_VERSION}" == "None" ]]; then
 | 
				
			||||||
 | 
					            ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" create_schema
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use the special value "unix" for unix sockets
 | 
				
			||||||
 | 
					export IRONIC_PRIVATE_PORT=${IRONIC_PRIVATE_PORT:-unix}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_ACCESS_PORT=${IRONIC_ACCESS_PORT:-6385}
 | 
				
			||||||
 | 
					export IRONIC_LISTEN_PORT=${IRONIC_LISTEN_PORT:-$IRONIC_ACCESS_PORT}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_ENABLE_DISCOVERY=${IRONIC_ENABLE_DISCOVERY:-${IRONIC_INSPECTOR_ENABLE_DISCOVERY:-false}}
 | 
				
			||||||
							
								
								
									
										23
									
								
								ironic-image/scripts/ironic-probe.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								ironic-image/scripts/ironic-probe.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -eu -o pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/ironic-common.sh
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/auth-common.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROBE_CURL_ARGS=
 | 
				
			||||||
 | 
					if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
				
			||||||
 | 
					    if [[ "${IRONIC_PRIVATE_PORT}" == "unix" ]]; then
 | 
				
			||||||
 | 
					        PROBE_URL="http://127.0.0.1:6385"
 | 
				
			||||||
 | 
					        PROBE_CURL_ARGS="--unix-socket /shared/ironic.sock"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        PROBE_URL="http://127.0.0.1:${IRONIC_PRIVATE_PORT}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					        PROBE_URL="${IRONIC_BASE_URL}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC2086
 | 
				
			||||||
 | 
					curl -sSf ${PROBE_CURL_ARGS} "${PROBE_URL}"
 | 
				
			||||||
							
								
								
									
										10
									
								
								ironic-image/scripts/rundatabase-upgrade
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								ironic-image/scripts/rundatabase-upgrade
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/configure-ironic.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NOTE(dtantsur): no retries here: this script is supposed to be run as a Job
 | 
				
			||||||
 | 
					# that is retried on failure.
 | 
				
			||||||
 | 
					exec ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" upgrade
 | 
				
			||||||
							
								
								
									
										16
									
								
								ironic-image/rundnsmasq → ironic-image/scripts/rundnsmasq
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										16
									
								
								ironic-image/rundnsmasq → ironic-image/scripts/rundnsmasq
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -13,7 +13,11 @@ export DNS_PORT=${DNS_PORT:-0}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
wait_for_interface_or_ip
 | 
					wait_for_interface_or_ip
 | 
				
			||||||
if [[ "${DNS_IP:-}" == "provisioning" ]]; then
 | 
					if [[ "${DNS_IP:-}" == "provisioning" ]]; then
 | 
				
			||||||
    export DNS_IP="$IRONIC_URL_HOST"
 | 
					    if [[ "${IPV}" == "4" ]]; then
 | 
				
			||||||
 | 
					      export DNS_IP="${IRONIC_IP}"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      export DNS_IP="[${IRONIC_IP}]"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mkdir -p /shared/tftpboot
 | 
					mkdir -p /shared/tftpboot
 | 
				
			||||||
@@ -32,12 +36,12 @@ fi
 | 
				
			|||||||
# Template and write dnsmasq.conf
 | 
					# Template and write dnsmasq.conf
 | 
				
			||||||
# we template via /tmp as sed otherwise creates temp files in /etc directory
 | 
					# we template via /tmp as sed otherwise creates temp files in /etc directory
 | 
				
			||||||
# where we can't write
 | 
					# where we can't write
 | 
				
			||||||
python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' </etc/dnsmasq.conf.j2 >/tmp/dnsmasq.conf
 | 
					python3.11 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' <"/tmp/dnsmasq.conf.j2" >"${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for iface in $(echo "$DNSMASQ_EXCEPT_INTERFACE" | tr ',' ' '); do
 | 
					for iface in $(echo "$DNSMASQ_EXCEPT_INTERFACE" | tr ',' ' '); do
 | 
				
			||||||
    sed -i -e "/^interface=.*/ a\except-interface=${iface}" /tmp/dnsmasq.conf
 | 
					    sed -i -e "/^interface=.*/ a\except-interface=${iface}" "${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
cat /tmp/dnsmasq.conf > /etc/dnsmasq.conf
 | 
					cat "${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf" > "${DNSMASQ_CONF_DIR}/dnsmasq.conf"
 | 
				
			||||||
rm /tmp/dnsmasq.conf
 | 
					rm "${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec /usr/sbin/dnsmasq -d -q -C /etc/dnsmasq.conf
 | 
					exec /usr/sbin/dnsmasq -d -q -C "${DNSMASQ_CONF_DIR}/dnsmasq.conf"
 | 
				
			||||||
							
								
								
									
										37
									
								
								ironic-image/runhttpd → ironic-image/scripts/runhttpd
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										37
									
								
								ironic-image/runhttpd → ironic-image/scripts/runhttpd
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -28,25 +28,29 @@ wait_for_interface_or_ip
 | 
				
			|||||||
mkdir -p /shared/html
 | 
					mkdir -p /shared/html
 | 
				
			||||||
chmod 0777 /shared/html
 | 
					chmod 0777 /shared/html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IRONIC_BASE_URL="${IRONIC_SCHEME}://${IRONIC_URL_HOST}"
 | 
					INSPECTOR_EXTRA_ARGS=" ipa-inspection-callback-url=${IRONIC_BASE_URL}/v1/continue_inspection"
 | 
				
			||||||
 | 
					 | 
				
			||||||
INSPECTOR_EXTRA_ARGS=" ipa-inspection-callback-url=${IRONIC_BASE_URL}:${IRONIC_ACCESS_PORT}/v1/continue_inspection"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ "$IRONIC_FAST_TRACK" == "true" ]]; then
 | 
					if [[ "$IRONIC_FAST_TRACK" == "true" ]]; then
 | 
				
			||||||
    INSPECTOR_EXTRA_ARGS+=" ipa-api-url=${IRONIC_BASE_URL}:${IRONIC_ACCESS_PORT}"
 | 
					    INSPECTOR_EXTRA_ARGS+=" ipa-api-url=${IRONIC_BASE_URL}"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
export INSPECTOR_EXTRA_ARGS
 | 
					export INSPECTOR_EXTRA_ARGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copy files to shared mount
 | 
					# Copy files to shared mount
 | 
				
			||||||
render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe
 | 
					render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe
 | 
				
			||||||
cp /tmp/uefi_esp*.img /shared/html/
 | 
					cp /tmp/uefi_esp*.img /shared/html/
 | 
				
			||||||
 | 
					# cp -r /etc/httpd/* "${HTTPD_DIR}"
 | 
				
			||||||
 | 
					if [[ -f "${HTTPD_CONF_DIR}/httpd.conf" ]]; then
 | 
				
			||||||
 | 
					    mv "${HTTPD_CONF_DIR}/httpd.conf" "${HTTPD_CONF_DIR}/httpd.conf.example"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Render the core httpd config
 | 
					# Render the core httpd config
 | 
				
			||||||
render_j2_config /etc/httpd/conf/httpd.conf.j2 /etc/httpd/conf/httpd.conf
 | 
					render_j2_config "/etc/httpd/conf/httpd.conf.j2" \
 | 
				
			||||||
 | 
					    "${HTTPD_CONF_DIR}/httpd.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ "$IRONIC_TLS_SETUP" == "true" ]]; then
 | 
					if [[ "$IRONIC_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
    if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
					    if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
				
			||||||
        render_j2_config /tmp/httpd-ironic-api.conf.j2 /etc/httpd/conf.d/ironic.conf
 | 
					        render_j2_config "/tmp/httpd-ironic-api.conf.j2" \
 | 
				
			||||||
 | 
					            "${HTTPD_CONF_DIR_D}/ironic.conf"
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
    export IRONIC_REVERSE_PROXY_SETUP="false" # If TLS is not used, we have no reason to use the reverse proxy
 | 
					    export IRONIC_REVERSE_PROXY_SETUP="false" # If TLS is not used, we have no reason to use the reverse proxy
 | 
				
			||||||
@@ -56,33 +60,24 @@ write_htpasswd_files
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Render httpd TLS configuration for /shared/html/<redifsh;ilo>
 | 
					# Render httpd TLS configuration for /shared/html/<redifsh;ilo>
 | 
				
			||||||
if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
					if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
    render_j2_config /etc/httpd-vmedia.conf.j2 /etc/httpd/conf.d/vmedia.conf
 | 
					    render_j2_config "/tmp/httpd-vmedia.conf.j2" \
 | 
				
			||||||
 | 
					        "${HTTPD_CONF_DIR_D}/vmedia.conf"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Render httpd TLS configuration for /shared/html
 | 
					# Render httpd TLS configuration for /shared/html
 | 
				
			||||||
if [[ "$IPXE_TLS_SETUP" == "true" ]]; then
 | 
					if [[ "$IPXE_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
    mkdir -p /shared/html/custom-ipxe
 | 
					    mkdir -p /shared/html/custom-ipxe
 | 
				
			||||||
    chmod 0777 /shared/html/custom-ipxe
 | 
					    chmod 0777 /shared/html/custom-ipxe
 | 
				
			||||||
    render_j2_config "/etc/httpd-ipxe.conf.j2" "/etc/httpd/conf.d/ipxe.conf"
 | 
					    render_j2_config "/tmp/httpd-ipxe.conf.j2" "${HTTPD_CONF_DIR_D}/ipxe.conf"
 | 
				
			||||||
    cp "${IPXE_CUSTOM_FIRMWARE_DIR}/undionly.kpxe" \
 | 
					    cp "${IPXE_CUSTOM_FIRMWARE_DIR}/undionly.kpxe" \
 | 
				
			||||||
       "${IPXE_CUSTOM_FIRMWARE_DIR}/snponly.efi" \
 | 
					       "${IPXE_CUSTOM_FIRMWARE_DIR}/snponly.efi" \
 | 
				
			||||||
       "/shared/html/custom-ipxe"
 | 
					       "/shared/html/custom-ipxe"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set up inotify to kill the container (restart) whenever cert files for ironic api change
 | 
					# Set up inotify to kill the container (restart) whenever cert files for ironic api change
 | 
				
			||||||
if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
					configure_restart_on_certificate_update "${IRONIC_TLS_SETUP}" httpd "${IRONIC_CERT_FILE}"
 | 
				
			||||||
    # shellcheck disable=SC2034
 | 
					 | 
				
			||||||
    inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
 | 
					 | 
				
			||||||
        kill -WINCH $(pgrep httpd)
 | 
					 | 
				
			||||||
    done &
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set up inotify to kill the container (restart) whenever cert of httpd for /shared/html/<redifsh;ilo> path change
 | 
					# Set up inotify to kill the container (restart) whenever cert of httpd for /shared/html/<redifsh;ilo> path change
 | 
				
			||||||
if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
					configure_restart_on_certificate_update "${IRONIC_VMEDIA_TLS_SETUP}" httpd "${IRONIC_VMEDIA_CERT_FILE}"
 | 
				
			||||||
    # shellcheck disable=SC2034
 | 
					 | 
				
			||||||
    inotifywait -m -e delete_self "${IRONIC_VMEDIA_CERT_FILE}" | while read -r file event; do
 | 
					 | 
				
			||||||
        kill -WINCH $(pgrep httpd)
 | 
					 | 
				
			||||||
    done &
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec /usr/sbin/httpd -DFOREGROUND -f /etc/httpd/conf/httpd.conf
 | 
					exec /usr/sbin/httpd -DFOREGROUND -f "${HTTPD_CONF_DIR}/httpd.conf"
 | 
				
			||||||
							
								
								
									
										18
									
								
								ironic-image/scripts/runironic
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								ironic-image/scripts/runironic
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/configure-ironic.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ramdisk logs
 | 
				
			||||||
 | 
					mkdir -p /shared/log/ironic/deploy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Allows skipping dbsync if it's done by an external job
 | 
				
			||||||
 | 
					if [[ "${IRONIC_SKIP_DBSYNC:-false}" != true ]]; then
 | 
				
			||||||
 | 
					    run_ironic_dbsync
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_restart_on_certificate_update "${IRONIC_TLS_SETUP}" ironic "${IRONIC_CERT_FILE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_ironic_auth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec /usr/bin/ironic --config-dir "${IRONIC_CONF_DIR}"
 | 
				
			||||||
							
								
								
									
										17
									
								
								ironic-image/scripts/runlogwatch.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								ironic-image/scripts/runlogwatch.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ramdisk logs path
 | 
				
			||||||
 | 
					LOG_DIR="/shared/log/ironic/deploy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p "${LOG_DIR}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC2034
 | 
				
			||||||
 | 
					python3.11 -m pyinotify --raw-format -e IN_CLOSE_WRITE -v "${LOG_DIR}" |
 | 
				
			||||||
 | 
					    while read -r event dir mask maskname filename filepath pathname wd; do
 | 
				
			||||||
 | 
					        #NOTE(elfosardo): a pyinotify event looks like this:
 | 
				
			||||||
 | 
					        # <Event dir=False mask=0x8 maskname=IN_CLOSE_WRITE name=mylogs.gzip path=/shared/log/ironic/deploy pathname=/shared/log/ironic/deploy/mylogs.gzip wd=1 >
 | 
				
			||||||
 | 
					        FILENAME=$(echo "${filename}" | cut -d'=' -f2-)
 | 
				
			||||||
 | 
					        echo "************ Contents of ${LOG_DIR}/${FILENAME} ramdisk log file bundle **************"
 | 
				
			||||||
 | 
					        tar -xOzvvf "${LOG_DIR}/${FILENAME}" | sed -e "s/^/${FILENAME}: /"
 | 
				
			||||||
 | 
					        rm -f "${LOG_DIR}/${FILENAME}"
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
							
								
								
									
										10
									
								
								ironic-image/scripts/runonline-data-migrations
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								ironic-image/scripts/runonline-data-migrations
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/configure-ironic.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NOTE(dtantsur): no retries here: this script is supposed to be run as a Job
 | 
				
			||||||
 | 
					# that is retried on failure.
 | 
				
			||||||
 | 
					exec ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" online_data_migrations
 | 
				
			||||||
@@ -95,3 +95,21 @@ if [[ -f "$MARIADB_CACERT_FILE" ]]; then
 | 
				
			|||||||
else
 | 
					else
 | 
				
			||||||
    export MARIADB_TLS_ENABLED="false"
 | 
					    export MARIADB_TLS_ENABLED="false"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_restart_on_certificate_update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    local enabled="$1"
 | 
				
			||||||
 | 
					    local service="$2"
 | 
				
			||||||
 | 
					    local cert_file="$3"
 | 
				
			||||||
 | 
					    local signal="TERM"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ "${enabled}" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
				
			||||||
 | 
					        if [[ "${service}" == httpd ]]; then
 | 
				
			||||||
 | 
					            signal="WINCH"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        python3 -m pyinotify --raw-format -e IN_DELETE_SELF -v "${cert_file}" |
 | 
				
			||||||
 | 
					            while read -r; do
 | 
				
			||||||
 | 
					                pkill "-${signal}" "${service}"
 | 
				
			||||||
 | 
					            done &
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.6
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.6-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,11 +18,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="3.0.6"
 | 
					LABEL org.opencontainers.image.version="3.0.8"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.6-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
@@ -33,8 +33,6 @@ LABEL com.suse.release-stage="released"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
COPY --from=base /installroot /
 | 
					COPY --from=base /installroot /
 | 
				
			||||||
RUN cp /getopt /usr/bin/
 | 
					RUN cp /getopt /usr/bin/
 | 
				
			||||||
RUN cp /srv/tftpboot/openstack-ironic-image/initrd*.zst /tmp
 | 
					 | 
				
			||||||
RUN cp /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel /tmp
 | 
					 | 
				
			||||||
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
 | 
					RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
 | 
				
			||||||
# configure non-root user
 | 
					# configure non-root user
 | 
				
			||||||
COPY configure-nonroot.sh /bin/
 | 
					COPY configure-nonroot.sh /bin/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.6
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.6-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8-%RELEASE%
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,11 +18,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="3.0.6"
 | 
					LABEL org.opencontainers.image.version="3.0.8"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.6-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
@@ -33,8 +33,6 @@ LABEL com.suse.release-stage="released"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
COPY --from=base /installroot /
 | 
					COPY --from=base /installroot /
 | 
				
			||||||
RUN cp /getopt /usr/bin/
 | 
					RUN cp /getopt /usr/bin/
 | 
				
			||||||
RUN cp /srv/tftpboot/openstack-ironic-image/initrd*.zst /tmp
 | 
					 | 
				
			||||||
RUN cp /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel /tmp
 | 
					 | 
				
			||||||
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
 | 
					RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
 | 
				
			||||||
# configure non-root user
 | 
					# configure non-root user
 | 
				
			||||||
COPY configure-nonroot.sh /bin/
 | 
					COPY configure-nonroot.sh /bin/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.6
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.6-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8-%RELEASE%
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,11 +18,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="3.0.6"
 | 
					LABEL org.opencontainers.image.version="3.0.8"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.6-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
@@ -33,8 +33,6 @@ LABEL com.suse.release-stage="released"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
COPY --from=base /installroot /
 | 
					COPY --from=base /installroot /
 | 
				
			||||||
RUN cp /getopt /usr/bin/
 | 
					RUN cp /getopt /usr/bin/
 | 
				
			||||||
RUN cp /srv/tftpboot/openstack-ironic-image/initrd*.zst /tmp
 | 
					 | 
				
			||||||
RUN cp /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel /tmp
 | 
					 | 
				
			||||||
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
 | 
					RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
 | 
				
			||||||
# configure non-root user
 | 
					# configure non-root user
 | 
				
			||||||
COPY configure-nonroot.sh /bin/
 | 
					COPY configure-nonroot.sh /bin/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,8 @@ export http_proxy=${http_proxy:-$HTTP_PROXY}
 | 
				
			|||||||
export https_proxy=${https_proxy:-$HTTPS_PROXY}
 | 
					export https_proxy=${https_proxy:-$HTTPS_PROXY}
 | 
				
			||||||
export no_proxy=${no_proxy:-$NO_PROXY}
 | 
					export no_proxy=${no_proxy:-$NO_PROXY}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IMAGES_BASE_PATH="/srv/tftpboot/openstack-ironic-image"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -d "/tmp/ironic-certificates" ]; then
 | 
					if [ -d "/tmp/ironic-certificates" ]; then
 | 
				
			||||||
  sha256sum /tmp/ironic-certificates/* > /tmp/certificates.sha256
 | 
					  sha256sum /tmp/ironic-certificates/* > /tmp/certificates.sha256
 | 
				
			||||||
  if cmp "/shared/certificates.sha256" "/tmp/certificates.sha256"; then
 | 
					  if cmp "/shared/certificates.sha256" "/tmp/certificates.sha256"; then
 | 
				
			||||||
@@ -26,14 +28,14 @@ if [ -z "${IPA_BASEURI}" ]; then
 | 
				
			|||||||
  IMAGE_CHANGED=1
 | 
					  IMAGE_CHANGED=1
 | 
				
			||||||
  # SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages
 | 
					  # SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages
 | 
				
			||||||
  mkdir -p /shared/html/images
 | 
					  mkdir -p /shared/html/images
 | 
				
			||||||
  if [ -f /tmp/initrd-x86_64.zst ]; then
 | 
					  if [ -f ${IMAGES_BASE_PATH}/initrd-x86_64.zst ]; then
 | 
				
			||||||
    cp /tmp/initrd-x86_64.zst /shared/html/images/ironic-python-agent-x86_64.initramfs
 | 
					    cp ${IMAGES_BASE_PATH}/initrd-x86_64.zst /shared/html/images/ironic-python-agent-x86_64.initramfs
 | 
				
			||||||
    cp /tmp/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent-x86_64.kernel
 | 
					    cp ${IMAGES_BASE_PATH}/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent-x86_64.kernel
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  # Use arm64 as destination for iPXE compatibility
 | 
					  # Use arm64 as destination for iPXE compatibility
 | 
				
			||||||
  if [ -f /tmp/initrd-aarch64.zst ]; then
 | 
					  if [ -f ${IMAGES_BASE_PATH}/initrd-aarch64.zst ]; then
 | 
				
			||||||
    cp /tmp/initrd-aarch64.zst /shared/html/images/ironic-python-agent-arm64.initramfs
 | 
					    cp ${IMAGES_BASE_PATH}/initrd-aarch64.zst /shared/html/images/ironic-python-agent-arm64.initramfs
 | 
				
			||||||
    cp /tmp/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent-arm64.kernel
 | 
					    cp ${IMAGES_BASE_PATH}/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent-arm64.kernel
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cp /tmp/images.sha256 /shared/images.sha256
 | 
					  cp /tmp/images.sha256 /shared/images.sha256
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           ironic-ipa-ramdisk
 | 
					Name:           ironic-ipa-ramdisk
 | 
				
			||||||
Version:        3.0.6
 | 
					Version:        3.0.7
 | 
				
			||||||
Release:        0
 | 
					Release:        0
 | 
				
			||||||
Summary:        Kernel and ramdisk image for OpenStack Ironic
 | 
					Summary:        Kernel and ramdisk image for OpenStack Ironic
 | 
				
			||||||
License:        SUSE-EULA
 | 
					License:        SUSE-EULA
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:%%kiwi_version%%.0-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.12.0-%RELEASE%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:%%kiwi_version%%.0
 | 
					#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.12.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Base image version, should match the tag above
 | 
				
			||||||
ARG KIWIVERSION="10.2.12"
 | 
					ARG KIWIVERSION="10.2.12"
 | 
				
			||||||
FROM registry.suse.com/bci/kiwi:${KIWIVERSION}
 | 
					FROM registry.suse.com/bci/kiwi:${KIWIVERSION}
 | 
				
			||||||
ARG KIWIVERSION
 | 
					ARG KIWIVERSION
 | 
				
			||||||
@@ -10,11 +11,11 @@ ARG KIWIVERSION
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Kiwi Builder Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Kiwi Builder Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="kiwi-builder based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="kiwi-builder based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="%%kiwi_version%%"
 | 
					LABEL org.opencontainers.image.version="${KIWIVERSION}"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kiwi-builder:%%kiwi_version%%.0-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kiwi-builder:${KIWIVERSION}.0-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
@@ -23,9 +24,6 @@ LABEL com.suse.image-type="application"
 | 
				
			|||||||
LABEL com.suse.release-stage="released"
 | 
					LABEL com.suse.release-stage="released"
 | 
				
			||||||
# endlabelprefix
 | 
					# endlabelprefix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# help the build service understand the need for python3-kiwi
 | 
					 | 
				
			||||||
RUN zypper -n install -d -D python3-kiwi; [ "%%kiwi_version%%" = "${KIWIVERSION}" ] || { echo "expected kiwi version ${KIWIVERSION}: version mismatch"; exit 1; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Copy build script into image and make it executable
 | 
					# Copy build script into image and make it executable
 | 
				
			||||||
ADD build-image.sh /usr/bin/build-image
 | 
					ADD build-image.sh /usr/bin/build-image
 | 
				
			||||||
RUN chmod a+x /usr/bin/build-image
 | 
					RUN chmod a+x /usr/bin/build-image
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,15 +1,9 @@
 | 
				
			|||||||
<services>
 | 
					<services>
 | 
				
			||||||
  <service mode="buildtime" name="kiwi_metainfo_helper"/>
 | 
					  <service mode="buildtime" name="kiwi_metainfo_helper"/>
 | 
				
			||||||
  <service name="docker_label_helper" mode="buildtime"/>
 | 
					  <service name="docker_label_helper" mode="buildtime"/>
 | 
				
			||||||
  <service name="replace_using_env" mode="buildtime">
 | 
					 | 
				
			||||||
    <param name="file">README</param>
 | 
					 | 
				
			||||||
    <param name="eval">IMG_REPO=$(rpm --macros=/root/.rpmmacros -E %img_repo)</param>
 | 
					 | 
				
			||||||
    <param name="var">IMG_REPO</param>
 | 
					 | 
				
			||||||
    <param name="eval">IMG_PREFIX=$(rpm --macros=/root/.rpmmacros -E %{?img_prefix})</param>
 | 
					 | 
				
			||||||
    <param name="var">IMG_PREFIX</param>
 | 
					 | 
				
			||||||
  </service>
 | 
					 | 
				
			||||||
  <service name="replace_using_env" mode="buildtime">
 | 
					  <service name="replace_using_env" mode="buildtime">
 | 
				
			||||||
    <param name="file">Dockerfile</param>
 | 
					    <param name="file">Dockerfile</param>
 | 
				
			||||||
 | 
					    <param name="file">README</param>
 | 
				
			||||||
    <param name="eval">IMG_PREFIX=$(rpm --macros=/root/.rpmmacros -E %{?img_prefix})</param>
 | 
					    <param name="eval">IMG_PREFIX=$(rpm --macros=/root/.rpmmacros -E %{?img_prefix})</param>
 | 
				
			||||||
    <param name="var">IMG_PREFIX</param>
 | 
					    <param name="var">IMG_PREFIX</param>
 | 
				
			||||||
    <param name="eval">IMG_REPO=$(rpm --macros=/root/.rpmmacros -E %img_repo)</param>
 | 
					    <param name="eval">IMG_REPO=$(rpm --macros=/root/.rpmmacros -E %img_repo)</param>
 | 
				
			||||||
@@ -17,14 +11,4 @@
 | 
				
			|||||||
    <param name="eval">SUPPORT_LEVEL=$(rpm --macros=/root/.rpmmacros -E %support_level)</param>
 | 
					    <param name="eval">SUPPORT_LEVEL=$(rpm --macros=/root/.rpmmacros -E %support_level)</param>
 | 
				
			||||||
    <param name="var">SUPPORT_LEVEL</param>
 | 
					    <param name="var">SUPPORT_LEVEL</param>
 | 
				
			||||||
  </service>
 | 
					  </service>
 | 
				
			||||||
  <service mode="buildtime" name="replace_using_package_version">
 | 
					 | 
				
			||||||
    <param name="file">Dockerfile</param>
 | 
					 | 
				
			||||||
    <param name="regex">%%kiwi_version%%</param>
 | 
					 | 
				
			||||||
    <param name="package">python3-kiwi</param>
 | 
					 | 
				
			||||||
  </service>
 | 
					 | 
				
			||||||
  <service mode="buildtime" name="replace_using_package_version">
 | 
					 | 
				
			||||||
    <param name="file">README</param>
 | 
					 | 
				
			||||||
    <param name="regex">%%kiwi_version%%</param>
 | 
					 | 
				
			||||||
    <param name="package">python3-kiwi</param>
 | 
					 | 
				
			||||||
  </service>
 | 
					 | 
				
			||||||
</services>
 | 
					</services>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 <service name="obs_scm">
 | 
					 <service name="obs_scm">
 | 
				
			||||||
    <param name="url">https://github.com/brancz/kube-rbac-proxy</param>
 | 
					    <param name="url">https://github.com/brancz/kube-rbac-proxy</param>
 | 
				
			||||||
    <param name="scm">git</param>
 | 
					    <param name="scm">git</param>
 | 
				
			||||||
    <param name="revision">v0.18.1</param>
 | 
					    <param name="revision">v0.18.2</param>
 | 
				
			||||||
    <param name="version">_auto_</param>
 | 
					    <param name="version">_auto_</param>
 | 
				
			||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="changesgenerate">enable</param>
 | 
					    <param name="changesgenerate">enable</param>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           kube-rbac-proxy
 | 
					Name:           kube-rbac-proxy
 | 
				
			||||||
Version:        0.18.1
 | 
					Version:        0.18.2
 | 
				
			||||||
Release:        0.18.1
 | 
					Release:        0.18.2
 | 
				
			||||||
Summary:        The kube-rbac-proxy is a small HTTP proxy for a single upstream
 | 
					Summary:        The kube-rbac-proxy is a small HTTP proxy for a single upstream
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
URL:            https://github.com/brancz/kube-rbac-proxy
 | 
					URL:            https://github.com/brancz/kube-rbac-proxy
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kubectl:1.30.3
 | 
					#!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kubectl:1.30.3-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,11 +15,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE kubectl image"
 | 
					LABEL org.opencontainers.image.title="SLE kubectl image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="1.30.3"
 | 
					LABEL org.opencontainers.image.version="1.32.4"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.30.3-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.32.4-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
%global debug_package %{nil}
 | 
					%global debug_package %{nil}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name: kubectl
 | 
					Name: kubectl
 | 
				
			||||||
Version: 1.30.3
 | 
					Version: 1.32.4
 | 
				
			||||||
Release: 0
 | 
					Release: 0
 | 
				
			||||||
Summary: Command-line utility for interacting with a Kubernetes cluster
 | 
					Summary: Command-line utility for interacting with a Kubernetes cluster
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -12,7 +12,7 @@ Group: admin
 | 
				
			|||||||
Packager: Kubernetes Authors <dev@kubernetes.io>
 | 
					Packager: Kubernetes Authors <dev@kubernetes.io>
 | 
				
			||||||
License: Apache-2.0
 | 
					License: Apache-2.0
 | 
				
			||||||
URL: https://kubernetes.io
 | 
					URL: https://kubernetes.io
 | 
				
			||||||
Source0: kubectl_%{version}.orig.tar.gz
 | 
					Source0: %{name}_%{version}.orig.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%description
 | 
					%description
 | 
				
			||||||
%{summary}.
 | 
					%{summary}.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								kubectl/kubectl_1.30.3.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								kubectl/kubectl_1.30.3.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								kubectl/kubectl_1.32.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								kubectl/kubectl_1.32.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -1,4 +1,3 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2
 | 
					 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2
 | 
					#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2-%RELEASE%
 | 
				
			||||||
annotations:
 | 
					annotations:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,28 +1,28 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.5_up0.11.3
 | 
					#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.12_up0.12.2
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.5_up0.11.3-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.12_up0.12.2-%RELEASE%
 | 
				
			||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: 0.11.3
 | 
					appVersion: 0.12.2
 | 
				
			||||||
dependencies:
 | 
					dependencies:
 | 
				
			||||||
- alias: metal3-baremetal-operator
 | 
					- alias: metal3-baremetal-operator
 | 
				
			||||||
  name: baremetal-operator
 | 
					  name: baremetal-operator
 | 
				
			||||||
  repository: file://./charts/baremetal-operator
 | 
					  repository: file://./charts/baremetal-operator
 | 
				
			||||||
  version: 0.9.1
 | 
					  version: 0.9.4
 | 
				
			||||||
- alias: metal3-ironic
 | 
					- alias: metal3-ironic
 | 
				
			||||||
  name: ironic
 | 
					  name: ironic
 | 
				
			||||||
  repository: file://./charts/ironic
 | 
					  repository: file://./charts/ironic
 | 
				
			||||||
  version: 0.10.3
 | 
					  version: 0.11.2
 | 
				
			||||||
- alias: metal3-mariadb
 | 
					- alias: metal3-mariadb
 | 
				
			||||||
  condition: global.enable_mariadb
 | 
					  condition: global.enable_mariadb
 | 
				
			||||||
  name: mariadb
 | 
					  name: mariadb
 | 
				
			||||||
  repository: file://./charts/mariadb
 | 
					  repository: file://./charts/mariadb
 | 
				
			||||||
  version: 0.5.4
 | 
					  version: 0.6.1
 | 
				
			||||||
- alias: metal3-media
 | 
					- alias: metal3-media
 | 
				
			||||||
  condition: global.enable_metal3_media_server
 | 
					  condition: global.enable_metal3_media_server
 | 
				
			||||||
  name: media
 | 
					  name: media
 | 
				
			||||||
  repository: file://./charts/media
 | 
					  repository: file://./charts/media
 | 
				
			||||||
  version: 0.6.1
 | 
					  version: 0.6.5
 | 
				
			||||||
description: A Helm chart that installs all of the dependencies needed for Metal3
 | 
					description: A Helm chart that installs all of the dependencies needed for Metal3
 | 
				
			||||||
icon: https://github.com/cncf/artwork/raw/master/projects/metal3/icon/color/metal3-icon-color.svg
 | 
					icon: https://github.com/cncf/artwork/raw/master/projects/metal3/icon/color/metal3-icon-color.svg
 | 
				
			||||||
name: metal3
 | 
					name: metal3
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: "%%CHART_MAJOR%%.0.5+up0.11.3"
 | 
					version: "%%CHART_MAJOR%%.0.12+up0.12.2"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,4 +3,4 @@ appVersion: 0.9.1
 | 
				
			|||||||
description: A Helm chart for baremetal-operator, used by Metal3
 | 
					description: A Helm chart for baremetal-operator, used by Metal3
 | 
				
			||||||
name: baremetal-operator
 | 
					name: baremetal-operator
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: 0.9.1
 | 
					version: 0.9.4
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,3 +61,19 @@ Create the name of the service account to use
 | 
				
			|||||||
{{- default "default" .Values.serviceAccount.name }}
 | 
					{{- default "default" .Values.serviceAccount.name }}
 | 
				
			||||||
{{- end }}
 | 
					{{- end }}
 | 
				
			||||||
{{- end }}
 | 
					{{- end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{/*
 | 
				
			||||||
 | 
					Create the URL to use for connecting to the Ironic servers (e.g. API, cache)
 | 
				
			||||||
 | 
					*/}}
 | 
				
			||||||
 | 
					{{- define "baremetal-operator.ironicHttpHost" -}}
 | 
				
			||||||
 | 
					{{- $hostIP := include "metal3.hostIP" . -}}
 | 
				
			||||||
 | 
					{{- with .Values.global }}
 | 
				
			||||||
 | 
					{{- if .provisioningHostname }}
 | 
				
			||||||
 | 
					{{- .provisioningHostname }}
 | 
				
			||||||
 | 
					{{- else if regexMatch ".*:.*" $hostIP}}
 | 
				
			||||||
 | 
					{{- print "[" $hostIP "]" }}
 | 
				
			||||||
 | 
					{{- else }}
 | 
				
			||||||
 | 
					{{- $hostIP }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,23 +1,24 @@
 | 
				
			|||||||
  {{- $enableTLS := .Values.global.enable_tls }}
 | 
					  {{- $enableTLS := .Values.global.enable_tls }}
 | 
				
			||||||
  {{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
 | 
					  {{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
 | 
				
			||||||
  {{- $protocol := ternary "https" "http" $enableTLS }}
 | 
					  {{- $protocol := ternary "https" "http" $enableTLS }}
 | 
				
			||||||
  {{- $ironicIP := .Values.global.ironicIP | default "" }}
 | 
					  {{- $ironicHost := include "baremetal-operator.ironicHttpHost" . | required "Missing host information for BMO to connect to Ironic" }}
 | 
				
			||||||
  {{- $ironicApiHost := print $ironicIP ":6385" }}
 | 
					  {{- $ironicApiHost := print $ironicHost ":6385" }}
 | 
				
			||||||
  {{- $ironicBootHost := print $ironicIP ":6180" }}
 | 
					  {{- $ironicBootHost := print $ironicHost ":6180" }}
 | 
				
			||||||
  {{- $ironicCacheHost := print $ironicIP ":6180" }}
 | 
					  {{- $ironicCacheHost := print $ironicHost ":6180" }}
 | 
				
			||||||
  {{- $deployArch := .Values.global.deployArchitecture }}
 | 
					  {{- $deployArch := .Values.global.deployArchitecture }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
apiVersion: v1
 | 
					apiVersion: v1
 | 
				
			||||||
data:
 | 
					data:
 | 
				
			||||||
  IRONIC_ENDPOINT: "{{ $protocol }}://{{ $ironicApiHost }}/v1/"
 | 
					  IRONIC_ENDPOINT: "{{ $protocol }}://{{ $ironicApiHost }}/v1/"
 | 
				
			||||||
  RESTART_CONTAINER_CERTIFICATE_UPDATED: "false"
 | 
					 | 
				
			||||||
  # Switch VMedia to HTTP if enable_vmedia_tls is false
 | 
					  # Switch VMedia to HTTP if enable_vmedia_tls is false
 | 
				
			||||||
  {{- if and $enableTLS $enableVMediaTLS }}
 | 
					  {{- if and $enableTLS $enableVMediaTLS }}
 | 
				
			||||||
    {{- $ironicBootHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
 | 
					    {{- $ironicBootHost = print $ironicHost ":" .Values.global.vmediaTLSPort }}
 | 
				
			||||||
    {{- $ironicCacheHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
 | 
					    {{- $ironicCacheHost = print $ironicHost ":" .Values.global.vmediaTLSPort }}
 | 
				
			||||||
    {{- $protocol = "https" }}
 | 
					    {{- $protocol = "https" }}
 | 
				
			||||||
 | 
					  RESTART_CONTAINER_CERTIFICATE_UPDATED: "true"
 | 
				
			||||||
  {{- else }}
 | 
					  {{- else }}
 | 
				
			||||||
    {{- $protocol = "http" }}
 | 
					    {{- $protocol = "http" }}
 | 
				
			||||||
 | 
					  RESTART_CONTAINER_CERTIFICATE_UPDATED: "false"
 | 
				
			||||||
  {{- end }}
 | 
					  {{- end }}
 | 
				
			||||||
  CACHEURL: "{{ $protocol }}://{{ $ironicCacheHost }}/images"
 | 
					  CACHEURL: "{{ $protocol }}://{{ $ironicCacheHost }}/images"
 | 
				
			||||||
  DEPLOY_KERNEL_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.kernel"
 | 
					  DEPLOY_KERNEL_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.kernel"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,19 +0,0 @@
 | 
				
			|||||||
apiVersion: v1
 | 
					 | 
				
			||||||
data:
 | 
					 | 
				
			||||||
  controller_manager_config.yaml: |
 | 
					 | 
				
			||||||
    apiVersion: controller-runtime.sigs.k8s.io/v1alpha1
 | 
					 | 
				
			||||||
    kind: ControllerManagerConfig
 | 
					 | 
				
			||||||
    health:
 | 
					 | 
				
			||||||
      healthProbeBindAddress: :9440
 | 
					 | 
				
			||||||
    metrics:
 | 
					 | 
				
			||||||
      bindAddress: 127.0.0.1:8085
 | 
					 | 
				
			||||||
    webhook:
 | 
					 | 
				
			||||||
      port: 9443
 | 
					 | 
				
			||||||
    leaderElection:
 | 
					 | 
				
			||||||
      leaderElect: true
 | 
					 | 
				
			||||||
      resourceName: a9498140.metal3.io
 | 
					 | 
				
			||||||
kind: ConfigMap
 | 
					 | 
				
			||||||
metadata:
 | 
					 | 
				
			||||||
  name: baremetal-operator-manager-config
 | 
					 | 
				
			||||||
  labels:
 | 
					 | 
				
			||||||
    {{- include "baremetal-operator.labels" . | nindent 4 }}
 | 
					 | 
				
			||||||
@@ -17,6 +17,8 @@ spec:
 | 
				
			|||||||
      control-plane: controller-manager
 | 
					      control-plane: controller-manager
 | 
				
			||||||
  template:
 | 
					  template:
 | 
				
			||||||
    metadata:
 | 
					    metadata:
 | 
				
			||||||
 | 
					      annotations:
 | 
				
			||||||
 | 
					        checksum/config-env: {{ include (print $.Template.BasePath "/configmap-ironic.yaml") . | sha256sum }}
 | 
				
			||||||
      labels:
 | 
					      labels:
 | 
				
			||||||
        {{- include "baremetal-operator.selectorLabels" . | nindent 8 }}
 | 
					        {{- include "baremetal-operator.selectorLabels" . | nindent 8 }}
 | 
				
			||||||
        control-plane: controller-manager
 | 
					        control-plane: controller-manager
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ metadata:
 | 
				
			|||||||
    control-plane: controller-manager
 | 
					    control-plane: controller-manager
 | 
				
			||||||
  name: {{ include "baremetal-operator.fullname" . }}-controller-manager-metrics-service
 | 
					  name: {{ include "baremetal-operator.fullname" . }}-controller-manager-metrics-service
 | 
				
			||||||
spec:
 | 
					spec:
 | 
				
			||||||
 | 
					  ipFamilyPolicy: PreferDualStack
 | 
				
			||||||
  ports:
 | 
					  ports:
 | 
				
			||||||
  - name: https
 | 
					  - name: https
 | 
				
			||||||
    port: 8443
 | 
					    port: 8443
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ metadata:
 | 
				
			|||||||
    {{- include "baremetal-operator.labels" . | nindent 4 }}
 | 
					    {{- include "baremetal-operator.labels" . | nindent 4 }}
 | 
				
			||||||
  name: {{ include "baremetal-operator.fullname" . }}-webhook-service
 | 
					  name: {{ include "baremetal-operator.fullname" . }}-webhook-service
 | 
				
			||||||
spec:
 | 
					spec:
 | 
				
			||||||
 | 
					  ipFamilyPolicy: PreferDualStack
 | 
				
			||||||
  ports:
 | 
					  ports:
 | 
				
			||||||
  - port: 443
 | 
					  - port: 443
 | 
				
			||||||
    targetPort: 9443
 | 
					    targetPort: 9443
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ images:
 | 
				
			|||||||
  baremetalOperator:
 | 
					  baremetalOperator:
 | 
				
			||||||
    repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/baremetal-operator
 | 
					    repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/baremetal-operator
 | 
				
			||||||
    pullPolicy: IfNotPresent
 | 
					    pullPolicy: IfNotPresent
 | 
				
			||||||
    tag: "0.9.1"
 | 
					    tag: "0.9.1.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
imagePullSecrets: []
 | 
					imagePullSecrets: []
 | 
				
			||||||
nameOverride: "manger"
 | 
					nameOverride: "manger"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: 26.1.2
 | 
					appVersion: 29.0.4
 | 
				
			||||||
description: A Helm chart for Ironic, used by Metal3
 | 
					description: A Helm chart for Ironic, used by Metal3
 | 
				
			||||||
name: ironic
 | 
					name: ironic
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: 0.10.3
 | 
					version: 0.11.2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,3 +83,50 @@ Get ironic CA volumeMounts
 | 
				
			|||||||
  readOnly: true
 | 
					  readOnly: true
 | 
				
			||||||
{{- end }}
 | 
					{{- end }}
 | 
				
			||||||
{{- end }}
 | 
					{{- end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{/*
 | 
				
			||||||
 | 
					Get the formatted "External" hostname or IP based URL
 | 
				
			||||||
 | 
					*/}}
 | 
				
			||||||
 | 
					{{- define "ironic.externalHttpUrl" }}
 | 
				
			||||||
 | 
					{{- $host := ternary (include "metal3.hostIP" .) .Values.global.externalHttpHost (empty .Values.global.externalHttpHost) }}
 | 
				
			||||||
 | 
					{{- if regexMatch ".*:.*" $host }}
 | 
				
			||||||
 | 
					{{- $host = print "[" $host "]" }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- $protocol := "http" }}
 | 
				
			||||||
 | 
					{{- $port := "6180" }}
 | 
				
			||||||
 | 
					{{- if .Values.global.enable_vmedia_tls }}
 | 
				
			||||||
 | 
					{{- $protocol = "https" }}
 | 
				
			||||||
 | 
					{{- $port = .Values.global.vmediaTLSPort | default "6185" }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- print $protocol "://" $host ":" $port }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{/*
 | 
				
			||||||
 | 
					Get the command to use for Liveness and Readiness probes
 | 
				
			||||||
 | 
					*/}}
 | 
				
			||||||
 | 
					{{- define "ironic.probeCommand" }}
 | 
				
			||||||
 | 
					{{- $host := "127.0.0.1" }}
 | 
				
			||||||
 | 
					{{- if eq .Values.listenOnAll false }}
 | 
				
			||||||
 | 
					{{- $host = coalesce .Values.global.provisioningIP .Values.global.ironicIP .Values.global.provisioningHostname }}
 | 
				
			||||||
 | 
					{{- if regexMatch ".*:.*" $host }}
 | 
				
			||||||
 | 
					{{- $host = print "[" $host "]" }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- print "curl -sSfk https://" $host ":6385" }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{/*
 | 
				
			||||||
 | 
					Create the subjectAltNames section to be set on the Certificate
 | 
				
			||||||
 | 
					*/}}
 | 
				
			||||||
 | 
					{{- define "ironic.subjectAltNames" -}}
 | 
				
			||||||
 | 
					{{- with .Values.global }}
 | 
				
			||||||
 | 
					{{- if .provisioningHostname }}
 | 
				
			||||||
 | 
					dnsNames:
 | 
				
			||||||
 | 
					- {{ .provisioningHostname }}
 | 
				
			||||||
 | 
					{{- end -}}
 | 
				
			||||||
 | 
					{{- if or .ironicIP .provisioningIP }}
 | 
				
			||||||
 | 
					ipAddresses:
 | 
				
			||||||
 | 
					  - {{ coalesce .provisioningIP .ironicIP }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,7 @@ metadata:
 | 
				
			|||||||
spec:
 | 
					spec:
 | 
				
			||||||
  commonName: ironic-ca
 | 
					  commonName: ironic-ca
 | 
				
			||||||
  isCA: true
 | 
					  isCA: true
 | 
				
			||||||
  ipAddresses:
 | 
					  {{- include "ironic.subjectAltNames" . | indent 2 }}
 | 
				
			||||||
  - {{ .Values.global.ironicIP }}
 | 
					 | 
				
			||||||
  issuerRef:
 | 
					  issuerRef:
 | 
				
			||||||
    kind: Issuer
 | 
					    kind: Issuer
 | 
				
			||||||
    name: selfsigned-issuer
 | 
					    name: selfsigned-issuer
 | 
				
			||||||
@@ -19,8 +18,7 @@ metadata:
 | 
				
			|||||||
  name: ironic-cert
 | 
					  name: ironic-cert
 | 
				
			||||||
spec:
 | 
					spec:
 | 
				
			||||||
  commonName: ironic-cert
 | 
					  commonName: ironic-cert
 | 
				
			||||||
  ipAddresses:
 | 
					  {{- include "ironic.subjectAltNames" . | indent 2 }}
 | 
				
			||||||
  - {{ .Values.global.ironicIP }}
 | 
					 | 
				
			||||||
  issuerRef:
 | 
					  issuerRef:
 | 
				
			||||||
    kind: Issuer
 | 
					    kind: Issuer
 | 
				
			||||||
    name: ca-issuer
 | 
					    name: ca-issuer
 | 
				
			||||||
@@ -33,8 +31,7 @@ metadata:
 | 
				
			|||||||
  name: ironic-vmedia-cert
 | 
					  name: ironic-vmedia-cert
 | 
				
			||||||
spec:
 | 
					spec:
 | 
				
			||||||
  commonName: ironic-vmedia-cert
 | 
					  commonName: ironic-vmedia-cert
 | 
				
			||||||
  ipAddresses:
 | 
					  {{- include "ironic.subjectAltNames" . | indent 2 }}
 | 
				
			||||||
  - {{ .Values.global.ironicIP }}
 | 
					 | 
				
			||||||
  issuerRef:
 | 
					  issuerRef:
 | 
				
			||||||
    kind: Issuer
 | 
					    kind: Issuer
 | 
				
			||||||
    name: ca-issuer
 | 
					    name: ca-issuer
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,21 +1,13 @@
 | 
				
			|||||||
apiVersion: v1
 | 
					apiVersion: v1
 | 
				
			||||||
kind: ConfigMap
 | 
					kind: ConfigMap
 | 
				
			||||||
metadata:
 | 
					metadata:
 | 
				
			||||||
  name: ironic-bmo
 | 
					  name: ironic
 | 
				
			||||||
  labels:
 | 
					  labels:
 | 
				
			||||||
    {{- include "ironic.labels" . | nindent 4 }}
 | 
					    {{- include "ironic.labels" . | nindent 4 }}
 | 
				
			||||||
data:
 | 
					data:
 | 
				
			||||||
  {{- $enableTLS := .Values.global.enable_tls }}
 | 
					 | 
				
			||||||
  {{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
 | 
					 | 
				
			||||||
  {{- $protocol := ternary "https" "http" $enableTLS }}
 | 
					 | 
				
			||||||
  {{- $ironicIP := .Values.global.ironicIP | default "" }}
 | 
					 | 
				
			||||||
  {{- $ironicApiHost := print $ironicIP ":6385" }}
 | 
					 | 
				
			||||||
  {{- $ironicBootHost := print $ironicIP ":6180" }}
 | 
					 | 
				
			||||||
  {{- $ironicCacheHost := print $ironicIP ":6180" }}
 | 
					 | 
				
			||||||
  {{- $deployArch := .Values.global.deployArchitecture }}
 | 
					  {{- $deployArch := .Values.global.deployArchitecture }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {{- if  ( .Values.global.enable_dnsmasq ) }}
 | 
					  {{- if  ( .Values.global.enable_dnsmasq ) }}
 | 
				
			||||||
  DNSMASQ_BOOT_SERVER_ADDRESS: {{ $ironicBootHost }}
 | 
					 | 
				
			||||||
  DNSMASQ_DNS_SERVER_ADDRESS: {{ .Values.global.dnsmasqDNSServer }}
 | 
					  DNSMASQ_DNS_SERVER_ADDRESS: {{ .Values.global.dnsmasqDNSServer }}
 | 
				
			||||||
  DNSMASQ_DEFAULT_ROUTER: {{ .Values.global.dnsmasqDefaultRouter }}
 | 
					  DNSMASQ_DEFAULT_ROUTER: {{ .Values.global.dnsmasqDefaultRouter }}
 | 
				
			||||||
  DHCP_RANGE: {{ .Values.global.dhcpRange }}
 | 
					  DHCP_RANGE: {{ .Values.global.dhcpRange }}
 | 
				
			||||||
@@ -25,40 +17,21 @@ data:
 | 
				
			|||||||
  {{- end }}
 | 
					  {{- end }}
 | 
				
			||||||
  HTTP_PORT: "6180"
 | 
					  HTTP_PORT: "6180"
 | 
				
			||||||
  PREDICTABLE_NIC_NAMES: "{{ .Values.global.predictableNicNames }}"
 | 
					  PREDICTABLE_NIC_NAMES: "{{ .Values.global.predictableNicNames }}"
 | 
				
			||||||
  USE_IRONIC_INSPECTOR: "false"
 | 
					  IRONIC_EXTERNAL_HTTP_URL: {{ include "ironic.externalHttpUrl" . }}
 | 
				
			||||||
  IRONIC_API_BASE_URL: {{ $protocol }}://{{ $ironicApiHost }}
 | 
					 | 
				
			||||||
  IRONIC_API_HOST: {{ $ironicApiHost }}
 | 
					 | 
				
			||||||
  IRONIC_API_HTTPD_SERVER_NAME: {{ $ironicApiHost }}
 | 
					 | 
				
			||||||
  IRONIC_ENDPOINT: {{ $protocol }}://{{ $ironicApiHost }}/v1/
 | 
					 | 
				
			||||||
  # Switch VMedia to HTTP if enable_vmedia_tls is false
 | 
					 | 
				
			||||||
  {{- if and $enableTLS $enableVMediaTLS }}
 | 
					 | 
				
			||||||
    {{- $ironicBootHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
 | 
					 | 
				
			||||||
    {{- $ironicCacheHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
 | 
					 | 
				
			||||||
    {{- $protocol = "https" }}
 | 
					 | 
				
			||||||
  {{- else }}
 | 
					 | 
				
			||||||
    {{- $protocol = "http" }}
 | 
					 | 
				
			||||||
  {{- end }}
 | 
					 | 
				
			||||||
  IRONIC_EXTERNAL_HTTP_URL: {{ $protocol }}://{{ $ironicCacheHost }}
 | 
					 | 
				
			||||||
  CACHEURL: {{ $protocol }}://{{ $ironicCacheHost }}/images
 | 
					 | 
				
			||||||
  DEPLOY_KERNEL_URL: {{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.kernel
 | 
					 | 
				
			||||||
  DEPLOY_RAMDISK_URL: {{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.initramfs
 | 
					 | 
				
			||||||
  DEPLOY_ARCHITECTURE: {{ $deployArch }}
 | 
					  DEPLOY_ARCHITECTURE: {{ $deployArch }}
 | 
				
			||||||
  IRONIC_BOOT_BASE_URL: {{ $protocol }}://{{ $ironicBootHost }}
 | 
					 | 
				
			||||||
  IRONIC_VMEDIA_HTTPD_SERVER_NAME: {{ $ironicBootHost }}
 | 
					 | 
				
			||||||
  ENABLE_PXE_BOOT: "{{ .Values.global.enable_pxe_boot }}"
 | 
					  ENABLE_PXE_BOOT: "{{ .Values.global.enable_pxe_boot }}"
 | 
				
			||||||
  {{- if .Values.global.provisioningInterface }}
 | 
					  {{- if .Values.global.provisioningInterface }}
 | 
				
			||||||
  PROVISIONING_INTERFACE: {{ .Values.global.provisioningInterface }}
 | 
					  PROVISIONING_INTERFACE: {{ .Values.global.provisioningInterface }}
 | 
				
			||||||
  {{- end }}
 | 
					  {{- end }}
 | 
				
			||||||
  {{- if .Values.global.provisioningIP }}
 | 
					  {{- if .Values.global.provisioningIP }}
 | 
				
			||||||
  PROVISIONING_IP: {{ .Values.global.provisioningIP }}
 | 
					  PROVISIONING_IP: {{ include "metal3.hostIP" . }}
 | 
				
			||||||
 | 
					  {{- else if .Values.global.ironicIP }}
 | 
				
			||||||
 | 
					  IRONIC_IP: {{ include "metal3.hostIP" . }}
 | 
				
			||||||
 | 
					  {{- else if .Values.global.provisioningHostname }}
 | 
				
			||||||
 | 
					  IRONIC_URL_HOSTNAME: {{ .Values.global.provisioningHostname }}
 | 
				
			||||||
  {{- end }}
 | 
					  {{- end }}
 | 
				
			||||||
  IRONIC_ILO_USE_SWIFT: "false"
 | 
					 | 
				
			||||||
  IRONIC_ILO_USE_WEB_SERVER_FOR_IMAGES: "true"
 | 
					 | 
				
			||||||
  IRONIC_FAST_TRACK: "true"
 | 
					  IRONIC_FAST_TRACK: "true"
 | 
				
			||||||
  LISTEN_ALL_INTERFACES: "true"
 | 
					  LISTEN_ALL_INTERFACES: "{{ .Values.listenOnAll }}"
 | 
				
			||||||
  {{- if .Values.global.ironicIP }}
 | 
					 | 
				
			||||||
  IRONIC_IP: {{ .Values.global.ironicIP }}
 | 
					 | 
				
			||||||
  {{- end }}
 | 
					 | 
				
			||||||
  {{- if  ( .Values.global.enable_tls ) }}
 | 
					  {{- if  ( .Values.global.enable_tls ) }}
 | 
				
			||||||
  RESTART_CONTAINER_CERTIFICATE_UPDATED: "true"
 | 
					  RESTART_CONTAINER_CERTIFICATE_UPDATED: "true"
 | 
				
			||||||
  IRONIC_KERNEL_PARAMS: {{ .Values.global.ironicKernelParams }} tls.enabled=true
 | 
					  IRONIC_KERNEL_PARAMS: {{ .Values.global.ironicKernelParams }} tls.enabled=true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,8 +14,9 @@ spec:
 | 
				
			|||||||
    type: Recreate
 | 
					    type: Recreate
 | 
				
			||||||
  template:
 | 
					  template:
 | 
				
			||||||
    metadata:
 | 
					    metadata:
 | 
				
			||||||
      {{- with .Values.podAnnotations }}
 | 
					 | 
				
			||||||
      annotations:
 | 
					      annotations:
 | 
				
			||||||
 | 
					        checksum/config-env: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
 | 
				
			||||||
 | 
					        {{- with .Values.podAnnotations }}
 | 
				
			||||||
          {{- toYaml . | nindent 8 }}
 | 
					          {{- toYaml . | nindent 8 }}
 | 
				
			||||||
        {{- end }}
 | 
					        {{- end }}
 | 
				
			||||||
      labels:
 | 
					      labels:
 | 
				
			||||||
@@ -38,10 +39,10 @@ spec:
 | 
				
			|||||||
        - /bin/runhttpd
 | 
					        - /bin/runhttpd
 | 
				
			||||||
        envFrom:
 | 
					        envFrom:
 | 
				
			||||||
        - configMapRef:
 | 
					        - configMapRef:
 | 
				
			||||||
            name: ironic-bmo
 | 
					            name: ironic
 | 
				
			||||||
        livenessProbe:
 | 
					        livenessProbe:
 | 
				
			||||||
          exec:
 | 
					          exec:
 | 
				
			||||||
            command: ["sh", "-c", "curl -sSfk https://127.0.0.1:6385"]
 | 
					            command: ["sh", "-c", "{{ include "ironic.probeCommand" . }}"]
 | 
				
			||||||
          failureThreshold: 10
 | 
					          failureThreshold: 10
 | 
				
			||||||
          initialDelaySeconds: 30
 | 
					          initialDelaySeconds: 30
 | 
				
			||||||
          periodSeconds: 30
 | 
					          periodSeconds: 30
 | 
				
			||||||
@@ -59,7 +60,7 @@ spec:
 | 
				
			|||||||
        {{- end }}
 | 
					        {{- end }}
 | 
				
			||||||
        readinessProbe:
 | 
					        readinessProbe:
 | 
				
			||||||
          exec:
 | 
					          exec:
 | 
				
			||||||
            command: ["sh", "-c", "curl -sSfk https://127.0.0.1:6385"]
 | 
					            command: ["sh", "-c", "{{ include "ironic.probeCommand" . }}"]
 | 
				
			||||||
          failureThreshold: 10
 | 
					          failureThreshold: 10
 | 
				
			||||||
          initialDelaySeconds: 30
 | 
					          initialDelaySeconds: 30
 | 
				
			||||||
          periodSeconds: 30
 | 
					          periodSeconds: 30
 | 
				
			||||||
@@ -96,7 +97,7 @@ spec:
 | 
				
			|||||||
        - /bin/runironic
 | 
					        - /bin/runironic
 | 
				
			||||||
        envFrom:
 | 
					        envFrom:
 | 
				
			||||||
        - configMapRef:
 | 
					        - configMapRef:
 | 
				
			||||||
            name: ironic-bmo
 | 
					            name: ironic
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
        {{- if .Values.global.enable_basicAuth }}
 | 
					        {{- if .Values.global.enable_basicAuth }}
 | 
				
			||||||
        - name: IRONIC_HTPASSWD
 | 
					        - name: IRONIC_HTPASSWD
 | 
				
			||||||
@@ -169,7 +170,7 @@ spec:
 | 
				
			|||||||
        - /bin/rundnsmasq
 | 
					        - /bin/rundnsmasq
 | 
				
			||||||
        envFrom:
 | 
					        envFrom:
 | 
				
			||||||
        - configMapRef:
 | 
					        - configMapRef:
 | 
				
			||||||
            name: ironic-bmo
 | 
					            name: ironic
 | 
				
			||||||
        livenessProbe:
 | 
					        livenessProbe:
 | 
				
			||||||
          exec:
 | 
					          exec:
 | 
				
			||||||
            command:
 | 
					            command:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ metadata:
 | 
				
			|||||||
  {{- end }}
 | 
					  {{- end }}
 | 
				
			||||||
spec:
 | 
					spec:
 | 
				
			||||||
  type: {{ .Values.service.type }}
 | 
					  type: {{ .Values.service.type }}
 | 
				
			||||||
 | 
					  ipFamilyPolicy: PreferDualStack
 | 
				
			||||||
  ports:
 | 
					  ports:
 | 
				
			||||||
  {{- $enableTLS := .Values.global.enable_tls }}
 | 
					  {{- $enableTLS := .Values.global.enable_tls }}
 | 
				
			||||||
  {{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
 | 
					  {{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,12 @@ global:
 | 
				
			|||||||
  # IP Address assigned to network interface on provisioning network
 | 
					  # IP Address assigned to network interface on provisioning network
 | 
				
			||||||
  provisioningIP: ""
 | 
					  provisioningIP: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Fully Qualified Domain Name used by Ironic for both binding (to the
 | 
				
			||||||
 | 
					  # associated IPv4 and/or IPv6 addresses) and exposing the API, dnsmask and
 | 
				
			||||||
 | 
					  # media, also used by BMO. Note, this is the only way to enable a fully
 | 
				
			||||||
 | 
					  # working dual-stack configuration.
 | 
				
			||||||
 | 
					  provisioningHostname: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Whether the NIC names should be predictable or not
 | 
					  # Whether the NIC names should be predictable or not
 | 
				
			||||||
  predictableNicNames: "true"
 | 
					  predictableNicNames: "true"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,15 +58,17 @@ global:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
replicaCount: 1
 | 
					replicaCount: 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					listenOnAll: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
images:
 | 
					images:
 | 
				
			||||||
  ironic:
 | 
					  ironic:
 | 
				
			||||||
    repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
 | 
					    repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
 | 
				
			||||||
    pullPolicy: IfNotPresent
 | 
					    pullPolicy: IfNotPresent
 | 
				
			||||||
    tag: 26.1.2.4
 | 
					    tag: 29.0.4.1
 | 
				
			||||||
  ironicIPADownloader:
 | 
					  ironicIPADownloader:
 | 
				
			||||||
    repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader
 | 
					    repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader
 | 
				
			||||||
    pullPolicy: IfNotPresent
 | 
					    pullPolicy: IfNotPresent
 | 
				
			||||||
    tag: 3.0.6
 | 
					    tag: 3.0.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nameOverride: ""
 | 
					nameOverride: ""
 | 
				
			||||||
fullnameOverride: ""
 | 
					fullnameOverride: ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: 10.6.7
 | 
					appVersion: "10.11"
 | 
				
			||||||
description: A Helm chart for MariaDB, used by Metal3
 | 
					description: A Helm chart for MariaDB, used by Metal3
 | 
				
			||||||
name: mariadb
 | 
					name: mariadb
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: 0.5.4
 | 
					version: 0.6.1
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								metal3-chart/charts/mariadb/templates/configmap-mariadb.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								metal3-chart/charts/mariadb/templates/configmap-mariadb.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: ConfigMap 
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: mariadb-config
 | 
				
			||||||
 | 
					  labels:
 | 
				
			||||||
 | 
					    {{- include "mariadb.labels" . | nindent 4 }}
 | 
				
			||||||
 | 
					data:
 | 
				
			||||||
 | 
					  ironic.conf: |
 | 
				
			||||||
 | 
					    [mariadb]
 | 
				
			||||||
 | 
					    max_connections 64
 | 
				
			||||||
 | 
					    max_heap_table_size 1M
 | 
				
			||||||
 | 
					    innodb_buffer_pool_size 5M
 | 
				
			||||||
 | 
					    innodb_log_buffer_size 512K
 | 
				
			||||||
@@ -5,4 +5,7 @@ metadata:
 | 
				
			|||||||
  labels:
 | 
					  labels:
 | 
				
			||||||
    {{- include "mariadb.labels" . | nindent 4 }}
 | 
					    {{- include "mariadb.labels" . | nindent 4 }}
 | 
				
			||||||
data:
 | 
					data:
 | 
				
			||||||
  RESTART_CONTAINER_CERTIFICATE_UPDATED: "false"
 | 
					  MARIADB_USER: ironic
 | 
				
			||||||
 | 
					  MARIADB_RANDOM_ROOT_PASSWORD: "yes"
 | 
				
			||||||
 | 
					  MARIADB_DATABASE: ironic
 | 
				
			||||||
 | 
					  MARIADB_AUTO_UPGRADE: "yes"
 | 
				
			||||||
@@ -25,23 +25,50 @@ spec:
 | 
				
			|||||||
      serviceAccountName: {{ include "mariadb.serviceAccountName" . }}
 | 
					      serviceAccountName: {{ include "mariadb.serviceAccountName" . }}
 | 
				
			||||||
      securityContext:
 | 
					      securityContext:
 | 
				
			||||||
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
 | 
					        {{- toYaml .Values.podSecurityContext | nindent 8 }}
 | 
				
			||||||
 | 
					      initContainers:
 | 
				
			||||||
 | 
					      # This would run during entrypoint if run as root
 | 
				
			||||||
 | 
					      - name: set-volume-owners
 | 
				
			||||||
 | 
					        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
 | 
				
			||||||
 | 
					        imagePullPolicy: {{ .Values.image.pullPolicy }}
 | 
				
			||||||
 | 
					        securityContext:
 | 
				
			||||||
 | 
					            runAsUser: 0
 | 
				
			||||||
 | 
					            allowPrivilegeEscalation: true
 | 
				
			||||||
 | 
					            capabilities:
 | 
				
			||||||
 | 
					              drop:
 | 
				
			||||||
 | 
					              - ALL
 | 
				
			||||||
 | 
					              add:
 | 
				
			||||||
 | 
					              - CHOWN
 | 
				
			||||||
 | 
					              - FOWNER
 | 
				
			||||||
 | 
					              - DAC_OVERRIDE
 | 
				
			||||||
 | 
					            seccompProfile:
 | 
				
			||||||
 | 
					              type: RuntimeDefault
 | 
				
			||||||
 | 
					        volumeMounts:
 | 
				
			||||||
 | 
					          - name: mariadb-conf
 | 
				
			||||||
 | 
					            mountPath: /etc/mysql/conf.d
 | 
				
			||||||
 | 
					          - name: mariadb-run
 | 
				
			||||||
 | 
					            mountPath: /run/mysql
 | 
				
			||||||
 | 
					          {{- $volmounts }}
 | 
				
			||||||
 | 
					        command: ['bash', '-c', 'source /usr/local/bin/docker-entrypoint.sh && docker_create_db_directories']
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          - name: DATADIR
 | 
				
			||||||
 | 
					            value: /var/lib/mysql
 | 
				
			||||||
 | 
					          - name: SOCKET
 | 
				
			||||||
 | 
					            value: /run/mysql/mysql.sock
 | 
				
			||||||
      containers:
 | 
					      containers:
 | 
				
			||||||
      - name: mariadb
 | 
					      - name: mariadb
 | 
				
			||||||
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
 | 
					        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
 | 
				
			||||||
        imagePullPolicy: {{ .Values.image.pullPolicy }}
 | 
					        imagePullPolicy: {{ .Values.image.pullPolicy }}
 | 
				
			||||||
        securityContext:
 | 
					        securityContext:
 | 
				
			||||||
          {{- toYaml .Values.securityContext | nindent 12 }}
 | 
					          {{- toYaml .Values.securityContext | nindent 12 }}
 | 
				
			||||||
 | 
					        envFrom:
 | 
				
			||||||
 | 
					          - configMapRef:
 | 
				
			||||||
 | 
					              name: mariadb-cm
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          - name: MARIADB_PASSWORD
 | 
					          - name: MARIADB_PASSWORD
 | 
				
			||||||
            valueFrom:
 | 
					            valueFrom:
 | 
				
			||||||
              secretKeyRef:
 | 
					              secretKeyRef:
 | 
				
			||||||
                key: password
 | 
					                key: password
 | 
				
			||||||
                name: ironic-mariadb
 | 
					                name: ironic-mariadb
 | 
				
			||||||
          - name: RESTART_CONTAINER_CERTIFICATE_UPDATED
 | 
					 | 
				
			||||||
            valueFrom:
 | 
					 | 
				
			||||||
              configMapKeyRef:
 | 
					 | 
				
			||||||
                name: mariadb-cm
 | 
					 | 
				
			||||||
                key: RESTART_CONTAINER_CERTIFICATE_UPDATED
 | 
					 | 
				
			||||||
        lifecycle:
 | 
					        lifecycle:
 | 
				
			||||||
          preStop:
 | 
					          preStop:
 | 
				
			||||||
            exec:
 | 
					            exec:
 | 
				
			||||||
@@ -52,9 +79,9 @@ spec:
 | 
				
			|||||||
        livenessProbe:
 | 
					        livenessProbe:
 | 
				
			||||||
          exec:
 | 
					          exec:
 | 
				
			||||||
            command:
 | 
					            command:
 | 
				
			||||||
              - sh
 | 
					              - healthcheck.sh
 | 
				
			||||||
              - -c
 | 
					              - --connect
 | 
				
			||||||
              - mysqladmin status -uironic -p$(printenv MARIADB_PASSWORD)
 | 
					              - --innodb_initialized
 | 
				
			||||||
          failureThreshold: 10
 | 
					          failureThreshold: 10
 | 
				
			||||||
          initialDelaySeconds: 30
 | 
					          initialDelaySeconds: 30
 | 
				
			||||||
          periodSeconds: 30
 | 
					          periodSeconds: 30
 | 
				
			||||||
@@ -67,19 +94,29 @@ spec:
 | 
				
			|||||||
        readinessProbe:
 | 
					        readinessProbe:
 | 
				
			||||||
          exec:
 | 
					          exec:
 | 
				
			||||||
            command:
 | 
					            command:
 | 
				
			||||||
              - sh
 | 
					              - healthcheck.sh
 | 
				
			||||||
              - -c
 | 
					              - --connect
 | 
				
			||||||
              - mysqladmin status -uironic -p$(printenv MARIADB_PASSWORD)
 | 
					              - --innodb_initialized
 | 
				
			||||||
          failureThreshold: 10
 | 
					          failureThreshold: 10
 | 
				
			||||||
          initialDelaySeconds: 30
 | 
					          initialDelaySeconds: 30
 | 
				
			||||||
          periodSeconds: 30
 | 
					          periodSeconds: 30
 | 
				
			||||||
          successThreshold: 1
 | 
					          successThreshold: 1
 | 
				
			||||||
          timeoutSeconds: 10
 | 
					          timeoutSeconds: 10
 | 
				
			||||||
        volumeMounts:
 | 
					        volumeMounts:
 | 
				
			||||||
 | 
					            - name: mariadb-conf
 | 
				
			||||||
 | 
					              mountPath: /etc/mysql/conf.d
 | 
				
			||||||
 | 
					            - name: mariadb-run
 | 
				
			||||||
 | 
					              mountPath: /run/mysql
 | 
				
			||||||
            {{- $volmounts }}
 | 
					            {{- $volmounts }}
 | 
				
			||||||
      {{- with .Values.global.nodeSelector }}
 | 
					      {{- with .Values.global.nodeSelector }}
 | 
				
			||||||
      nodeSelector:
 | 
					      nodeSelector:
 | 
				
			||||||
        {{- toYaml . | nindent 8 }}
 | 
					        {{- toYaml . | nindent 8 }}
 | 
				
			||||||
      {{- end }}
 | 
					      {{- end }}
 | 
				
			||||||
      volumes:
 | 
					      volumes:
 | 
				
			||||||
 | 
					        - name: mariadb-conf
 | 
				
			||||||
 | 
					          configMap:
 | 
				
			||||||
 | 
					            name: mariadb-config
 | 
				
			||||||
 | 
					        - name: mariadb-run
 | 
				
			||||||
 | 
					          emptyDir:
 | 
				
			||||||
 | 
					            sizeLimit: 20Mi
 | 
				
			||||||
        {{- $volumes }}
 | 
					        {{- $volumes }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ metadata:
 | 
				
			|||||||
  labels:
 | 
					  labels:
 | 
				
			||||||
    {{- include "mariadb.labels" . | nindent 4 }}
 | 
					    {{- include "mariadb.labels" . | nindent 4 }}
 | 
				
			||||||
spec:
 | 
					spec:
 | 
				
			||||||
 | 
					  ipFamilyPolicy: PreferDualStack
 | 
				
			||||||
  type: {{ .Values.service.type }}
 | 
					  type: {{ .Values.service.type }}
 | 
				
			||||||
  selector:
 | 
					  selector:
 | 
				
			||||||
    {{- include "mariadb.selectorLabels" . | nindent 4 }}
 | 
					    {{- include "mariadb.selectorLabels" . | nindent 4 }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,9 +12,9 @@ service:
 | 
				
			|||||||
    targetPort: 3306
 | 
					    targetPort: 3306
 | 
				
			||||||
 | 
					
 | 
				
			||||||
image:
 | 
					image:
 | 
				
			||||||
  repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/suse/mariadb
 | 
					  repository: registry.suse.com/suse/mariadb
 | 
				
			||||||
  pullPolicy: IfNotPresent
 | 
					  pullPolicy: IfNotPresent
 | 
				
			||||||
  tag: 10.6.15.1
 | 
					  tag: 10.11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nameOverride: ""
 | 
					nameOverride: ""
 | 
				
			||||||
fullnameOverride: ""
 | 
					fullnameOverride: ""
 | 
				
			||||||
@@ -31,8 +31,8 @@ serviceAccount:
 | 
				
			|||||||
podAnnotations: {}
 | 
					podAnnotations: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
podSecurityContext:
 | 
					podSecurityContext:
 | 
				
			||||||
  runAsUser: 10060
 | 
					  runAsUser: 60
 | 
				
			||||||
  fsGroup: 10060
 | 
					  fsGroup: 60
 | 
				
			||||||
 | 
					
 | 
				
			||||||
securityContext:
 | 
					securityContext:
 | 
				
			||||||
  allowPrivilegeEscalation: false
 | 
					  allowPrivilegeEscalation: false
 | 
				
			||||||
@@ -60,6 +60,7 @@ persistence:
 | 
				
			|||||||
volumeMounts:
 | 
					volumeMounts:
 | 
				
			||||||
  - name: mariadb-data-volume
 | 
					  - name: mariadb-data-volume
 | 
				
			||||||
    mountPath: /var/lib/mysql
 | 
					    mountPath: /var/lib/mysql
 | 
				
			||||||
 | 
					    subPath: data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  - name: mariadb-data-volume
 | 
					  - name: mariadb-data-volume
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,4 +3,4 @@ appVersion: 1.16.0
 | 
				
			|||||||
description: A Helm chart for Media, used by Metal3
 | 
					description: A Helm chart for Media, used by Metal3
 | 
				
			||||||
name: media
 | 
					name: media
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: 0.6.1
 | 
					version: 0.6.5
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ metadata:
 | 
				
			|||||||
  labels:
 | 
					  labels:
 | 
				
			||||||
    {{- include "media.labels" . | nindent 4 }}
 | 
					    {{- include "media.labels" . | nindent 4 }}
 | 
				
			||||||
spec:
 | 
					spec:
 | 
				
			||||||
 | 
					  ipFamilyPolicy: PreferDualStack
 | 
				
			||||||
  type: {{ .Values.service.type }}
 | 
					  type: {{ .Values.service.type }}
 | 
				
			||||||
  ports:
 | 
					  ports:
 | 
				
			||||||
    - port: {{ .Values.service.port }}
 | 
					    - port: {{ .Values.service.port }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ replicaCount: 1
 | 
				
			|||||||
image:
 | 
					image:
 | 
				
			||||||
  repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
 | 
					  repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
 | 
				
			||||||
  pullPolicy: IfNotPresent
 | 
					  pullPolicy: IfNotPresent
 | 
				
			||||||
  tag: 26.1.2.2
 | 
					  tag: 29.0.4.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
imagePullSecrets: []
 | 
					imagePullSecrets: []
 | 
				
			||||||
nameOverride: ""
 | 
					nameOverride: ""
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,3 +60,18 @@ Create the name of the service account to use
 | 
				
			|||||||
{{- default "default" .Values.serviceAccount.name }}
 | 
					{{- default "default" .Values.serviceAccount.name }}
 | 
				
			||||||
{{- end }}
 | 
					{{- end }}
 | 
				
			||||||
{{- end }}
 | 
					{{- end }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{/*
 | 
				
			||||||
 | 
					Produce the correct IP or hostname for Ironic provisioning
 | 
				
			||||||
 | 
					*/}}
 | 
				
			||||||
 | 
					{{- define "metal3.hostIP" -}}
 | 
				
			||||||
 | 
					{{- with .Values.global }}
 | 
				
			||||||
 | 
					{{- if and .provisioningHostname (or .provisioningIP .ironicIP) }}
 | 
				
			||||||
 | 
					{{  fail "Please provide either provisioningHostname or provisioningIP or ironicIP" }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- if and .provisioningIP .ironicIP }}
 | 
				
			||||||
 | 
					{{  fail "Please provide either ironicIP or provisioningIP" }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- coalesce .provisioningIP .ironicIP }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 | 
					{{- end }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,6 +60,15 @@ global:
 | 
				
			|||||||
  # IP Address assigned to network interface on provisioning network
 | 
					  # IP Address assigned to network interface on provisioning network
 | 
				
			||||||
  provisioningIP: ""
 | 
					  provisioningIP: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Fully Qualified Domain Name used by Ironic for both binding (to the 
 | 
				
			||||||
 | 
					  # associated IPv4 and/or IPv6 addresses) and exposing the API, dnsmask and
 | 
				
			||||||
 | 
					  # media, also used by BMO. Note, this is the only way to enable a fully
 | 
				
			||||||
 | 
					  # working dual-stack configuration.
 | 
				
			||||||
 | 
					  provisioningHostname: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Hostname or IP for accessing the Ironic API server from a non-provisioning network
 | 
				
			||||||
 | 
					  externalHttpHost: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Name for the MariaDB service
 | 
					  # Name for the MariaDB service
 | 
				
			||||||
  databaseServiceName: metal3-mariadb
 | 
					  databaseServiceName: metal3-mariadb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,8 +124,8 @@ metal3-mariadb:
 | 
				
			|||||||
  persistence:
 | 
					  persistence:
 | 
				
			||||||
    storageClass: ""
 | 
					    storageClass: ""
 | 
				
			||||||
  image:
 | 
					  image:
 | 
				
			||||||
    repository: "registry.suse.com/edge/mariadb"
 | 
					    repository: "registry.suse.com/suse/mariadb"
 | 
				
			||||||
    tag: "10.6.15.1"
 | 
					    tag: "10.11"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Baremetal Operator
 | 
					# Baremetal Operator
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%-%RELEASE%
 | 
				
			||||||
#!BuildVersion: 15.6
 | 
					 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user