Skip to content

Commit e01758e

Browse files
authored
Merge pull request ceph#46207 from rkachach/fix_issue_55555
mgr/cephadm: fixing yaml parsing during bootstrap Reviewed-by: Adam King <adking@redhat.com>
2 parents 1564842 + 4af8a88 commit e01758e

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

src/cephadm/cephadm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5308,7 +5308,7 @@ def _parse_yaml_docs(f: Iterable[str]) -> List[List[str]]:
53085308
docs = []
53095309
current_doc = [] # type: List[str]
53105310
for line in f:
5311-
if '---' in line:
5311+
if re.search(r'^---\s+', line):
53125312
if current_doc:
53135313
docs.append(current_doc)
53145314
current_doc = []

src/cephadm/tests/test_cephadm.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2018,7 +2018,8 @@ def test_image(self, infer_local_ceph_image, get_image_info_from_inspect, logger
20182018
class TestApplySpec:
20192019

20202020
def test_parse_yaml(self, cephadm_fs):
2021-
yaml = '''service_type: host
2021+
yaml = '''---
2022+
service_type: host
20222023
hostname: vm-00
20232024
addr: 192.168.122.44
20242025
labels:
@@ -2030,16 +2031,46 @@ def test_parse_yaml(self, cephadm_fs):
20302031
addr: 192.168.122.247
20312032
labels:
20322033
- grafana
2033-
---
2034+
---
20342035
service_type: host
20352036
hostname: vm-02
2036-
addr: 192.168.122.165'''
2037+
addr: 192.168.122.165
2038+
---
2039+
---
2040+
service_type: rgw
2041+
service_id: myrgw
2042+
spec:
2043+
rgw_frontend_ssl_certificate: |
2044+
-----BEGIN PRIVATE KEY-----
2045+
V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
2046+
ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
2047+
IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
2048+
YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
2049+
ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
2050+
-----END PRIVATE KEY-----
2051+
-----BEGIN CERTIFICATE-----
2052+
V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
2053+
ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
2054+
IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
2055+
YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
2056+
ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
2057+
-----END CERTIFICATE-----
2058+
ssl: true
2059+
---
2060+
'''
20372061

20382062
cephadm_fs.create_file('spec.yml', contents=yaml)
2039-
20402063
retdic = [{'service_type': 'host', 'hostname': 'vm-00', 'addr': '192.168.122.44', 'labels': '- example1- example2'},
20412064
{'service_type': 'host', 'hostname': 'vm-01', 'addr': '192.168.122.247', 'labels': '- grafana'},
2042-
{'service_type': 'host', 'hostname': 'vm-02', 'addr': '192.168.122.165'}]
2065+
{'service_type': 'host', 'hostname': 'vm-02', 'addr': '192.168.122.165'},
2066+
{'service_id': 'myrgw',
2067+
'service_type': 'rgw',
2068+
'spec':
2069+
'rgw_frontend_ssl_certificate: |-----BEGIN PRIVATE '
2070+
'KEY-----V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=-----END '
2071+
'PRIVATE KEY----------BEGIN '
2072+
'CERTIFICATE-----V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=-----END '
2073+
'CERTIFICATE-----ssl: true'}]
20432074

20442075
with open('spec.yml') as f:
20452076
dic = cd.parse_yaml_objs(f)

src/pybind/mgr/orchestrator/module.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1054,8 +1054,11 @@ def apply_misc(self,
10541054
if inbuf:
10551055
if service_type or placement or unmanaged:
10561056
raise OrchestratorValidationError(usage)
1057-
content: Iterator = yaml.safe_load_all(inbuf)
1057+
yaml_objs: Iterator = yaml.safe_load_all(inbuf)
10581058
specs: List[Union[ServiceSpec, HostSpec]] = []
1059+
# YAML '---' document separator with no content generates
1060+
# None entries in the output. Let's skip them silently.
1061+
content = [o for o in yaml_objs if o is not None]
10591062
for s in content:
10601063
spec = json_to_generic_spec(s)
10611064

0 commit comments

Comments
 (0)