2017-09-21 7 views
3

J'utilise AWS SDK PHP V3. Si je lance le code suivantAWS PHP SDK Filter Aws Résultat Objet

$result = $client->getAccountPasswordPolicy([]); 
$result = $result->toArray(); 

Il renvoie le résultat ci-dessous

Array 
(
    [PasswordPolicy] => Array 
     (
      [MinimumPasswordLength] => 6 
      [RequireSymbols] => 
      [RequireNumbers] => 
      [RequireUppercaseCharacters] => 1 
      [RequireLowercaseCharacters] => 
      [AllowUsersToChangePassword] => 
      [ExpirePasswords] => 
     ) 

    [@metadata] => Array 
     (
      [statusCode] => 200 
      [effectiveUri] => https://iam.amazonaws.com 
      [headers] => Array 
       (
        [x-amzn-requestid] => 437f79e9-9ee0-11e7-8a82-47e702eaf8eb 
        [content-type] => text/xml 
        [content-length] => 740 
        [date] => Thu, 21 Sep 2017 15:19:29 GMT 
        [connection] => close 
       ) 

      [transferStats] => Array 
       (
        [http] => Array 
         (
          [0] => Array 
           (
           ) 

         ) 

       ) 

     ) 

) 

Comment obtenir des résultats seulement RequireUppercaseCharacters ou RequireLowercaseCharacters en utilisant SDK AWS ou dois-je utiliser des fonctions de tableau pour filtrer les données?

Reference Link

Répondre

2

ah..you PARLONS JMESPath. vous pouvez obtenir ce que vous essayez de faire par

$result = $client->getAccountPasswordPolicy([]); 
$data = $result->search('PasswordPolicy.RequireUppercaseCharacters'); 

vous pouvez en savoir plus sur JMESPath here

+0

Oui cela fonctionnera mais comment filtrer avec $ resultat = $ client-> getAccountPasswordPolicy ([]); – niteshd22

+0

il n'y a pas de critères de filtrage dans cette méthode –

+0

Veuillez vous référer à ce [lien] (http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html). Il est dit que vous pouvez extraire plus explicitement des données du résultat. – niteshd22

1

Cela semble que ce n'est pas possible avec l'API actuelle. Bien qu'il puisse sembler que le paramètre method soit ouvert pour indiquer les éléments spécifiques dont vous avez besoin (parce qu'il s'agit d'un tableau), il n'y a aucun signe que ce soit le cas dans la documentation.

Comparez le documentation pour getAccountPasswordPolicy() avec, par exemple, ListPolicies(). Ce dernier dit explicitement:

You can filter the list of policies that is returned using the optional OnlyAttached, Scope, and PathPrefix parameters.

En revanche, la documentation pour getAccountPasswordPolicy() ne font aucune mention. Pas même une mention du paramètre. Le paramètre est mentionné cependant dans la signature de la méthode, ce qui me fait penser que cela pourrait venir dans une future version de l'API.

Le CLI documentation ne possède pas non plus de paramètres du même type, donc cela semble définitivement être quelque chose que vous ne pouvez pas faire pour le moment.

J'ai fait quelques tests, juste au cas où, sans succès:

$result = $client->getAccountPasswordPolicy(["RequireUppercaseCharacters"]); 

retours

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Found 1 error while validating the input provided for the GetAccountPasswordPolicy operation: must be an associative array. Found array(2)' in /Applications/MAMP/htdocs/awss3/vendor/aws/aws-sdk-php/src/Api/Validator.php:65

et en spécifiant un tableau associatif ne filtre rien:

$result = $client->getAccountPasswordPolicy(["PasswordPolicy" => ["RequireUppercaseCharacters"]]); 

Aws\Result Object 
(
    [data:Aws\Result:private] => Array 
     (
      [PasswordPolicy] => Array 
       (
        [MinimumPasswordLength] => 6 
        [RequireSymbols] => 
        [RequireNumbers] => 
        [RequireUppercaseCharacters] => 1 
        [RequireLowercaseCharacters] => 
        [AllowUsersToChangePassword] => 1 
        [ExpirePasswords] => 
        [HardExpiry] => 
       ) 

      [@metadata] => Array 
       (
        [statusCode] => 200 
        [effectiveUri] => https://iam.amazonaws.com 
        [headers] => Array 
         (
          // redacted 
         ) 

        [transferStats] => Array 
         (
          [http] => Array 
           (
            [0] => Array 
             (
             ) 

           ) 

         ) 

       ) 

     ) 

) 

Alors , vous êtes seulement l'option pour maintenant passe par les touches du tableau, comme toujours:

$result["PasswordPolicy"]["RequireUppercaseCharacters"]; 
+0

Dans doucumentation il est dit que "l'objet result contient une méthode search() qui vous permet d'extraire plus de données du résultat" de manière déclarative "mais je ne suis pas sûr de savoir comment faire. [link] (http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html) – niteshd22

+0

Avec CLI vous pouvez réellement passer le paramètre pour récupérer le résultat spécifique. Dans ce cas, la commande suivante ne retournera que RequireLowercaseCharacters 'aws iam get-compte-mot-de-passe -profile default -region ap-sud-1 --output json --query 'PasswordPolicy.RequireLowercaseCharacters'' – niteshd22