Skip to content

Conversation

withfig-bot
Copy link
Contributor

Automated PR for latest AWS CLI release by https://github.com/withfig/aws-cli-plugin

@withfig-bot
Copy link
Contributor Author

Overview

src/aws/batch.ts:

Info:

src/aws/codeartifact.ts:

Info:

src/aws/bedrock.ts:

Info:

src/aws/docdb.ts:

Info:

src/aws/codebuild.ts:

Info:

src/aws/deadline.ts:

Info:

src/aws/lambda.ts:

Info:

Single Functions:

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-layer-versions",
        ["--layer-name"],
        "LayerVersions",
        "Version"
      );
    }

postProcess:

 function (out, tokens) {
      try {
        const accountId = JSON.parse(out)["Account"];
        return [{ name: accountId }, { name: "*" }];
      } catch (error) {
        console.error(error);
      }
      return [];
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "get-layer-version-policy",
        ["--layer-name", "--version-number"],
        "RevisionId"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "get-policy",
        ["--function-name"],
        "RevisionId"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "get-function",
        ["--function-name"],
        "Configuration",
        "RevisionId"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-aliases",
        ["--function-name"],
        "Aliases",
        "Name"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      try {
        const idx = tokens.indexOf("--function-name");
        const args = [
          "lambda",
          "list-versions-by-function",
          "--function-name",
          tokens[idx + 1],
        ];
        const { stdout } = await executeShellCommand({
          command: "aws",
          args,
        });
        const list = JSON.parse(stdout)["Versions"];
        return list
          .filter((elm) => elm.Version !== "$LATEST")
          .map((elm) => {
            const version = elm["Version"];
            return {
              insertValue: version,
              name: version,
              displayName: `version: ${version}`,
              icon: "fig://icon?type=aws",
            };
          });
      } catch (e) {
        console.log(e);
      }
      return [];
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomSIDGenerator(tokens, executeShellCommand, "get-policy", [
        "--function-name",
      ]);
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomSIDGenerator(
        tokens,
        executeShellCommand,
        "get-layer-version-policy",
        ["--layer-name", "--version-number"]
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      // Getting sqs queues is implemented, although it has a huge performance toll.
      // It seems Fig rejects long-running promises after a time.
      // I am currently investigating if this is the case.
      // const result = await Promise.all([
      //   getResultList(tokens, executeShellCommand, "aws sqs list-queues", "QueueUrls"),
      //   getResultList(tokens, executeShellCommand, "aws kinesis list-streams", "StreamNames")
      // ]);
      // const objects = result.flat().map((elm) => {
      //   if (elm.includes("sqs")) {
      //     return ({
      //       command: `aws sqs get-queue-attributes --queue-url ${elm} --attribute-names QueueArn`,
      //       parentKey: "Attributes",
      //       childKey: "QueueArn",
      //     })
      //   }
      //   return ({
      //     command: `aws kinesis describe-stream --stream-name ${elm}`,
      //     parentKey: "StreamDescription",
      //     childKey: "StreamARN",
      //   })
      // });
      return MultiSuggestionsGenerator(tokens, executeShellCommand, [
        {
          command: ["dynamodbstreams", "list-streams"],
          parentKey: "Streams",
          childKey: "StreamArn",
        },
        {
          command: ["kafka", "list-clusters"],
          parentKey: "ClusterInfoList",
          childKey: "ClusterArn",
        },
        //...objects,
      ]);
    }

custom:

 async function (tokens, executeShellCommand) {
      // Getting sqs queues is implemented, although it has a huge performance toll.
      // It seems Fig rejects long-running promises after a time.
      // I am currently investigating if this is the case.
      // const out = await executeShellCommand("aws sqs list-queues");
      // const list = JSON.parse(out)["QueueUrls"];
      // const sqsObjects = list.map((url) => ({
      //   command: `aws sqs get-queue-attributes --queue-url ${url} --attribute-names QueueArn`,
      //   parentKey: "Attributes",
      //   childKey: "QueueArn",
      // }));
      return MultiSuggestionsGenerator(tokens, executeShellCommand, [
        {
          command: ["sns", "list-topics"],
          parentKey: "Topics",
          childKey: "TopicArn",
        },
        {
          command: ["events", "list-event-buses"],
          parentKey: "EventBuses",
          childKey: "Arn",
        },
        {
          command: ["lambda", "list-functions"],
          parentKey: "Functions",
          childKey: "FunctionArn",
        },
        // ...sqsObjects,
      ]);
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Roles", "RoleName");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Keys", "KeyArn");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Layers", "LayerArn");
    }

postProcess:

 function (out) {
      try {
        const list = JSON.parse(out)["Layers"];
        return list.map((elm) => {
          return {
            name: elm["LatestMatchingVersion"]["LayerVersionArn"],
            icon: "fig://icon?type=aws",
          };
        });
      } catch (e) {
        console.log(e);
      }
      return [];
    }

