ic-code 1.5.2__tar.gz → 1.5.3__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.
- {ic_code-1.5.2/src/ic_code.egg-info → ic_code-1.5.3}/PKG-INFO +3 -3
- {ic_code-1.5.2 → ic_code-1.5.3}/README.md +2 -2
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/gcp/README.md +2 -2
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/user_guide.md +1 -1
- {ic_code-1.5.2 → ic_code-1.5.3}/pyproject.toml +1 -1
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/__init__.py +1 -1
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/installer.py +8 -8
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/migration.py +28 -23
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/secrets.py +2 -3
- ic_code-1.5.3/src/ic/platforms/aws/disk/__init__.py +1 -0
- ic_code-1.5.3/src/ic/platforms/aws/disk/info.py +32 -0
- ic_code-1.5.3/src/ic/platforms/aws/ebs/__init__.py +1 -0
- ic_code-1.5.3/src/ic/platforms/aws/ebs/info.py +528 -0
- ic_code-1.5.3/src/ic/platforms/aws/ebs/mock_data.json +90 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/billing/info.py +3 -3
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/compute/info.py +50 -15
- ic_code-1.5.3/src/ic/platforms/gcp/disk/__init__.py +1 -0
- ic_code-1.5.3/src/ic/platforms/gcp/disk/info.py +566 -0
- ic_code-1.5.3/src/ic/platforms/gcp/disk/mock_data.json +96 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/ssh/__init__.py +2 -1
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/ssh/auto_ssh.py +7 -24
- ic_code-1.5.3/src/ic/platforms/ssh/policy.py +61 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/ssh/server_info.py +6 -14
- ic_code-1.5.3/src/ic/platforms/tencent/cbs/__init__.py +1 -0
- ic_code-1.5.3/src/ic/platforms/tencent/cbs/info.py +556 -0
- ic_code-1.5.3/src/ic/platforms/tencent/cbs/mock_data.json +74 -0
- ic_code-1.5.3/src/ic/platforms/tencent/disk/__init__.py +1 -0
- ic_code-1.5.3/src/ic/platforms/tencent/disk/info.py +32 -0
- {ic_code-1.5.2 → ic_code-1.5.3/src/ic_code.egg-info}/PKG-INFO +3 -3
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic_code.egg-info/SOURCES.txt +14 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/LICENSE +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/MANIFEST.in +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/SECURITY.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/config/default.yaml +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/README.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/aws/README.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/cloudflare/README.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/installation.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/oci/README.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/release-guide.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/security.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/ssh/README.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/tencent/README.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/docs/troubleshooting.md +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/requirements.txt +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/scripts/bump-version.sh +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/scripts/cf_edge_nsg_make/cf_edge_nsg_make.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/scripts/ci-detect-platforms.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/scripts/ci-generate-matrix.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/scripts/ci-smoke-test.sh +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/scripts/deploy.sh +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/scripts/oracle-policy/user_policy.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/setup.cfg +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/setup.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/gather_env.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/gcp_config_validator.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/gcp_monitoring.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/gcp_utils.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/log.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/progress_decorator.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/slack.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/common/utils.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/cli.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/commands/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/commands/config.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/commands/security.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/compat/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/compat/cli.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/compat/common.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/cleanup.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/docs_organizer.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/external.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/manager.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/migration_utils.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/path_manager.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/schema.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/config/security.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/dependency_validator.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/desc_helper.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/interfaces/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/interfaces/command.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/interfaces/formatter.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/interfaces/result.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/logging.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/platform_discovery.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/session.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/core/silence_logging.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/cloudfront/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/cloudfront/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/codepipeline/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/codepipeline/build.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/codepipeline/deploy.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ec2/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ec2/desc.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ec2/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ec2/list_tags.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ec2/tag_check.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ecs/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ecs/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ecs/service.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/ecs/task.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/eks/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/eks/addons.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/eks/fargate.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/eks/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/eks/nodes.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/eks/pods.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/eks/update_config.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/fargate/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/fargate/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/healthdashboard/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/healthdashboard/reboot.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/lb/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/lb/desc.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/lb/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/lb/list_tags.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/lb/tag_check.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/msk/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/msk/broker.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/msk/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/nat/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/nat/list_tags.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/nat/tag_check.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/profile/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/profile/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/rds/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/rds/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/rds/list_tags.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/rds/tag_check.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/s3/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/s3/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/s3/list_tags.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/s3/tag_check.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/sg/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/sg/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/vpc/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/vpc/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/vpc/list_tags.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/vpc/tag_check.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/vpn/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/aws/vpn/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/account/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/account/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/client.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/dns/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/dns/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/dns/list_info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/rules/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/rules/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/traffic/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/traffic/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/waf/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/waf/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/zone/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/cloudflare/zone/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/billing/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/billing/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/compute/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/compute/desc.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/compute/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/dns/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/dns/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/dns/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/firewall/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/firewall/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/firewall/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/functions/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/functions/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/functions/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/gke/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/gke/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/gke/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/lb/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/lb/desc.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/lb/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/lb/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/profile/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/profile/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/profile/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/project/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/project/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/project/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/run/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/run/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/run/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/sql/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/sql/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/sql/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/storage/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/storage/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/storage/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/vpc/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/vpc/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/gcp/vpc/mock_data.json +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/common/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/common/utils.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/compartment/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/compartment/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/cost/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/cost/credit.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/cost/usage.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/info/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/info/oci_info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/lb/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/lb/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/nsg/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/nsg/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/obj/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/obj/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/policy/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/policy/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/policy/search.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/vcn/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/vcn/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/vm/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/vm/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/volume/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/oci/volume/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/ssh/auto/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/ssh/auto/scan.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/ssh/server/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/ssh/server/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/clb/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/clb/desc.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/clb/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/clb/traffic.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/client.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/cvm/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/cvm/desc.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/cvm/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/lighthouse/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/lighthouse/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/nat/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/nat/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/profile/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/profile/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/sg/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/sg/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/tke/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/tke/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/vpc/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/platforms/tencent/vpc/info.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/security/__init__.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/security/config.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/security/detector.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/security/guidance.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/security/hooks.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/security/patterns.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic/security/scanner.py +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic_code.egg-info/dependency_links.txt +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic_code.egg-info/entry_points.txt +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic_code.egg-info/requires.txt +0 -0
- {ic_code-1.5.2 → ic_code-1.5.3}/src/ic_code.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ic-code
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.3
|
|
4
4
|
Summary: Infrastructure CLI tool for managing AWS, GCP, OCI, CloudFlare, SSH, and more
|
|
5
5
|
Home-page: https://github.com/dgr009/ic
|
|
6
6
|
Author: SangYun Kim
|
|
@@ -147,7 +147,7 @@ A comprehensive, production-grade Infrastructure Command Line Interface tool for
|
|
|
147
147
|
- **Networking**: VPC, Subnets, NAT Gateways, CLB (Load Balancers - listener rules, health check, target health analysis & network traffic bandwidth statistics), Security Groups (with Ingress/Egress rules & tree view)
|
|
148
148
|
- **Authentication**: Multi-account STS AssumeRole support, Profile management (`ic tencent profile info` via `~/.tencent/credentials`)
|
|
149
149
|
|
|
150
|
-
### 3. 🟩 GCP Services (Production Ready - v1.5.
|
|
150
|
+
### 3. 🟩 GCP Services (Production Ready - v1.5.3)
|
|
151
151
|
- **Compute Engine**: VM instances with status, zone, machine type (custom parsing), vCPU, memory, disks, IPs, tags, and verbose 15-column output (`ic gcp compute info -v`)
|
|
152
152
|
- **Compute Detailed Inspection (`desc`)**: Full attribute discovery, dot-notation key filtering (`-k / --keys`), schema discovery (`-l / --list-keys`) for instances
|
|
153
153
|
- **Load Balancing (LB)**: Forwarding rules, Target proxies, URL maps, Backend services, Health checks, and SSL certificates (`ic gcp lb info`)
|
|
@@ -336,7 +336,7 @@ ic tencent tke info
|
|
|
336
336
|
ic tencent profile info
|
|
337
337
|
```
|
|
338
338
|
|
|
339
|
-
### GCP Commands (v1.5.
|
|
339
|
+
### GCP Commands (v1.5.3)
|
|
340
340
|
|
|
341
341
|
```bash
|
|
342
342
|
# Compute Engine VM instances (summary & verbose 15-column output)
|
|
@@ -41,7 +41,7 @@ A comprehensive, production-grade Infrastructure Command Line Interface tool for
|
|
|
41
41
|
- **Networking**: VPC, Subnets, NAT Gateways, CLB (Load Balancers - listener rules, health check, target health analysis & network traffic bandwidth statistics), Security Groups (with Ingress/Egress rules & tree view)
|
|
42
42
|
- **Authentication**: Multi-account STS AssumeRole support, Profile management (`ic tencent profile info` via `~/.tencent/credentials`)
|
|
43
43
|
|
|
44
|
-
### 3. 🟩 GCP Services (Production Ready - v1.5.
|
|
44
|
+
### 3. 🟩 GCP Services (Production Ready - v1.5.3)
|
|
45
45
|
- **Compute Engine**: VM instances with status, zone, machine type (custom parsing), vCPU, memory, disks, IPs, tags, and verbose 15-column output (`ic gcp compute info -v`)
|
|
46
46
|
- **Compute Detailed Inspection (`desc`)**: Full attribute discovery, dot-notation key filtering (`-k / --keys`), schema discovery (`-l / --list-keys`) for instances
|
|
47
47
|
- **Load Balancing (LB)**: Forwarding rules, Target proxies, URL maps, Backend services, Health checks, and SSL certificates (`ic gcp lb info`)
|
|
@@ -230,7 +230,7 @@ ic tencent tke info
|
|
|
230
230
|
ic tencent profile info
|
|
231
231
|
```
|
|
232
232
|
|
|
233
|
-
### GCP Commands (v1.5.
|
|
233
|
+
### GCP Commands (v1.5.3)
|
|
234
234
|
|
|
235
235
|
```bash
|
|
236
236
|
# Compute Engine VM instances (summary & verbose 15-column output)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# GCP Platform Documentation
|
|
2
2
|
|
|
3
|
-
This directory contains documentation for the GCP (Google Cloud Platform) integration in IC CLI (v1.5.
|
|
3
|
+
This directory contains documentation for the GCP (Google Cloud Platform) integration in IC CLI (v1.5.3).
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ This directory contains documentation for the GCP (Google Cloud Platform) integr
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
## Services Supported (v1.5.
|
|
15
|
+
## Services Supported (v1.5.3)
|
|
16
16
|
|
|
17
17
|
| Service | Commands | Key Features |
|
|
18
18
|
|---|---|---|
|
|
@@ -47,7 +47,7 @@ ic config show
|
|
|
47
47
|
- **VPC / NAT / TKE**: `ic tencent vpc info` / `ic tencent nat info` / `ic tencent tke info`
|
|
48
48
|
- **자격 증명 확인**: `ic tencent profile info`
|
|
49
49
|
|
|
50
|
-
### 3. 🟩 GCP Services (v1.5.
|
|
50
|
+
### 3. 🟩 GCP Services (v1.5.3)
|
|
51
51
|
- **Compute Engine (요약 & 15개 컬럼 상세 & desc)**:
|
|
52
52
|
- `ic gcp compute info`: 기본 요약 목록
|
|
53
53
|
- `ic gcp compute info -v`: 상세 15열 뷰 (vCPU, Mem, Disks, Net/Subnet, Tags 등)
|
|
@@ -4,7 +4,7 @@ IC (Infra Resource Management CLI) - A comprehensive tool for managing cloud inf
|
|
|
4
4
|
This package provides CLI tools and libraries for managing AWS, GCP, OCI, CloudFlare, and SSH resources.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
__version__ = "1.5.
|
|
7
|
+
__version__ = "1.5.3"
|
|
8
8
|
__author__ = "SangYun"
|
|
9
9
|
__email__ = "cruiser594@gmail.com"
|
|
10
10
|
|
|
@@ -104,15 +104,15 @@ class ConfigInstaller:
|
|
|
104
104
|
|
|
105
105
|
def _install_secrets_example(self, target_path: Path) -> None:
|
|
106
106
|
"""Install secrets.yaml.example file."""
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
template_file_content = self.config_generator.generate_secrets_example()
|
|
108
|
+
example_file_path = target_path / 'secrets.yaml.example'
|
|
109
109
|
|
|
110
|
-
with open(
|
|
111
|
-
f.write(
|
|
110
|
+
with open(example_file_path, 'w') as f:
|
|
111
|
+
f.write(template_file_content)
|
|
112
112
|
|
|
113
113
|
# Set file permissions
|
|
114
114
|
if os.name != 'nt': # Not Windows
|
|
115
|
-
os.chmod(
|
|
115
|
+
os.chmod(example_file_path, 0o644)
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
class DefaultConfigGenerator:
|
|
@@ -181,7 +181,7 @@ class DefaultConfigGenerator:
|
|
|
181
181
|
Returns:
|
|
182
182
|
Example secrets configuration as YAML string
|
|
183
183
|
"""
|
|
184
|
-
|
|
184
|
+
template_config = {
|
|
185
185
|
'aws': {
|
|
186
186
|
'profile': 'your-aws-profile-name',
|
|
187
187
|
'access_key_id': 'AKIA...',
|
|
@@ -209,9 +209,9 @@ class DefaultConfigGenerator:
|
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
# Add comprehensive comments for secrets
|
|
212
|
-
|
|
212
|
+
yaml_file_content = self._add_secrets_comments()
|
|
213
213
|
|
|
214
|
-
return
|
|
214
|
+
return yaml_file_content
|
|
215
215
|
|
|
216
216
|
def _add_yaml_comments(self) -> str:
|
|
217
217
|
"""Add comprehensive comments to default YAML configuration."""
|
|
@@ -50,9 +50,9 @@ class MigrationManager:
|
|
|
50
50
|
# Check if YAML files already exist
|
|
51
51
|
config_dir = Path("config")
|
|
52
52
|
default_yaml = config_dir / "default.yaml"
|
|
53
|
-
|
|
53
|
+
secrets_file_path = config_dir / "secrets.yaml"
|
|
54
54
|
|
|
55
|
-
if not force and (default_yaml.exists() or
|
|
55
|
+
if not force and (default_yaml.exists() or secrets_file_path.exists()):
|
|
56
56
|
logger.warning("YAML configuration files already exist. Use force=True to overwrite.")
|
|
57
57
|
return False
|
|
58
58
|
|
|
@@ -69,8 +69,8 @@ class MigrationManager:
|
|
|
69
69
|
# Backup existing files if they exist
|
|
70
70
|
if default_yaml.exists():
|
|
71
71
|
self._backup_file(default_yaml)
|
|
72
|
-
if
|
|
73
|
-
self._backup_file(
|
|
72
|
+
if secrets_file_path.exists():
|
|
73
|
+
self._backup_file(secrets_file_path)
|
|
74
74
|
|
|
75
75
|
# Save configurations
|
|
76
76
|
success = True
|
|
@@ -81,11 +81,11 @@ class MigrationManager:
|
|
|
81
81
|
|
|
82
82
|
# Save secrets configuration
|
|
83
83
|
if secrets_config:
|
|
84
|
-
success &= self._save_yaml_config(
|
|
84
|
+
success &= self._save_yaml_config(secrets_file_path, secrets_config)
|
|
85
85
|
|
|
86
86
|
# Set restrictive permissions on secrets file
|
|
87
87
|
try:
|
|
88
|
-
|
|
88
|
+
secrets_file_path.chmod(0o600)
|
|
89
89
|
except Exception as e:
|
|
90
90
|
logger.warning(f"Failed to set restrictive permissions on secrets file: {e}")
|
|
91
91
|
|
|
@@ -94,7 +94,7 @@ class MigrationManager:
|
|
|
94
94
|
self._backup_file(env_path)
|
|
95
95
|
|
|
96
96
|
# Record migration
|
|
97
|
-
self._record_migration(env_path, default_yaml,
|
|
97
|
+
self._record_migration(env_path, default_yaml, secrets_file_path)
|
|
98
98
|
|
|
99
99
|
logger.info("Successfully migrated .env file to YAML configuration")
|
|
100
100
|
return True
|
|
@@ -388,11 +388,11 @@ class MigrationManager:
|
|
|
388
388
|
yaml.dump(config, f, default_flow_style=False, indent=2,
|
|
389
389
|
allow_unicode=True, sort_keys=False)
|
|
390
390
|
|
|
391
|
-
logger.info(
|
|
391
|
+
logger.info("Saved configuration to %s", file_path.name)
|
|
392
392
|
return True
|
|
393
393
|
|
|
394
394
|
except Exception as e:
|
|
395
|
-
logger.error(
|
|
395
|
+
logger.error("Failed to save configuration to %s: %s", file_path.name, e)
|
|
396
396
|
return False
|
|
397
397
|
|
|
398
398
|
def _backup_file(self, file_path: Path) -> Optional[Path]:
|
|
@@ -418,20 +418,20 @@ class MigrationManager:
|
|
|
418
418
|
|
|
419
419
|
try:
|
|
420
420
|
shutil.copy2(file_path, backup_path)
|
|
421
|
-
logger.info(
|
|
421
|
+
logger.info("Backed up %s to %s", file_path.name, backup_path.name)
|
|
422
422
|
return backup_path
|
|
423
423
|
except Exception as e:
|
|
424
|
-
logger.error(
|
|
424
|
+
logger.error("Failed to backup %s: %s", file_path.name, e)
|
|
425
425
|
return None
|
|
426
426
|
|
|
427
|
-
def _record_migration(self, env_path: Path, default_yaml: Path,
|
|
427
|
+
def _record_migration(self, env_path: Path, default_yaml: Path, secrets_file_path: Path):
|
|
428
428
|
"""Record migration details for history."""
|
|
429
429
|
migration_record = {
|
|
430
430
|
"timestamp": datetime.now().isoformat(),
|
|
431
431
|
"source_file": str(env_path),
|
|
432
432
|
"target_files": {
|
|
433
|
-
"
|
|
434
|
-
"
|
|
433
|
+
"default_config_path": str(default_yaml),
|
|
434
|
+
"secrets_config_path": str(secrets_file_path) if secrets_file_path.exists() else None
|
|
435
435
|
},
|
|
436
436
|
"backup_location": str(self.backup_dir)
|
|
437
437
|
}
|
|
@@ -446,17 +446,17 @@ class MigrationManager:
|
|
|
446
446
|
True if document was created successfully
|
|
447
447
|
"""
|
|
448
448
|
try:
|
|
449
|
-
|
|
449
|
+
history_file_content = self._generate_migration_history_content()
|
|
450
450
|
|
|
451
|
-
|
|
452
|
-
with open(
|
|
453
|
-
f.write(
|
|
451
|
+
history_file_path = self.backup_dir / "migration_history.md"
|
|
452
|
+
with open(history_file_path, 'w', encoding='utf-8') as f:
|
|
453
|
+
f.write(history_file_content)
|
|
454
454
|
|
|
455
|
-
logger.info(
|
|
455
|
+
logger.info("Created migration history document at %s", history_file_path.name)
|
|
456
456
|
return True
|
|
457
457
|
|
|
458
458
|
except Exception as e:
|
|
459
|
-
logger.error(
|
|
459
|
+
logger.error("Failed to create migration history document: %s", e)
|
|
460
460
|
return False
|
|
461
461
|
|
|
462
462
|
def _generate_migration_history_content(self) -> str:
|
|
@@ -507,10 +507,15 @@ backup/
|
|
|
507
507
|
content += f"### Migration {i}\n\n"
|
|
508
508
|
content += f"- **Date**: {record['timestamp']}\n"
|
|
509
509
|
content += f"- **Source**: {record['source_file']}\n"
|
|
510
|
-
content += f"- **Default Config**: {record['target_files']['default_config']}\n"
|
|
511
510
|
|
|
512
|
-
|
|
513
|
-
|
|
511
|
+
target_files = record.get('target_files', {})
|
|
512
|
+
default_file_path = target_files.get('default_config_path')
|
|
513
|
+
if default_file_path:
|
|
514
|
+
content += f"- **Default Config**: {default_file_path}\n"
|
|
515
|
+
|
|
516
|
+
secrets_file_path = target_files.get('secrets_config_path')
|
|
517
|
+
if secrets_file_path:
|
|
518
|
+
content += f"- **Secrets Config**: {secrets_file_path}\n"
|
|
514
519
|
|
|
515
520
|
content += f"- **Backup Location**: {record['backup_location']}\n\n"
|
|
516
521
|
else:
|
|
@@ -80,11 +80,10 @@ class SecretsManager:
|
|
|
80
80
|
secrets = self._merge_secrets(secrets, env_secrets)
|
|
81
81
|
logger.debug("Merged secrets from environment variables")
|
|
82
82
|
|
|
83
|
-
# Validate that secrets are properly separated (log
|
|
83
|
+
# Validate that secrets are properly separated (log summary only, no cleartext secret keys)
|
|
84
84
|
validation_warnings = self.validate_secrets_separation(secrets)
|
|
85
85
|
if validation_warnings:
|
|
86
|
-
|
|
87
|
-
logger.debug(f"Secrets validation: {warning}") # Changed to debug level
|
|
86
|
+
logger.debug("Secrets validation completed with %d checks", len(validation_warnings))
|
|
88
87
|
|
|
89
88
|
self.secrets_data = secrets
|
|
90
89
|
return secrets
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""AWS Disk (EBS alias) module for IC CLI."""
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
AWS Disk Info Command (Alias to AWS EBS Info Command).
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
from typing import Any, Optional
|
|
8
|
+
from ic.platforms.aws.ebs.info import (
|
|
9
|
+
EbsInfoCommand,
|
|
10
|
+
main as ebs_main,
|
|
11
|
+
add_arguments as ebs_add_arguments,
|
|
12
|
+
format_table_output,
|
|
13
|
+
format_tree_output,
|
|
14
|
+
print_paste_format
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AwsDiskInfoCommand(EbsInfoCommand):
|
|
19
|
+
"""AWS Disk (EBS) 볼륨 정보 조회 커맨드 (Alias)"""
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def main(args: Optional[argparse.Namespace] = None, config: Any = None) -> None:
|
|
24
|
+
ebs_main(args, config)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def add_arguments(parser: argparse.ArgumentParser) -> None:
|
|
28
|
+
ebs_add_arguments(parser)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
main()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""AWS EBS (Elastic Block Store) module for IC CLI."""
|