infra-cli 0.1.6__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {infra_cli-0.1.6 → infra_cli-0.3.0}/PKG-INFO +3 -1
- {infra_cli-0.1.6 → infra_cli-0.3.0}/pyproject.toml +3 -1
- infra_cli-0.3.0/src/infra/VERSION +5 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/__init__.py +7 -0
- infra_cli-0.3.0/src/infra/commands/docker.py +65 -0
- infra_cli-0.3.0/src/infra/commands/github.py +103 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/options.py +1 -3
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/setup.py +3 -1
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/context.py +2 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/doctor.py +12 -6
- infra_cli-0.3.0/src/infra/plugins/aws/describe_run.py +236 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ec2_cves.py +164 -60
- infra_cli-0.3.0/src/infra/plugins/aws/ec2_describe.py +179 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ec2_login.py +233 -17
- infra_cli-0.3.0/src/infra/plugins/aws/ec2_tag.py +205 -0
- infra_cli-0.3.0/src/infra/plugins/aws/ec2_volumes.py +369 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ecr_cves.py +130 -51
- infra_cli-0.3.0/src/infra/plugins/aws/ecr_describe.py +81 -0
- infra_cli-0.3.0/src/infra/plugins/aws/ecs_describe.py +88 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ecs_list_clusters.py +22 -1
- infra_cli-0.3.0/src/infra/plugins/aws/ecs_list_container_instances.py +356 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ecs_list_tasks.py +71 -21
- infra_cli-0.3.0/src/infra/plugins/aws/eks_describe.py +105 -0
- infra_cli-0.3.0/src/infra/plugins/aws/eks_list_clusters.py +199 -0
- infra_cli-0.3.0/src/infra/plugins/aws/eks_nodes.py +191 -0
- infra_cli-0.3.0/src/infra/plugins/aws/elasticache_auth.py +198 -0
- infra_cli-0.3.0/src/infra/plugins/aws/elasticache_describe.py +176 -0
- infra_cli-0.3.0/src/infra/plugins/aws/elasticache_rbac.py +760 -0
- infra_cli-0.3.0/src/infra/plugins/aws/export.py +348 -0
- infra_cli-0.3.0/src/infra/plugins/aws/firewall_describe.py +268 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/common.py +306 -47
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/ec2.py +42 -3
- infra_cli-0.3.0/src/infra/plugins/aws/inventory/ecr_repositories.py +161 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/elasticache.py +20 -8
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/elasticache_usage.py +25 -12
- infra_cli-0.3.0/src/infra/plugins/aws/inventory/firewall.py +561 -0
- infra_cli-0.3.0/src/infra/plugins/aws/inventory/msk.py +411 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/opensearch.py +9 -2
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/rds.py +9 -2
- infra_cli-0.3.0/src/infra/plugins/aws/inventory/ssm_parameters.py +135 -0
- infra_cli-0.3.0/src/infra/plugins/aws/inventory/vpc.py +205 -0
- infra_cli-0.3.0/src/infra/plugins/aws/inventory/vpc_network.py +725 -0
- infra_cli-0.3.0/src/infra/plugins/aws/msk_describe.py +173 -0
- infra_cli-0.3.0/src/infra/plugins/aws/msk_topics.py +1298 -0
- infra_cli-0.3.0/src/infra/plugins/aws/opensearch_describe.py +136 -0
- infra_cli-0.3.0/src/infra/plugins/aws/rds_describe.py +170 -0
- infra_cli-0.3.0/src/infra/plugins/aws/rds_users.py +1124 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/runtime.py +135 -6
- infra_cli-0.3.0/src/infra/plugins/aws/services/ec2.py +611 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/services/ecr.py +103 -6
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/services/ecs.py +213 -22
- infra_cli-0.3.0/src/infra/plugins/aws/services/eks.py +219 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/elasticache.py +346 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/elasticache_access.py +431 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/firewall.py +411 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/msk.py +536 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/opensearch.py +166 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/services/options.py +174 -21
- infra_cli-0.3.0/src/infra/plugins/aws/services/rds.py +180 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/rds_users.py +372 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/ssm.py +888 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/vpc.py +181 -0
- infra_cli-0.3.0/src/infra/plugins/aws/services/vpc_network.py +350 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ssm_audit.py +87 -32
- infra_cli-0.3.0/src/infra/plugins/aws/ssm_command.py +422 -0
- infra_cli-0.3.0/src/infra/plugins/aws/ssm_describe.py +82 -0
- infra_cli-0.3.0/src/infra/plugins/aws/ssm_document.py +366 -0
- infra_cli-0.3.0/src/infra/plugins/aws/ssm_param.py +403 -0
- infra_cli-0.3.0/src/infra/plugins/aws/vpc_describe.py +147 -0
- infra_cli-0.3.0/src/infra/plugins/aws/vpc_network_describe.py +153 -0
- infra_cli-0.3.0/src/infra/plugins/docker_ps.py +80 -0
- infra_cli-0.3.0/src/infra/plugins/github_pr.py +393 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/naming/model.py +13 -12
- infra_cli-0.3.0/src/infra/plugins/oci/cli.py +386 -0
- infra_cli-0.3.0/src/infra/plugins/oci/compartment_cleanup.py +1789 -0
- infra_cli-0.3.0/src/infra/plugins/oci/compartment_plan.py +861 -0
- infra_cli-0.3.0/src/infra/plugins/oci/landing_zones.py +224 -0
- infra_cli-0.3.0/src/infra/plugins/oci/login.py +256 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/oci/logout.py +21 -3
- infra_cli-0.3.0/src/infra/plugins/oci/options.py +172 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/oci/profiles.py +11 -0
- infra_cli-0.3.0/src/infra/plugins/oci/profiles_cmd.py +102 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/oci/runtime.py +15 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/redis/service.py +15 -3
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/plan.py +15 -10
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/plugin.py +44 -26
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/profiles.py +15 -4
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/verify.py +2 -3
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/login.py +2 -6
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terraform/cleanup.py +7 -1
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terraform/scaffold.py +3 -1
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terragrunt/paths.py +2 -6
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terragrunt/plugin.py +2 -11
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terragrunt/scaffold.py +1 -3
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/doctor.py +6 -2
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/redact.py +18 -4
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/resolve.py +1 -3
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/cli.py +3 -1
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/connectors.py +10 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/context_pack.py +4 -2
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/mcp_stdio.py +14 -4
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/planner.py +3 -1
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/shell/completer.py +44 -21
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/README.md +2 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/callback_plugins/infra_journal.py +6 -2
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/README.md +1 -0
- infra_cli-0.3.0/src/infra/templates/ansible/roles/common/tasks/kafka.yml +99 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/main.yml +7 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/config/config.yml +1 -0
- infra_cli-0.3.0/src/infra/templates/kafka/README.md +123 -0
- infra_cli-0.3.0/src/infra/templates/kafka/conf/client.iam.properties.example +15 -0
- infra_cli-0.3.0/src/infra/templates/kafka/conf/client.plaintext.properties.example +6 -0
- infra_cli-0.3.0/src/infra/templates/kafka/conf/client.scram.properties.example +14 -0
- infra_cli-0.3.0/src/infra/templates/kafka/conf/client.ssl.properties.example +12 -0
- infra_cli-0.3.0/src/infra/templates/kafka/kafka +490 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/setup/README.md +3 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/work/skills/inventory-snapshot.yml +3 -1
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/config.py +67 -6
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/fmt.py +4 -3
- infra_cli-0.3.0/src/infra/utils/ui.py +209 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra_cli.egg-info/SOURCES.txt +51 -0
- infra_cli-0.1.6/src/infra/VERSION +0 -5
- infra_cli-0.1.6/src/infra/commands/github.py +0 -48
- infra_cli-0.1.6/src/infra/plugins/aws/export.py +0 -116
- infra_cli-0.1.6/src/infra/plugins/aws/services/ec2.py +0 -237
- infra_cli-0.1.6/src/infra/plugins/aws/services/elasticache.py +0 -198
- infra_cli-0.1.6/src/infra/plugins/aws/services/opensearch.py +0 -102
- infra_cli-0.1.6/src/infra/plugins/aws/services/rds.py +0 -111
- infra_cli-0.1.6/src/infra/plugins/aws/services/ssm.py +0 -328
- infra_cli-0.1.6/src/infra/plugins/oci/cli.py +0 -102
- infra_cli-0.1.6/src/infra/plugins/oci/login.py +0 -158
- infra_cli-0.1.6/src/infra/plugins/oci/options.py +0 -52
- infra_cli-0.1.6/src/infra/plugins/oci/profiles_cmd.py +0 -68
- infra_cli-0.1.6/src/infra/utils/ui.py +0 -113
- {infra_cli-0.1.6 → infra_cli-0.3.0}/LICENSE +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/MANIFEST.in +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/setup.cfg +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/setup.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/__main__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/buildinfo.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/ansible.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/config_cmds.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/packer.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/slack.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/terraform.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/commands/terragrunt.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/execute.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/landing_zones.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/login.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/options.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/profiles.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/profiles_cmd.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/runtime.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/alibaba/site.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/ansible.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/inventory/match.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/landing_zones.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/login.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/logout.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/options.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/profiles.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/profiles_cmd.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/services/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/services/cost.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ssm_copy.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/ssm_search.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/sso_discovery.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/aws/token_info.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/base.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/config.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/cost/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/cost/actions.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/cost/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/cost/models.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/cost/plugin.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/eol/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/eol/cache.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/eol/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/eol/render.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/github.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/macos/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/macos/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/macos/debug.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/macos/power.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/naming/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/naming/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/naming/scaffold.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/oci/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/packer.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/app_factory.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/deps.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/features.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/http_util.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mongo/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mongo/routes.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mongo/service.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mongo/ui.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mount.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mysql/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mysql/routes.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mysql/service.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/mysql/ui.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/redis/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/redis/routes.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/redis/ui.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/session.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/shell.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/dbtools/sql_guard.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/html.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/web/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/web/assets.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/web/charts.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/web/components.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/web/db_common.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/web/db_page.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/server/web/layout.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/cli_upgrade.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/journal.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/setup/ollama_models.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/slack.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/landing_zones.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/logout.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/options.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/profiles.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/profiles_cmd.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/runtime.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/tencent/site.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terraform/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terraform/args.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terraform/paths.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terraform/plugin.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terragrunt/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/terragrunt/args.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/windows/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/windows/cli.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/windows/guide.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/windows/power.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/audit.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/client.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/models.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/registry.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/sources.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/ai/url_safety.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/explain.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/models.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/runner.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/plugins/work/skills.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/shell/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/shell/builtins.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/shell/context.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/shell/pipe.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/shell/repl.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/.ansible-lint +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/ansible.cfg +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/callback_plugins/infra_minimal.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/inventory.ini +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/requirements.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/defaults/main.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/meta/main.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ai.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ai_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ai_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/aliyun.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/aliyun_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/aliyun_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/aws.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/aws_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/aws_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/cli_ux.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/cli_ux_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/cli_ux_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/db_clients.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/db_clients_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/db_clients_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/deploy_user_config.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/desktop_apps.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/desktop_apps_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/desktop_apps_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/developer.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/developer_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/developer_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/dnsmasq.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/dnsmasq_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/dnsmasq_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/docker.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/docker_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/docker_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/download_url.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/fetch_uri.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/frontend.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/fzf.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/fzf_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/fzf_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/git.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/git_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/git_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/gpg.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/gpg_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/gpg_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/http_clients.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/install_github_tarball.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/iterm2.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/iterm2_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/iterm2_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/java.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/java_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/java_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/k8s.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/k8s_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/k8s_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/kind.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/kind_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/kind_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/linux_tune.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/linux_tune_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/merge_editor_settings.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/micromamba.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/micromamba_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/micromamba_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/minikube.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/minikube_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/minikube_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/mise.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/mise_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/mise_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/neovim.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/neovim_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/neovim_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/neteasy.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/neteasy_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/neteasy_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/oci.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/oci_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/oci_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ollama.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ollama_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ollama_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/openresty.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/openresty_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/openresty_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/os_setup_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/os_setup_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/packer.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/packer_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/packer_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/python.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/python_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/qa.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/qa_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/qa_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/resolve_github_latest.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ssh.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ssh_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/ssh_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/sshd_tune.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/sshd_tune_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/supply_chain.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/supply_chain_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/supply_chain_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/task.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/task_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/task_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/tccli.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/terraform.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/terraform_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/terraform_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/tmux.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/tmux_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/tmux_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/trivy.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/trivy_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/trivy_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/vim.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/vim_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/vim_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/zsh.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/zsh_darwin.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/tasks/zsh_debian.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/templates/mise.toml.j2 +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/templates/ollama-launchagent.plist.j2 +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/templates/ollama-launchctl-env.sh.j2 +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/templates/ollama-systemd-override.conf.j2 +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/roles/common/templates/setup_user_env.sh.j2 +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/setup.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ansible/vars.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/aws/config +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/aws/credentials +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/aws_sso/config.ini +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/bat/config +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/claude/CLAUDE.APP.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/claude/CLAUDE.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/claude/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/claude/config.json +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/codex/config.toml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/config/pypirc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/copilot/settings.json +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/curl/curlrc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/cursor/settings.json +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/desktop/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/developer/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/direnv/direnv.toml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/direnv/envrc.example +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/dnsmasq/dnsmasq-local.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/docker/config.json +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/docker/config.json.j2 +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/editorconfig/editorconfig +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/frontend/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/gemini/config.yaml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/gh/config.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/git/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/git/attributes +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/git/cpr.sh +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/git/gitconfig +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/git/ignore +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/git/mailmap +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/git/message +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/github/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/gpg/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/iterm2/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/iterm2/infra.json +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/k8s/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/mamba/mambarc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/mongodb/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/mongodb/mongod-local.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/mongodb/mongoshrc.js +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/mysql/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/mysql/my.cnf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/mysql/mysqld-local.cnf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/naming/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/nginx/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/nginx/nginx-local.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/nvim/init.lua +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ollama/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/openresty/openresty-local.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/packer/packer.pkrvars.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/python/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/python/pypirc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/redis/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/redis/redis-local.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/redis/redisclirc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ripgrep/config +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/setup/setup.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/setup/setup.overlay.example.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/setup/setup.team.overlay.example.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/shell/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/shell/aliases.sh +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ssh/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ssh/conf.d/1password.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ssh/conf.d/github.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/ssh/config +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/task/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/task/Taskfile.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/.terraform-docs.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/.gitignore +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/modules/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/sites/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/sites/stg/platform/example/main.tf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/sites/stg/platform/example/outputs.tf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/sites/stg/platform/example/variables.tf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/repo/terraform/sites/stg/platform/example/versions.tf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/terraform.env +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terraform/terraformrc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/repo/_envcommon/stack.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/repo/account.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/repo/env.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/repo/leaf/terragrunt.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/repo/region.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/repo/root.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/repo/terragrunt.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/terragrunt.env +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/terragrunt/terragrunt.hcl +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/tmux/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/tmux/tmux.conf +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/vim/vimrc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/vscode/settings.json +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/wget/wgetrc +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/work/README.md +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/work/skills/cost-review.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/work/skills/eol-scan.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/work/skills/iac-plan-check.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/work/skills/security-pass.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/templates/work/skills/workstation-health.yml +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/aws.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/backoff.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/__init__.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/ansible.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/aws.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/ci.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/docker.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/models.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/naming.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/packer.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/task.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/terraform.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/best_practices/terragrunt.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/catalog.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/docker.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/duration.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/env.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/logger.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/naming.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/stack_paths.py +0 -0
- {infra_cli-0.1.6 → infra_cli-0.3.0}/src/infra/utils/ui_select.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: infra-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Pluggable Infrastructure CLI as a wrapper around DevOps tools.
|
|
5
5
|
Author-email: Youqing Han <ihanyouqing@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -27,6 +27,8 @@ Requires-Dist: requests>=2.28.0
|
|
|
27
27
|
Provides-Extra: aws
|
|
28
28
|
Requires-Dist: zxcvbn>=4.4.28; extra == "aws"
|
|
29
29
|
Requires-Dist: openpyxl>=3.1.0; extra == "aws"
|
|
30
|
+
Requires-Dist: PyMySQL>=1.1.0; extra == "aws"
|
|
31
|
+
Requires-Dist: pg8000>=1.31.0; extra == "aws"
|
|
30
32
|
Provides-Extra: server
|
|
31
33
|
Requires-Dist: fastapi>=0.100.0; extra == "server"
|
|
32
34
|
Requires-Dist: uvicorn>=0.20.0; extra == "server"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "infra-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Pluggable Infrastructure CLI as a wrapper around DevOps tools."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -40,6 +40,8 @@ dependencies = [
|
|
|
40
40
|
aws = [
|
|
41
41
|
"zxcvbn>=4.4.28",
|
|
42
42
|
"openpyxl>=3.1.0",
|
|
43
|
+
"PyMySQL>=1.1.0",
|
|
44
|
+
"pg8000>=1.31.0",
|
|
43
45
|
]
|
|
44
46
|
server = [
|
|
45
47
|
"fastapi>=0.100.0",
|
|
@@ -2,6 +2,7 @@ import typer
|
|
|
2
2
|
|
|
3
3
|
from .ansible import ansible_app, ansible_callback
|
|
4
4
|
from .config_cmds import config_app
|
|
5
|
+
from .docker import docker_app
|
|
5
6
|
from .github import github_app
|
|
6
7
|
from .packer import packer_app, packer_callback
|
|
7
8
|
from .setup import setup_app
|
|
@@ -28,6 +29,12 @@ def register_commands(app: typer.Typer) -> None:
|
|
|
28
29
|
app.add_typer(packer_app, name="packer", callback=packer_callback)
|
|
29
30
|
app.add_typer(ansible_app, name="ansible", callback=ansible_callback)
|
|
30
31
|
app.add_typer(setup_app, name="setup")
|
|
32
|
+
app.add_typer(docker_app, name="docker")
|
|
31
33
|
app.add_typer(github_app, name="github")
|
|
34
|
+
app.add_typer(
|
|
35
|
+
github_app,
|
|
36
|
+
name="gh",
|
|
37
|
+
help="Alias for `github`.",
|
|
38
|
+
)
|
|
32
39
|
app.add_typer(slack_app, name="slack")
|
|
33
40
|
app.add_typer(config_app, name="config")
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
|
|
5
|
+
from ..context import state
|
|
6
|
+
from ..plugins.docker_ps import run_docker_ps
|
|
7
|
+
|
|
8
|
+
docker_app = typer.Typer(
|
|
9
|
+
help=(
|
|
10
|
+
"Local Docker containers. With no verb, `ps` lists every container "
|
|
11
|
+
"(including stopped) with id, name, created time, and status."
|
|
12
|
+
),
|
|
13
|
+
no_args_is_help=False,
|
|
14
|
+
rich_markup_mode=None,
|
|
15
|
+
context_settings={"help_option_names": ["-h", "--help"]},
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
SudoOpt = Annotated[
|
|
19
|
+
bool,
|
|
20
|
+
typer.Option(
|
|
21
|
+
"--sudo",
|
|
22
|
+
help="Run `sudo docker ps -a` (root docker.sock). Works before or after ps.",
|
|
23
|
+
),
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _ps(sudo: bool) -> None:
|
|
28
|
+
raise typer.Exit(code=run_docker_ps(sudo=sudo, dry_run=state.dry_run))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@docker_app.callback(invoke_without_command=True)
|
|
32
|
+
def docker_group(ctx: typer.Context, sudo: SudoOpt = False) -> None:
|
|
33
|
+
"""List containers. Same columns as `docker ps -a` with a fixed format.
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
36
|
+
|
|
37
|
+
infra docker ps
|
|
38
|
+
|
|
39
|
+
infra docker ps --sudo
|
|
40
|
+
|
|
41
|
+
infra docker --sudo
|
|
42
|
+
"""
|
|
43
|
+
state.docker_sudo = sudo
|
|
44
|
+
if ctx.invoked_subcommand is None:
|
|
45
|
+
_ps(sudo)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@docker_app.command("ps")
|
|
49
|
+
def docker_ps(sudo: SudoOpt = False) -> None:
|
|
50
|
+
"""List all containers: id, name, created time, and status.
|
|
51
|
+
|
|
52
|
+
Runs `docker ps -a --format` with columns ID, Names, CreatedAt, and
|
|
53
|
+
Status. `--sudo` is `sudo docker ps -a` for a root-owned docker.sock.
|
|
54
|
+
Without `--sudo`, Colima or Docker Desktop is used when DOCKER_HOST
|
|
55
|
+
is unset.
|
|
56
|
+
|
|
57
|
+
Examples:
|
|
58
|
+
|
|
59
|
+
infra docker ps
|
|
60
|
+
|
|
61
|
+
infra docker ps --sudo
|
|
62
|
+
|
|
63
|
+
infra docker --sudo ps
|
|
64
|
+
"""
|
|
65
|
+
_ps(sudo or state.docker_sudo)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
|
|
5
|
+
from ..context import state
|
|
6
|
+
from ..execute import execute_plugin
|
|
7
|
+
from ..plugins.github_pr import approve_pull_requests, merge_pull_requests
|
|
8
|
+
from .options import ExtraArgs
|
|
9
|
+
|
|
10
|
+
github_app = typer.Typer(
|
|
11
|
+
help=(
|
|
12
|
+
"Scaffold GitHub files and wrap `gh` for repo/PR tasks. `infra gh` is an alias."
|
|
13
|
+
),
|
|
14
|
+
no_args_is_help=True,
|
|
15
|
+
rich_markup_mode=None,
|
|
16
|
+
context_settings={"help_option_names": ["-h", "--help"]},
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@github_app.command(name="scaffold")
|
|
21
|
+
def github_scaffold() -> None:
|
|
22
|
+
"""Write GitHub workflow/issue templates into this repository.
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
|
|
26
|
+
infra github scaffold
|
|
27
|
+
"""
|
|
28
|
+
state.subcommand = "scaffold"
|
|
29
|
+
execute_plugin("github")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@github_app.command(name="repo")
|
|
33
|
+
def github_repo(args: ExtraArgs = None) -> None:
|
|
34
|
+
"""Manage GitHub repositories (forwards to `gh repo`).
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
|
|
38
|
+
infra github repo view
|
|
39
|
+
"""
|
|
40
|
+
state.subcommand = "repo"
|
|
41
|
+
execute_plugin("github", extra_args=args)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _pr_parts(args: list[str] | None) -> list[str]:
|
|
45
|
+
parts = list(args or [])
|
|
46
|
+
if not parts or parts[0] not in {"approve", "merge"} or sys.stdin.isatty():
|
|
47
|
+
return parts
|
|
48
|
+
text = sys.stdin.read()
|
|
49
|
+
if not text.strip():
|
|
50
|
+
return parts
|
|
51
|
+
return [*parts, text]
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@github_app.command(
|
|
55
|
+
name="pr",
|
|
56
|
+
context_settings={
|
|
57
|
+
"allow_extra_args": True,
|
|
58
|
+
"ignore_unknown_options": True,
|
|
59
|
+
"help_option_names": ["-h", "--help"],
|
|
60
|
+
},
|
|
61
|
+
)
|
|
62
|
+
def github_pr(ctx: typer.Context, args: ExtraArgs = None) -> None:
|
|
63
|
+
"""Manage GitHub pull requests (forwards to `gh pr`).
|
|
64
|
+
|
|
65
|
+
``approve`` runs ``gh pr review NUMBER --repo ORG/REPO --approve`` for
|
|
66
|
+
each pull request. ``merge`` runs ``gh pr merge NUMBER --repo ORG/REPO``.
|
|
67
|
+
Separate values with commas, spaces, or newlines. A bare number uses
|
|
68
|
+
the current directory's ``origin`` remote. A URL, ``org/repo#N``, or
|
|
69
|
+
``org/repo/N`` selects the repo. The local checkout of
|
|
70
|
+
``git@github.com:ORG/REPO.git`` is ``~/github.com/ORG/REPO``. A
|
|
71
|
+
symlink at that path, or in a parent directory, is followed.
|
|
72
|
+
|
|
73
|
+
``merge`` accepts ``--squash``, ``--merge``, ``--rebase``,
|
|
74
|
+
``--delete-branch`` (``-d``), ``--admin``, and ``--auto``. Pass a
|
|
75
|
+
merge method for non-interactive shells.
|
|
76
|
+
|
|
77
|
+
Other verbs are forwarded to ``gh pr``.
|
|
78
|
+
|
|
79
|
+
Examples:
|
|
80
|
+
|
|
81
|
+
infra gh pr approve 123
|
|
82
|
+
|
|
83
|
+
infra gh pr approve 123,456
|
|
84
|
+
|
|
85
|
+
infra gh pr approve acme/app#12 acme/web#34
|
|
86
|
+
|
|
87
|
+
infra gh pr approve https://github.com/acme/app/pull/12
|
|
88
|
+
|
|
89
|
+
infra gh pr merge 123 --squash
|
|
90
|
+
|
|
91
|
+
infra gh pr merge 123,456 --squash --delete-branch
|
|
92
|
+
|
|
93
|
+
infra gh pr merge acme/app#12 acme/web#34 --squash
|
|
94
|
+
|
|
95
|
+
infra github pr list
|
|
96
|
+
"""
|
|
97
|
+
parts = _pr_parts([*(args or []), *list(ctx.args or [])])
|
|
98
|
+
if parts[:1] == ["approve"]:
|
|
99
|
+
raise typer.Exit(code=approve_pull_requests(parts[1:], dry_run=state.dry_run))
|
|
100
|
+
if parts[:1] == ["merge"]:
|
|
101
|
+
raise typer.Exit(code=merge_pull_requests(parts[1:], dry_run=state.dry_run))
|
|
102
|
+
state.subcommand = "pr"
|
|
103
|
+
execute_plugin("github", extra_args=parts or None)
|
|
@@ -4,9 +4,7 @@ import typer
|
|
|
4
4
|
|
|
5
5
|
from ..utils.env import ENV_OPTION_HELP
|
|
6
6
|
|
|
7
|
-
EnvOpt = Annotated[
|
|
8
|
-
str | None, typer.Option("-e", "--env", help=ENV_OPTION_HELP)
|
|
9
|
-
]
|
|
7
|
+
EnvOpt = Annotated[str | None, typer.Option("-e", "--env", help=ENV_OPTION_HELP)]
|
|
10
8
|
# Kept for packer / ansible; Terragrunt encodes account inside -s/-ss.
|
|
11
9
|
ProjOpt = Annotated[
|
|
12
10
|
str | None,
|
|
@@ -417,7 +417,9 @@ def _make_component_command(name: str, tags: tuple[str, ...]) -> None:
|
|
|
417
417
|
|
|
418
418
|
|
|
419
419
|
# Reserved verbs stay as first-class commands above; components fill the rest.
|
|
420
|
-
_RESERVED = frozenset(
|
|
420
|
+
_RESERVED = frozenset(
|
|
421
|
+
{"run", "list", "doctor", "verify", "apply-team", "scaffold", "upgrade-cli"}
|
|
422
|
+
)
|
|
421
423
|
for _name, _tags in COMPONENT_COMMANDS.items():
|
|
422
424
|
if _name in _RESERVED:
|
|
423
425
|
continue
|
|
@@ -10,8 +10,10 @@ class InfraContext:
|
|
|
10
10
|
self.aws_hidden: bool = False
|
|
11
11
|
self.aws_profile: str | None = None
|
|
12
12
|
self.aws_region: str | None = None
|
|
13
|
+
self.aws_all_accounts: bool = False
|
|
13
14
|
self.dry_run: bool = False
|
|
14
15
|
self.verbose: bool = False
|
|
16
|
+
self.docker_sudo: bool = False
|
|
15
17
|
self.extra_args: list[str] = []
|
|
16
18
|
self.subcommand: str | None = None
|
|
17
19
|
self.setup_profile: str = "core"
|
|
@@ -44,9 +44,7 @@ def _report_deps(section: str, deps: dict[str, str | None]) -> bool:
|
|
|
44
44
|
print_stat(tool, path, color=typer.colors.GREEN)
|
|
45
45
|
else:
|
|
46
46
|
print_error(
|
|
47
|
-
f"{tool}: not installed"
|
|
48
|
-
if tool == "boto3"
|
|
49
|
-
else f"{tool}: missing"
|
|
47
|
+
f"{tool}: not installed" if tool == "boto3" else f"{tool}: missing"
|
|
50
48
|
)
|
|
51
49
|
hint = setup_hint_for(tool)
|
|
52
50
|
if hint:
|
|
@@ -55,7 +53,9 @@ def _report_deps(section: str, deps: dict[str, str | None]) -> bool:
|
|
|
55
53
|
return ok
|
|
56
54
|
|
|
57
55
|
|
|
58
|
-
def _plugin_enabled(
|
|
56
|
+
def _plugin_enabled(
|
|
57
|
+
full_config: dict[str, Any], name: str, *, default: bool = True
|
|
58
|
+
) -> bool:
|
|
59
59
|
block = full_config.get(name)
|
|
60
60
|
if not isinstance(block, dict):
|
|
61
61
|
return default
|
|
@@ -188,7 +188,9 @@ def _brew_fallback() -> str | None:
|
|
|
188
188
|
return None
|
|
189
189
|
|
|
190
190
|
|
|
191
|
-
def _collect_component_deps(
|
|
191
|
+
def _collect_component_deps(
|
|
192
|
+
full_config: dict[str, Any],
|
|
193
|
+
) -> dict[str, dict[str, str | None]]:
|
|
192
194
|
"""Build doctor sections for enabled ``setup.components``."""
|
|
193
195
|
sections: dict[str, dict[str, str | None]] = {}
|
|
194
196
|
system = platform.system().lower()
|
|
@@ -199,7 +201,11 @@ def _collect_component_deps(full_config: dict[str, Any]) -> dict[str, dict[str,
|
|
|
199
201
|
continue
|
|
200
202
|
deps: dict[str, str | None] = {}
|
|
201
203
|
for display_key, kind, target in checks:
|
|
202
|
-
if
|
|
204
|
+
if (
|
|
205
|
+
kind == "path"
|
|
206
|
+
and target.startswith("/Applications/")
|
|
207
|
+
and system != "darwin"
|
|
208
|
+
):
|
|
203
209
|
continue
|
|
204
210
|
if kind == "path" and target.startswith("/etc/") and system != "linux":
|
|
205
211
|
continue
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"""Single-account describe runner shared by ``infra aws <service> describe``.
|
|
2
|
+
|
|
3
|
+
The current profile and that profile's region are the only scope. A target
|
|
4
|
+
may match more than one resource; every match is printed. JSON goes to
|
|
5
|
+
stdout. Human text and the Field/Value table go to the terminal.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import ipaddress
|
|
11
|
+
import json
|
|
12
|
+
from collections.abc import Callable, Sequence
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
import typer
|
|
16
|
+
from botocore.config import Config
|
|
17
|
+
from botocore.exceptions import BotoCoreError, ClientError
|
|
18
|
+
from rich.console import Console
|
|
19
|
+
from rich.table import Table
|
|
20
|
+
|
|
21
|
+
from ...utils.ui import (
|
|
22
|
+
echo_styled,
|
|
23
|
+
format_profile_region,
|
|
24
|
+
hl,
|
|
25
|
+
hl_profile,
|
|
26
|
+
hl_region,
|
|
27
|
+
print_error,
|
|
28
|
+
print_warning,
|
|
29
|
+
)
|
|
30
|
+
from .inventory.match import address_matches, lookup_host_ips
|
|
31
|
+
from .profiles import resolve_cached_profile
|
|
32
|
+
from .runtime import open_boto3_session
|
|
33
|
+
|
|
34
|
+
FETCH_TIMEOUT = 15
|
|
35
|
+
VALID_OUTPUT = frozenset({"table", "json"})
|
|
36
|
+
|
|
37
|
+
Collect = Callable[[Any, str], list[dict[str, Any]]]
|
|
38
|
+
Display = Callable[[dict[str, Any], str], Any]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def tags_dict(tags: list[dict[str, Any]] | None) -> dict[str, str]:
|
|
42
|
+
found: dict[str, str] = {}
|
|
43
|
+
for tag in tags or []:
|
|
44
|
+
key = str(tag.get("Key") or tag.get("key") or "")
|
|
45
|
+
if key:
|
|
46
|
+
found[key] = str(tag.get("Value") or tag.get("value") or "")
|
|
47
|
+
return found
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def num_str(value: Any) -> str:
|
|
51
|
+
if value is None:
|
|
52
|
+
return ""
|
|
53
|
+
return str(value)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def display_value(value: Any) -> str:
|
|
57
|
+
if isinstance(value, dict):
|
|
58
|
+
return ", ".join(f"{key}={item}" for key, item in value.items())
|
|
59
|
+
if isinstance(value, list):
|
|
60
|
+
parts: list[str] = []
|
|
61
|
+
for item in value:
|
|
62
|
+
if isinstance(item, dict):
|
|
63
|
+
text = " ".join(f"{key}={item[key]}" for key in item if item[key])
|
|
64
|
+
if text:
|
|
65
|
+
parts.append(text)
|
|
66
|
+
elif item:
|
|
67
|
+
parts.append(str(item))
|
|
68
|
+
return ", ".join(parts)
|
|
69
|
+
return str(value or "")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def host_hit(hosts: Sequence[str], target: str) -> bool:
|
|
73
|
+
"""True when ``target`` is a hostname or the IPv4 it resolves to."""
|
|
74
|
+
wanted = target.strip().rstrip(".").lower()
|
|
75
|
+
if not wanted:
|
|
76
|
+
return False
|
|
77
|
+
cleaned = [host.strip().rstrip(".") for host in hosts if host and str(host).strip()]
|
|
78
|
+
for host in cleaned:
|
|
79
|
+
if host.lower() == wanted:
|
|
80
|
+
return True
|
|
81
|
+
try:
|
|
82
|
+
is_ipv4 = ipaddress.ip_address(wanted).version == 4
|
|
83
|
+
except ValueError:
|
|
84
|
+
return False
|
|
85
|
+
if not is_ipv4:
|
|
86
|
+
return False
|
|
87
|
+
return address_matches(cleaned, [wanted], lookup_host_ips)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _render_table(
|
|
91
|
+
details: list[dict[str, Any]],
|
|
92
|
+
*,
|
|
93
|
+
label: str,
|
|
94
|
+
profile: str,
|
|
95
|
+
region: str,
|
|
96
|
+
fields: tuple[tuple[str, str], ...],
|
|
97
|
+
id_key: str,
|
|
98
|
+
name_key: str,
|
|
99
|
+
display: Display,
|
|
100
|
+
) -> None:
|
|
101
|
+
from rich.markup import escape
|
|
102
|
+
from rich.text import Text
|
|
103
|
+
|
|
104
|
+
console = Console(width=200)
|
|
105
|
+
for detail in details:
|
|
106
|
+
id_val = str(detail.get(id_key) or "")
|
|
107
|
+
title = f"{label} describe [cyan bold]{escape(id_val)}[/]"
|
|
108
|
+
name = str(detail.get(name_key) or "") if name_key else ""
|
|
109
|
+
if name and name != id_val:
|
|
110
|
+
title += f" [cyan]{escape(name)}[/]"
|
|
111
|
+
title += (
|
|
112
|
+
f" profile=[yellow bold]{escape(profile)}[/] "
|
|
113
|
+
f"region=[blue bold]{escape(region)}[/]"
|
|
114
|
+
)
|
|
115
|
+
table = Table(title=title, show_header=True)
|
|
116
|
+
table.add_column("Field", style="cyan")
|
|
117
|
+
table.add_column("Value", overflow="fold")
|
|
118
|
+
for key, field_label in fields:
|
|
119
|
+
cell = display(detail, key)
|
|
120
|
+
if key == id_key and isinstance(cell, str) and cell:
|
|
121
|
+
cell = Text(cell, style="cyan bold")
|
|
122
|
+
elif key == name_key and isinstance(cell, str) and cell and cell != id_val:
|
|
123
|
+
cell = Text(cell, style="yellow bold")
|
|
124
|
+
table.add_row(field_label, cell)
|
|
125
|
+
console.print(table)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _print_api_failure(
|
|
129
|
+
exc: BaseException, profile_name: str, label: str, noun: str
|
|
130
|
+
) -> None:
|
|
131
|
+
msg = str(exc)
|
|
132
|
+
print_error(f"{label} describe failed: {msg}")
|
|
133
|
+
if "SSO Token" in msg or "Token for" in msg or "ExpiredToken" in msg:
|
|
134
|
+
print_warning(f" Run: infra aws login --profile {profile_name}")
|
|
135
|
+
elif "NotFound" in msg or "does not exist" in msg or "InvalidInstanceID" in msg:
|
|
136
|
+
print_warning(
|
|
137
|
+
f"Profile '{profile_name}' needs a valid {noun} in this region. "
|
|
138
|
+
f"Run: infra aws login --profile {profile_name}"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def run_resource_describe(
|
|
143
|
+
target: str,
|
|
144
|
+
*,
|
|
145
|
+
profile: str | None,
|
|
146
|
+
region: str | None,
|
|
147
|
+
output: str,
|
|
148
|
+
client_name: str,
|
|
149
|
+
label: str,
|
|
150
|
+
noun: str,
|
|
151
|
+
many_label: str,
|
|
152
|
+
missing_target: str,
|
|
153
|
+
dry_run_api: str,
|
|
154
|
+
fields: tuple[tuple[str, str], ...],
|
|
155
|
+
collect: Collect,
|
|
156
|
+
id_key: str,
|
|
157
|
+
name_key: str = "name",
|
|
158
|
+
display: Display | None = None,
|
|
159
|
+
dry_run: bool = False,
|
|
160
|
+
) -> int:
|
|
161
|
+
show = display or (lambda detail, key: display_value(detail.get(key)))
|
|
162
|
+
out_fmt = (output or "table").strip().lower()
|
|
163
|
+
if out_fmt not in VALID_OUTPUT:
|
|
164
|
+
print_error(f"Unknown --format: {output}. Use table or json.")
|
|
165
|
+
return 1
|
|
166
|
+
text = (target or "").strip()
|
|
167
|
+
if not text:
|
|
168
|
+
print_error(missing_target)
|
|
169
|
+
return 1
|
|
170
|
+
|
|
171
|
+
profile_name = resolve_cached_profile(profile)
|
|
172
|
+
if not profile_name:
|
|
173
|
+
print_warning(
|
|
174
|
+
"No AWS profile selected. Run `infra aws select` or pass --profile."
|
|
175
|
+
)
|
|
176
|
+
return 1
|
|
177
|
+
|
|
178
|
+
from ...utils.aws import resolve_aws_region
|
|
179
|
+
|
|
180
|
+
session = open_boto3_session(profile_name, region_name=region)
|
|
181
|
+
if session is None:
|
|
182
|
+
return 1
|
|
183
|
+
|
|
184
|
+
region_name = resolve_aws_region(region, session.region_name)
|
|
185
|
+
if not region_name:
|
|
186
|
+
print_error(
|
|
187
|
+
"Pass --region, set AWS_DEFAULT_REGION / AWS_REGION, or set aws.region."
|
|
188
|
+
)
|
|
189
|
+
return 1
|
|
190
|
+
|
|
191
|
+
if dry_run:
|
|
192
|
+
echo_styled(
|
|
193
|
+
f"ℹ️ [DRY-RUN] {dry_run_api} "
|
|
194
|
+
f"target={hl(text, fg=typer.colors.YELLOW)} "
|
|
195
|
+
f"{format_profile_region(profile_name, region_name)}"
|
|
196
|
+
)
|
|
197
|
+
return 0
|
|
198
|
+
|
|
199
|
+
boto_cfg = Config(
|
|
200
|
+
connect_timeout=FETCH_TIMEOUT,
|
|
201
|
+
read_timeout=FETCH_TIMEOUT,
|
|
202
|
+
retries={"max_attempts": 3},
|
|
203
|
+
)
|
|
204
|
+
client = session.client(client_name, region_name=region_name, config=boto_cfg)
|
|
205
|
+
try:
|
|
206
|
+
details = collect(client, text)
|
|
207
|
+
except (ClientError, BotoCoreError) as exc:
|
|
208
|
+
_print_api_failure(exc, profile_name, label, noun)
|
|
209
|
+
return 1
|
|
210
|
+
|
|
211
|
+
if len(details) > 1:
|
|
212
|
+
echo_styled(
|
|
213
|
+
f"ℹ️ {len(details)} {many_label} matched "
|
|
214
|
+
f"{hl(text, fg=typer.colors.YELLOW)}.",
|
|
215
|
+
err=True,
|
|
216
|
+
)
|
|
217
|
+
if out_fmt == "json":
|
|
218
|
+
typer.echo(json.dumps(details, indent=2))
|
|
219
|
+
elif details:
|
|
220
|
+
_render_table(
|
|
221
|
+
details,
|
|
222
|
+
label=label,
|
|
223
|
+
profile=profile_name,
|
|
224
|
+
region=region_name,
|
|
225
|
+
fields=fields,
|
|
226
|
+
id_key=id_key,
|
|
227
|
+
name_key=name_key,
|
|
228
|
+
display=show,
|
|
229
|
+
)
|
|
230
|
+
else:
|
|
231
|
+
echo_styled(
|
|
232
|
+
f"⚠️ No {noun} matched {hl(text, fg=typer.colors.YELLOW)} "
|
|
233
|
+
f"(profile={hl_profile(profile_name)}, region={hl_region(region_name)}).",
|
|
234
|
+
err=True,
|
|
235
|
+
)
|
|
236
|
+
return 0 if details else 1
|