Redfish: implement obtaining AccountService config (#9403)

Example result from querying OpenBMC's bmcweb Redfish server:

```
    changed: false
    failed: false
    redfish_facts:
        accountservice_config:
            entries:
                '@odata.id': /redfish/v1/AccountService
                '@odata.type': '#AccountService.v1_15_0.AccountService'
                AccountLockoutDuration: 0
                AccountLockoutThreshold: 0
                Accounts:
                    '@odata.id': /redfish/v1/AccountService/Accounts
                ActiveDirectory:
                    Authentication:
                        AuthenticationType: UsernameAndPassword
                        Password: null
                        Username: ''
                    LDAPService:
                        SearchSettings:
                            BaseDistinguishedNames:
                            - ''
                            GroupsAttribute: ''
                            UsernameAttribute: ''
                    RemoteRoleMapping: []
                    ServiceAddresses:
                    - ''
                    ServiceEnabled: false
                Description: Account Service
                HTTPBasicAuth: Enabled
                HTTPBasicAuth@AllowableValues:
                - Enabled
                - Disabled
                Id: AccountService
                LDAP:
                    Authentication:
                        AuthenticationType: UsernameAndPassword
                        Password: null
                        Username: ''
                    Certificates:
                        '@odata.id': /redfish/v1/AccountService/LDAP/Certificates
                    LDAPService:
                        SearchSettings:
                            BaseDistinguishedNames:
                            - ''
                            GroupsAttribute: ''
                            UsernameAttribute: ''
                    RemoteRoleMapping: []
                    ServiceAddresses:
                    - ''
                    ServiceEnabled: false
                MaxPasswordLength: 20
                MinPasswordLength: 8
                MultiFactorAuth:
                    ClientCertificate:
                        CertificateMappingAttribute: CommonName
                        Certificates:
                            '@odata.id': /redfish/v1/AccountService/MultiFactorAuth/ClientCertificate/Certificates
                            '@odata.type': '#CertificateCollection.CertificateCollection'
                            Members: []
                            Members@odata.count: 0
                        Enabled: true
                        RespondToUnauthenticatedClients: true
                Name: Account Service
                Oem:
                    OpenBMC:
                        '@odata.id': /redfish/v1/AccountService#/Oem/OpenBMC
                        '@odata.type': '#OpenBMCAccountService.v1_0_0.AccountService'
                        AuthMethods:
                            BasicAuth: true
                            Cookie: true
                            SessionToken: true
                            TLS: true
                            XToken: true
                Roles:
                    '@odata.id': /redfish/v1/AccountService/Roles
                ServiceEnabled: true
            ret: true
```

Signed-off-by: Paul Fertser <fercerpav@gmail.com>
pull/9512/head
Paul Fertser 2025-01-02 17:26:31 +02:00 committed by GitHub
parent 655d943dbb
commit e853bdf6f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 31 additions and 1 deletions

View File

@ -0,0 +1,2 @@
minor_changes:
- redfish_info - add command ``GetAccountServiceConfig`` to get full information about AccountService configuration (https://github.com/ansible-collections/community.general/pull/9403).

View File

@ -3951,3 +3951,21 @@ class RedfishUtils(object):
"rsp_uri": rsp_uri "rsp_uri": rsp_uri
} }
return res return res
def get_accountservice_properties(self):
# Find the AccountService resource
response = self.get_request(self.root_uri + self.service_root)
if response['ret'] is False:
return response
data = response['data']
accountservice_uri = data.get("AccountService", {}).get("@odata.id")
if accountservice_uri is None:
return {'ret': False, 'msg': "AccountService resource not found"}
response = self.get_request(self.root_uri + accountservice_uri)
if response['ret'] is False:
return response
return {
'ret': True,
'entries': response['data']
}

View File

@ -199,6 +199,14 @@ EXAMPLES = r"""
username: "{{ username }}" username: "{{ username }}"
password: "{{ password }}" password: "{{ password }}"
- name: Get configuration of the AccountService
community.general.redfish_info:
category: Accounts
command: GetAccountServiceConfig
baseuri: "{{ baseuri }}"
username: "{{ username }}"
password: "{{ password }}"
- name: Get default system inventory and user information - name: Get default system inventory and user information
community.general.redfish_info: community.general.redfish_info:
category: Systems,Accounts category: Systems,Accounts
@ -396,7 +404,7 @@ CATEGORY_COMMANDS_ALL = {
"GetBiosAttributes", "GetBootOrder", "GetBootOverride", "GetVirtualMedia", "GetBiosRegistries"], "GetBiosAttributes", "GetBootOrder", "GetBootOverride", "GetVirtualMedia", "GetBiosRegistries"],
"Chassis": ["GetFanInventory", "GetPsuInventory", "GetChassisPower", "Chassis": ["GetFanInventory", "GetPsuInventory", "GetChassisPower",
"GetChassisThermals", "GetChassisInventory", "GetHealthReport", "GetHPEThermalConfig", "GetHPEFanPercentMin"], "GetChassisThermals", "GetChassisInventory", "GetHealthReport", "GetHPEThermalConfig", "GetHPEFanPercentMin"],
"Accounts": ["ListUsers"], "Accounts": ["ListUsers", "GetAccountServiceConfig"],
"Sessions": ["GetSessions"], "Sessions": ["GetSessions"],
"Update": ["GetFirmwareInventory", "GetFirmwareUpdateCapabilities", "GetSoftwareInventory", "Update": ["GetFirmwareInventory", "GetFirmwareUpdateCapabilities", "GetSoftwareInventory",
"GetUpdateStatus"], "GetUpdateStatus"],
@ -569,6 +577,8 @@ def main():
for command in command_list: for command in command_list:
if command == "ListUsers": if command == "ListUsers":
result["user"] = rf_utils.list_users() result["user"] = rf_utils.list_users()
elif command == "GetAccountServiceConfig":
result["accountservice_config"] = rf_utils.get_accountservice_properties()
elif category == "Update": elif category == "Update":
# execute only if we find UpdateService resources # execute only if we find UpdateService resources