postProcess:

 function (out) {
      try {
        const list = JSON.parse(out)["FileSystems"];
        return list.map((elm) => {
          const name = ("FileSystemArn" ? elm["FileSystemArn"] : elm) as string;
          return {
            name: `Arn=${name},LocalMountPath=/mnt/`,
            icon: "fig://icon?type=aws",
          };
        });
      } catch (e) {
        console.log(e);
      }
      return [];
    }

postProcess:

 function (out) {
      return postPrecessGenerator(
        out,
        "CodeSigningConfigs",
        "CodeSigningConfigArn"
      );
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "EventSourceMappings", "UUID");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Functions", "CodeSha256");
    }

postProcess:

 function (out, tokens) {
      try {
        return out.split("\n").map((line) => {
          const parts = line.split(/\s+/);
          // sub prefix
          if (!parts.length) {
            return [];
          }
          return {
            name: parts[parts.length - 1],
          };
        }) as Fig.Suggestion[];
      } catch (error) {
        console.error(error);
      }
      return [];
    }

custom:

 async function (tokens, executeShellCommand) {
      try {
        const idx = tokens.indexOf("--s3-bucket");
        const args = [
          "s3",
          "ls",
          `${_prefixS3}${tokens[idx + 1]}`,
          "--recursive",
          "--page-size",
          "1000",
        ];
        const { stdout } = await executeShellCommand({
          command: "aws",
          args,
        });
        if (stdout == "") {
          return [];
        }
        if (stdout.trim() === _prefixS3) {
          return [
            {
              name: _prefixS3,
              insertValue: _prefixS3,
            },
          ];
        }
        return stdout.split("\n").map((line) => {
          const parts = line.split(/\s+/);
          // sub prefix
          if (!parts.length) {
            return [];
          }
          return {
            name: parts[parts.length - 1],
          };
        }) as Fig.Suggestion[];
      } catch (error) {
        console.error(error);
      }
      return [];
    }

custom:

 async function (tokens, executeShellCommand) {
      try {
        const bucketIdx = tokens.indexOf("--s3-bucket");
        const objectIdx = tokens.indexOf("--s3-key");
        const args = [
          "s3api",
          "list-object-versions",
          "--bucket",
          tokens[bucketIdx + 1],
          "--prefix",
          tokens[objectIdx + 1],
        ];
        const { stdout } = await executeShellCommand({
          command: "aws",
          args,
        });
        if (stdout == "") {
          return [];
        }
        if (stdout.trim() === _prefixS3) {
          return [
            {
              name: _prefixS3,
              insertValue: _prefixS3,
            },
          ];
        }
        const list = JSON.parse(stdout)["Versions"];
        return list
          .filter((elm) => elm["VersionId"] !== "null")
          .map((elm) => {
            return {
              name: elm["VersionId"],
              icon: "fig://icon?type=aws",
            };
          });
      } catch (e) {
        console.log(e);
      }
      return [];
    }

URLs:

  • https://opensource.org/licenses/MIT.

src/aws/ecs.ts:

Info:

URLs:

  • http://169.254.169.254/latest/dynamic/instance-identity/document/
  • http://169.254.169.254/latest/dynamic/instance-identity/signature/

src/aws/s3api.ts:

Info:

Single Functions:

postProcess:

 function (out) {
    const json = JSON.parse(out);
    return json.Buckets.map((bucket) => {
      let date;
      try {
        date = new Date(bucket.CreationDate).toLocaleDateString();
      } catch (e) {
        date = bucket.CreationDate;
      }
      return {
        name: bucket.Name,
        description: `Created: ${date}`,
      };
    });
  }

URLs:

  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com.
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://www.rfc-editor.org/rfc/rfc9110.html#name-range.
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com.
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • http://acs.amazonaws.com/groups/s3/LogDelivery
  • http://www.example.com
  • http://www.w3.org/2001/XMLSchema-instance
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://s3express-control.region_code.amazonaws.com/bucket-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
  • https://www.rfc-editor.org/rfc/rfc6266#section-4
  • https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding
  • https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length
  • https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type
  • https://www.rfc-editor.org/rfc/rfc7234#section-5.3
  • http://www.example.com/
  • http://www.w3.org/2001/XMLSchema-instance
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
  • https://bucket_name.s3express-az_id.region.amazonaws.com/key-name

src/aws/iam.ts:

Info:

Single Functions:

postProcess:

 function (out, tokens) {
      try {
        const accountId = JSON.parse(out)["Account"];
        return [{ name: `arn:aws:iam::${accountId}-ID:root` }];
      } catch (error) {
        console.error(error);
      }
      return [];
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "OpenIDConnectProviderList", "Arn");
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "get-open-id-connect-provider",
        "--open-id-connect-provider-arn",
        "ClientIDList"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "get-open-id-connect-provider",
        "--open-id-connect-provider-arn",
        "ThumbprintList"
      );
    }

