Merge pull request #46207 from rkachach/fix_issue_55555

mgr/cephadm: fixing yaml parsing during bootstrap

Reviewed-by: Adam King <adking@redhat.com>
This commit is contained in:
Adam King 2022-05-17 17:44:11 -04:00 committed by GitHub
commit e01758e75b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 7 deletions

View File

@ -5308,7 +5308,7 @@ def _parse_yaml_docs(f: Iterable[str]) -> List[List[str]]:
docs = []
current_doc = [] # type: List[str]
for line in f:
if '---' in line:
if re.search(r'^---\s+', line):
if current_doc:
docs.append(current_doc)
current_doc = []

View File

@ -2018,7 +2018,8 @@ class TestPull:
class TestApplySpec:
def test_parse_yaml(self, cephadm_fs):
yaml = '''service_type: host
yaml = '''---
service_type: host
hostname: vm-00
addr: 192.168.122.44
labels:
@ -2030,16 +2031,46 @@ hostname: vm-01
addr: 192.168.122.247
labels:
- grafana
---
---
service_type: host
hostname: vm-02
addr: 192.168.122.165'''
addr: 192.168.122.165
---
---
service_type: rgw
service_id: myrgw
spec:
rgw_frontend_ssl_certificate: |
-----BEGIN PRIVATE KEY-----
V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
-----END CERTIFICATE-----
ssl: true
---
'''
cephadm_fs.create_file('spec.yml', contents=yaml)
retdic = [{'service_type': 'host', 'hostname': 'vm-00', 'addr': '192.168.122.44', 'labels': '- example1- example2'},
{'service_type': 'host', 'hostname': 'vm-01', 'addr': '192.168.122.247', 'labels': '- grafana'},
{'service_type': 'host', 'hostname': 'vm-02', 'addr': '192.168.122.165'}]
{'service_type': 'host', 'hostname': 'vm-02', 'addr': '192.168.122.165'},
{'service_id': 'myrgw',
'service_type': 'rgw',
'spec':
'rgw_frontend_ssl_certificate: |-----BEGIN PRIVATE '
'KEY-----V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=-----END '
'PRIVATE KEY----------BEGIN '
'CERTIFICATE-----V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=-----END '
'CERTIFICATE-----ssl: true'}]
with open('spec.yml') as f:
dic = cd.parse_yaml_objs(f)

View File

@ -1054,8 +1054,11 @@ Usage:
if inbuf:
if service_type or placement or unmanaged:
raise OrchestratorValidationError(usage)
content: Iterator = yaml.safe_load_all(inbuf)
yaml_objs: Iterator = yaml.safe_load_all(inbuf)
specs: List[Union[ServiceSpec, HostSpec]] = []
# YAML '---' document separator with no content generates
# None entries in the output. Let's skip them silently.
content = [o for o in yaml_objs if o is not None]
for s in content:
spec = json_to_generic_spec(s)