postProcess:

 function (out) {
      return postPrecessGenerator(
        out,
        "InstanceProfiles",
        "InstanceProfileName"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      try {
        const idx = tokens.indexOf("--instance-profile-name");
        if (idx < 0) {
          return [];
        }
        const param = tokens[idx + 1];
        const { stdout } = await executeShellCommand({
          command: "aws",
          args: [
            "iam",
            "get-instance-profile",
            "--instance-profile-name",
            param,
          ],
        });
        const policies = JSON.parse(stdout)["InstanceProfile"];
        return policies["Roles"].map((elm) => {
          return {
            name: elm["RoleName"],
          };
        });
      } catch (e) {
        console.log(e);
      }
      return [];
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Users", "UserName");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Users", "Arn");
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-user-policies",
        "--user-name",
        "PolicyNames"
      );
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Groups", "GroupName");
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "get-group",
        "--group-name",
        "Users",
        "UserName"
      );
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Policies", "Arn");
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-policy-versions",
        "--policy-arn",
        "Versions",
        "VersionId"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-group-policies",
        "--group-name",
        "PolicyNames"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-attached-group-policies",
        "--group-name",
        "AttachedPolicies",
        "PolicyArn"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-attached-group-policies",
        "--group-name",
        "AttachedPolicies",
        "PolicyName"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-attached-role-policies",
        "--role-name",
        "AttachedPolicies",
        "PolicyArn"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-attached-user-policies",
        "--user-name",
        "AttachedPolicies",
        "PolicyArn"
      );
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "Roles", "RoleName");
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-role-policies",
        "--role-name",
        "PolicyNames"
      );
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "MFADevices", "SerialNumber");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "VirtualMFADevices", "SerialNumber");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "AccessKeyMetadata", "AccessKeyId");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "AccountAliases");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "SAMLProviderList", "Arn");
    }

postProcess:

 function (out) {
      return postPrecessGenerator(out, "SSHPublicKeys", "SSHPublicKeyId");
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-ssh-public-keys",
        "--user-name",
        "SSHPublicKeys",
        "SSHPublicKeyId"
      );
    }

postProcess:

 function (out) {
      return postPrecessGenerator(
        out,
        "ServerCertificateMetadataList",
        "ServerCertificateName"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-service-specific-credentials",
        "--user-name",
        "ServiceSpecificCredentials",
        "ServiceSpecificCredentialId"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-signing-certificates",
        "--user-name",
        "Certificates",
        "CertificateId"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return MultiSuggestionsGenerator(tokens, executeShellCommand, [
        ...identityStruct,
        {
          command: ["iam", "list-policies", "--scope", "Local"],
          parentKey: "Policies",
          childKey: "Arn",
        },
      ]);
    }

custom:

 async function (tokens, executeShellCommand) {
      return MultiSuggestionsGenerator(
        tokens,
        executeShellCommand,
        identityStruct
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-instance-profile-tags",
        "--instance-profile-name",
        "Tags",
        "Key"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-mfa-device-tags",
        "--serial-number",
        "Tags",
        "Key"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-open-id-connect-provider-tags",
        "--open-id-connect-provider-arn",
        "Tags",
        "Key"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-policy-tags",
        "--policy-arn",
        "Tags",
        "Key"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-role-tags",
        "--role-name",
        "Tags",
        "Key"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-saml-provider-tags",
        "--saml-provider-arn",
        "Tags",
        "Key"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-server-certificate-tags",
        "--server-certificate-name",
        "Tags",
        "Key"
      );
    }

custom:

 async function (tokens, executeShellCommand) {
      return listCustomGenerator(
        tokens,
        executeShellCommand,
        "list-user-tags",
        "--user-name",
        "Tags",
        "Key"
      );
    }

URLs:

  • https://server.example.org
  • https://keys.server.example.com/openid-connect.
  • https://sts.amazonaws.com.

@withfig-bot
Copy link
Contributor Author

Hello @withfig-bot,
thank you very much for creating a Pull Request!
Here is a small checklist to get this PR merged as quickly as possible:

  • Do all subcommands / options which take arguments include the args property (args: {})?
  • Are all options modular? E.g. -a -u -x instead of -aux
  • Have all other checks passed?

Please add a 👍 as a reaction to this comment to show that you read this.

@grant0417 grant0417 merged commit aa4a20a into withfig:master Aug 21, 2024
5 checks passed
@withfig withfig locked and limited conversation to collaborators Aug 21, 2024
@withfig-bot withfig-bot deleted the auto-update/aws/c712a215-2631-4b36-a765-fb6ae79055db branch September 17, 2024 20:46
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants