ic-code 1.2.1__tar.gz → 1.2.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.
Files changed (289) hide show
  1. {ic_code-1.2.1/src/ic_code.egg-info → ic_code-1.2.3}/PKG-INFO +1 -1
  2. {ic_code-1.2.1 → ic_code-1.2.3}/pyproject.toml +1 -1
  3. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/__init__.py +1 -1
  4. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/cli.py +13 -1
  5. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ec2/list_tags.py +32 -26
  6. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/lb/list_tags.py +28 -27
  7. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/nat/list_tags.py +41 -8
  8. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/rds/list_tags.py +42 -8
  9. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/s3/list_tags.py +42 -6
  10. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/vpc/list_tags.py +28 -27
  11. {ic_code-1.2.1 → ic_code-1.2.3/src/ic_code.egg-info}/PKG-INFO +1 -1
  12. {ic_code-1.2.1 → ic_code-1.2.3}/LICENSE +0 -0
  13. {ic_code-1.2.1 → ic_code-1.2.3}/MANIFEST.in +0 -0
  14. {ic_code-1.2.1 → ic_code-1.2.3}/README.md +0 -0
  15. {ic_code-1.2.1 → ic_code-1.2.3}/SECURITY.md +0 -0
  16. {ic_code-1.2.1 → ic_code-1.2.3}/docs/README.md +0 -0
  17. {ic_code-1.2.1 → ic_code-1.2.3}/docs/_templates/configuration.md +0 -0
  18. {ic_code-1.2.1 → ic_code-1.2.3}/docs/_templates/installation.md +0 -0
  19. {ic_code-1.2.1 → ic_code-1.2.3}/docs/_templates/troubleshooting.md +0 -0
  20. {ic_code-1.2.1 → ic_code-1.2.3}/docs/_templates/usage.md +0 -0
  21. {ic_code-1.2.1 → ic_code-1.2.3}/docs/aws/README.md +0 -0
  22. {ic_code-1.2.1 → ic_code-1.2.3}/docs/aws/aws_cli_prd.md +0 -0
  23. {ic_code-1.2.1 → ic_code-1.2.3}/docs/aws/installation.md +0 -0
  24. {ic_code-1.2.1 → ic_code-1.2.3}/docs/azure/README.md +0 -0
  25. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ci-workflow-guide.md +0 -0
  26. {ic_code-1.2.1 → ic_code-1.2.3}/docs/config_migration.md +0 -0
  27. {ic_code-1.2.1 → ic_code-1.2.3}/docs/deployment.md +0 -0
  28. {ic_code-1.2.1 → ic_code-1.2.3}/docs/development/README.md +0 -0
  29. {ic_code-1.2.1 → ic_code-1.2.3}/docs/development/cleanup_summary.md +0 -0
  30. {ic_code-1.2.1 → ic_code-1.2.3}/docs/development/development_guide.md +0 -0
  31. {ic_code-1.2.1 → ic_code-1.2.3}/docs/development/import_patterns.md +0 -0
  32. {ic_code-1.2.1 → ic_code-1.2.3}/docs/development/migration_guide.md +0 -0
  33. {ic_code-1.2.1 → ic_code-1.2.3}/docs/gcp/GCP_CONFIGURATION_GUIDE.md +0 -0
  34. {ic_code-1.2.1 → ic_code-1.2.3}/docs/gcp/GCP_SECURITY_BEST_PRACTICES.md +0 -0
  35. {ic_code-1.2.1 → ic_code-1.2.3}/docs/gcp/README.md +0 -0
  36. {ic_code-1.2.1 → ic_code-1.2.3}/docs/general/configuration.md +0 -0
  37. {ic_code-1.2.1 → ic_code-1.2.3}/docs/installation.md +0 -0
  38. {ic_code-1.2.1 → ic_code-1.2.3}/docs/mcp_integration.md +0 -0
  39. {ic_code-1.2.1 → ic_code-1.2.3}/docs/migration.md +0 -0
  40. {ic_code-1.2.1 → ic_code-1.2.3}/docs/migration_guide.md +0 -0
  41. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ncp/README.md +0 -0
  42. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ncp/configuration.md +0 -0
  43. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ncp/installation.md +0 -0
  44. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ncp/troubleshooting.md +0 -0
  45. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ncp/usage.md +0 -0
  46. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ncpgov/README.md +0 -0
  47. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ncpgov/installation.md +0 -0
  48. {ic_code-1.2.1 → ic_code-1.2.3}/docs/oci/README.md +0 -0
  49. {ic_code-1.2.1 → ic_code-1.2.3}/docs/oci/installation.md +0 -0
  50. {ic_code-1.2.1 → ic_code-1.2.3}/docs/release-guide.md +0 -0
  51. {ic_code-1.2.1 → ic_code-1.2.3}/docs/security.md +0 -0
  52. {ic_code-1.2.1 → ic_code-1.2.3}/docs/ssh/configuration.md +0 -0
  53. {ic_code-1.2.1 → ic_code-1.2.3}/docs/troubleshooting.md +0 -0
  54. {ic_code-1.2.1 → ic_code-1.2.3}/docs/user_guide.md +0 -0
  55. {ic_code-1.2.1 → ic_code-1.2.3}/requirements.txt +0 -0
  56. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/analysis_summary.py +0 -0
  57. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/bump-version.sh +0 -0
  58. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/cf_edge_nsg_make/cf_edge_nsg_make.py +0 -0
  59. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/ci-detect-platforms.py +0 -0
  60. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/ci-generate-matrix.py +0 -0
  61. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/cli_usage_analysis.py +0 -0
  62. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/dependency_mapper.py +0 -0
  63. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/deploy.sh +0 -0
  64. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/final_validation_and_documentation.py +0 -0
  65. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/fix_consolidated_imports.py +0 -0
  66. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/migration_execution_and_validation.py +0 -0
  67. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/ncp_security_scanner.py +0 -0
  68. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/oracle-policy/user_policy.py +0 -0
  69. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/performance_optimization.py +0 -0
  70. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/setup_venv.py +0 -0
  71. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/test-ci-detection.sh +0 -0
  72. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/unset_env.sh +0 -0
  73. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/validate_config.py +0 -0
  74. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/validate_dependencies.py +0 -0
  75. {ic_code-1.2.1 → ic_code-1.2.3}/scripts/validate_ncp_security.py +0 -0
  76. {ic_code-1.2.1 → ic_code-1.2.3}/setup.cfg +0 -0
  77. {ic_code-1.2.1 → ic_code-1.2.3}/setup.py +0 -0
  78. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/__init__.py +0 -0
  79. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/azure_utils.py +0 -0
  80. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/gather_env.py +0 -0
  81. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/gcp_config_validator.py +0 -0
  82. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/gcp_monitoring.py +0 -0
  83. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/gcp_utils.py +0 -0
  84. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/log.py +0 -0
  85. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/ncp_security_utils.py +0 -0
  86. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/ncp_utils.py +0 -0
  87. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/ncpgov_utils.py +0 -0
  88. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/progress_decorator.py +0 -0
  89. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/slack.py +0 -0
  90. {ic_code-1.2.1 → ic_code-1.2.3}/src/common/utils.py +0 -0
  91. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/cli_backup.py +0 -0
  92. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/commands/__init__.py +0 -0
  93. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/commands/config.py +0 -0
  94. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/commands/migration.py +0 -0
  95. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/commands/security.py +0 -0
  96. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/compat/__init__.py +0 -0
  97. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/compat/cli.py +0 -0
  98. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/compat/common.py +0 -0
  99. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/__init__.py +0 -0
  100. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/cleanup.py +0 -0
  101. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/docs_organizer.py +0 -0
  102. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/external.py +0 -0
  103. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/installer.py +0 -0
  104. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/manager.py +0 -0
  105. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/migration.py +0 -0
  106. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/migration_utils.py +0 -0
  107. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/path_manager.py +0 -0
  108. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/schema.py +0 -0
  109. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/secrets.py +0 -0
  110. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/config/security.py +0 -0
  111. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/core/__init__.py +0 -0
  112. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/core/dependency_validator.py +0 -0
  113. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/core/logging.py +0 -0
  114. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/core/mcp_manager.py +0 -0
  115. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/core/platform_discovery.py +0 -0
  116. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/core/session.py +0 -0
  117. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/core/silence_logging.py +0 -0
  118. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/migration/__init__.py +0 -0
  119. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/migration/manager.py +0 -0
  120. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/migration/post_validation.py +0 -0
  121. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/migration/rollback.py +0 -0
  122. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/migration/validation.py +0 -0
  123. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/__init__.py +0 -0
  124. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/__init__.py +0 -0
  125. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/cloudfront/__init__.py +0 -0
  126. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/cloudfront/info.py +0 -0
  127. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/codepipeline/__init__.py +0 -0
  128. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/codepipeline/build.py +0 -0
  129. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/codepipeline/deploy.py +0 -0
  130. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ec2/__init__.py +0 -0
  131. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ec2/info.py +0 -0
  132. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ec2/tag_check.py +0 -0
  133. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ecs/__init__.py +0 -0
  134. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ecs/info.py +0 -0
  135. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ecs/service.py +0 -0
  136. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/ecs/task.py +0 -0
  137. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/eks/__init__.py +0 -0
  138. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/eks/addons.py +0 -0
  139. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/eks/fargate.py +0 -0
  140. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/eks/info.py +0 -0
  141. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/eks/nodes.py +0 -0
  142. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/eks/pods.py +0 -0
  143. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/eks/update_config.py +0 -0
  144. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/fargate/__init__.py +0 -0
  145. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/fargate/info.py +0 -0
  146. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/lb/__init__.py +0 -0
  147. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/lb/info.py +0 -0
  148. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/lb/tag_check.py +0 -0
  149. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/msk/__init__.py +0 -0
  150. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/msk/broker.py +0 -0
  151. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/msk/info.py +0 -0
  152. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/nat/__init__.py +0 -0
  153. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/nat/tag_check.py +0 -0
  154. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/profile/__init__.py +0 -0
  155. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/profile/info.py +0 -0
  156. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/rds/__init__.py +0 -0
  157. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/rds/info.py +0 -0
  158. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/rds/tag_check.py +0 -0
  159. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/s3/__init__.py +0 -0
  160. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/s3/info.py +0 -0
  161. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/s3/tag_check.py +0 -0
  162. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/sg/__init__.py +0 -0
  163. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/sg/info.py +0 -0
  164. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/vpc/__init__.py +0 -0
  165. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/vpc/info.py +0 -0
  166. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/vpc/tag_check.py +0 -0
  167. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/vpn/__init__.py +0 -0
  168. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/aws/vpn/info.py +0 -0
  169. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/README.md +0 -0
  170. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/__init__.py +0 -0
  171. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/aci/__init__.py +0 -0
  172. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/aci/info.py +0 -0
  173. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/aks/__init__.py +0 -0
  174. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/aks/info.py +0 -0
  175. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/lb/__init__.py +0 -0
  176. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/lb/info.py +0 -0
  177. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/nsg/__init__.py +0 -0
  178. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/nsg/info.py +0 -0
  179. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/storage/__init__.py +0 -0
  180. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/storage/info.py +0 -0
  181. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/vm/__init__.py +0 -0
  182. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/vm/info.py +0 -0
  183. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/vm/mock_data.json +0 -0
  184. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/vnet/__init__.py +0 -0
  185. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/vnet/info.py +0 -0
  186. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/azure/vnet/mock_data.json +0 -0
  187. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/cloudflare/README.md +0 -0
  188. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/cloudflare/__init__.py +0 -0
  189. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/cloudflare/dns/__init__.py +0 -0
  190. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/cloudflare/dns/list_info.py +0 -0
  191. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/README.md +0 -0
  192. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/__init__.py +0 -0
  193. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/billing/__init__.py +0 -0
  194. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/billing/info.py +0 -0
  195. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/billing/mock_data.json +0 -0
  196. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/compute/__init__.py +0 -0
  197. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/compute/info.py +0 -0
  198. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/compute/mock_data.json +0 -0
  199. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/firewall/__init__.py +0 -0
  200. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/firewall/info.py +0 -0
  201. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/functions/__init__.py +0 -0
  202. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/functions/info.py +0 -0
  203. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/gke/__init__.py +0 -0
  204. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/gke/info.py +0 -0
  205. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/gke/mock_data.json +0 -0
  206. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/lb/__init__.py +0 -0
  207. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/lb/info.py +0 -0
  208. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/run/__init__.py +0 -0
  209. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/run/info.py +0 -0
  210. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/sql/__init__.py +0 -0
  211. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/sql/info.py +0 -0
  212. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/storage/__init__.py +0 -0
  213. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/storage/info.py +0 -0
  214. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/vpc/__init__.py +0 -0
  215. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/vpc/info.py +0 -0
  216. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/gcp/vpc/mock_data.json +0 -0
  217. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/__init__.py +0 -0
  218. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/client.py +0 -0
  219. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/ec2/__init__.py +0 -0
  220. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/ec2/info.py +0 -0
  221. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/rds/__init__.py +0 -0
  222. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/rds/info.py +0 -0
  223. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/s3/__init__.py +0 -0
  224. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/s3/info.py +0 -0
  225. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/sg/__init__.py +0 -0
  226. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/sg/info.py +0 -0
  227. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/vpc/__init__.py +0 -0
  228. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncp/vpc/info.py +0 -0
  229. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/__init__.py +0 -0
  230. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/client.py +0 -0
  231. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/ec2/__init__.py +0 -0
  232. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/ec2/info.py +0 -0
  233. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/rds/__init__.py +0 -0
  234. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/rds/info.py +0 -0
  235. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/s3/__init__.py +0 -0
  236. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/s3/info.py +0 -0
  237. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/sg/__init__.py +0 -0
  238. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/sg/info.py +0 -0
  239. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/vpc/__init__.py +0 -0
  240. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ncpgov/vpc/info.py +0 -0
  241. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/README.md +0 -0
  242. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/__init__.py +0 -0
  243. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/common/__init__.py +0 -0
  244. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/common/utils.py +0 -0
  245. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/compartment/__init__.py +0 -0
  246. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/compartment/info.py +0 -0
  247. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/cost/__init__.py +0 -0
  248. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/cost/credit.py +0 -0
  249. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/cost/usage.py +0 -0
  250. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/info/__init__.py +0 -0
  251. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/info/oci_info.py +0 -0
  252. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/lb/__init__.py +0 -0
  253. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/lb/info.py +0 -0
  254. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/nsg/__init__.py +0 -0
  255. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/nsg/info.py +0 -0
  256. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/obj/__init__.py +0 -0
  257. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/obj/info.py +0 -0
  258. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/policy/__init__.py +0 -0
  259. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/policy/info.py +0 -0
  260. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/policy/search.py +0 -0
  261. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/vcn/__init__.py +0 -0
  262. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/vcn/info.py +0 -0
  263. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/vm/__init__.py +0 -0
  264. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/vm/info.py +0 -0
  265. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/volume/__init__.py +0 -0
  266. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/oci/volume/info.py +0 -0
  267. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/README.md +0 -0
  268. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/__init__.py +0 -0
  269. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/auto/__init__.py +0 -0
  270. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/auto/scan.py +0 -0
  271. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/auto_ssh.py +0 -0
  272. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/server/__init__.py +0 -0
  273. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/server/info.py +0 -0
  274. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/platforms/ssh/server_info.py +0 -0
  275. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/README.md +0 -0
  276. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/__init__.py +0 -0
  277. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/config.py +0 -0
  278. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/detector.py +0 -0
  279. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/guidance.py +0 -0
  280. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/hooks.py +0 -0
  281. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/patterns.py +0 -0
  282. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic/security/scanner.py +0 -0
  283. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic_code.egg-info/SOURCES.txt +0 -0
  284. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic_code.egg-info/dependency_links.txt +0 -0
  285. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic_code.egg-info/entry_points.txt +0 -0
  286. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic_code.egg-info/requires.txt +0 -0
  287. {ic_code-1.2.1 → ic_code-1.2.3}/src/ic_code.egg-info/top_level.txt +0 -0
  288. {ic_code-1.2.1 → ic_code-1.2.3}/src/mcp/__init__.py +0 -0
  289. {ic_code-1.2.1 → ic_code-1.2.3}/src/mcp/gcp_connector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ic-code
3
- Version: 1.2.1
3
+ Version: 1.2.3
4
4
  Summary: Infrastructure CLI tool for managing AWS, Azure, GCP, OCI, NCP, CloudFlare, SSH, and more
5
5
  Home-page: https://github.com/dgr009/ic
6
6
  Author: SangYun Kim
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ic-code"
7
- version = "1.2.1"
7
+ version = "1.2.3"
8
8
  authors = [
9
9
  {name = "sykim", email = "cruiser594@gmail.com"},
10
10
  ]
@@ -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, Azure, GCP, OCI, and CloudFlare resources.
5
5
  """
6
6
 
7
- __version__ = "1.2.1"
7
+ __version__ = "1.2.3"
8
8
  __author__ = "SangYun"
9
9
  __email__ = "cruiser594@gmail.com"
10
10
 
@@ -464,12 +464,24 @@ def main():
464
464
  usage="ic <platform|config> <service> <command> [options]",
465
465
  formatter_class=argparse.RawDescriptionHelpFormatter
466
466
  )
467
+
468
+ # Add version argument
469
+ try:
470
+ from . import __version__
471
+ except ImportError:
472
+ from ic import __version__
473
+ parser.add_argument('--version', '-v', action='version', version=f'ic-code {__version__}')
474
+
467
475
  platform_subparsers = parser.add_subparsers(
468
476
  dest="platform",
469
- required=True,
477
+ required=False,
470
478
  help="클라우드 플랫폼 (aws, oci, cf, ssh, azure, gcp) 또는 config 관리"
471
479
  )
472
480
 
481
+ # Add version command
482
+ version_parser = platform_subparsers.add_parser('version', help='Show IC version')
483
+ version_parser.set_defaults(func=lambda args: print(f'ic-code {__version__}'))
484
+
473
485
  # Add config commands
474
486
  try:
475
487
  from .commands.config import ConfigCommands
@@ -11,39 +11,45 @@ except ImportError:
11
11
  from rich.console import Console
12
12
  from rich.table import Table
13
13
 
14
- # 새로운 설정 시스템 import
15
- try:
16
- from src.ic.config.manager import ConfigManager
17
- config_manager = ConfigManager()
18
- config = config_manager.get_config()
19
- except ImportError:
20
- try:
21
- from ic.config.manager import ConfigManager
22
- config_manager = ConfigManager()
23
- config = config_manager.get_config()
24
- except ImportError:
25
- # Legacy fallback for development
26
- import sys
27
- import os
28
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))
29
- from ic.config.manager import ConfigManager
30
- config_manager = ConfigManager()
31
- config = config_manager.get_config()
32
- except ImportError:
33
- # 호환성을 위한 fallback
34
- from dotenv import load_dotenv
35
- load_dotenv()
36
- config = {}
37
-
38
14
  console = Console()
39
15
 
40
16
  # 새로운 설정 시스템에서 태그 키 가져오기
41
17
  def get_tag_keys():
42
18
  """설정에서 태그 키를 가져옵니다."""
19
+ # 함수 내부에서 ConfigManager 로드
20
+ try:
21
+ from src.ic.config.manager import ConfigManager
22
+ config_manager = ConfigManager()
23
+ config_manager.load_config() # 기본 설정 로드
24
+ secrets = config_manager.load_secrets_config() # secrets.yaml 로드
25
+ config = config_manager.get_config() # 기본 설정 가져오기
26
+
27
+ # secrets의 aws 설정을 config에 병합
28
+ if secrets and 'aws' in secrets:
29
+ if 'aws' not in config:
30
+ config['aws'] = {}
31
+ config['aws'].update(secrets['aws'])
32
+ except ImportError:
33
+ try:
34
+ from ic.config.manager import ConfigManager
35
+ config_manager = ConfigManager()
36
+ config_manager.load_config() # 기본 설정 로드
37
+ secrets = config_manager.load_secrets_config() # secrets.yaml 로드
38
+ config = config_manager.get_config() # 기본 설정 가져오기
39
+
40
+ # secrets의 aws 설정을 config에 병합
41
+ if secrets and 'aws' in secrets:
42
+ if 'aws' not in config:
43
+ config['aws'] = {}
44
+ config['aws'].update(secrets['aws'])
45
+ except ImportError:
46
+ # Legacy fallback
47
+ config = {}
48
+
43
49
  if config and 'aws' in config and 'tags' in config['aws']:
44
50
  aws_tags = config['aws']['tags']
45
- required_tags = aws_tags.get('required', ['User', 'Team', 'Environment'])
46
- optional_tags = aws_tags.get('optional', ['Service', 'Application'])
51
+ required_tags = aws_tags.get('required', [])
52
+ optional_tags = aws_tags.get('optional', [])
47
53
  else:
48
54
  # Fallback to environment variables
49
55
  env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
@@ -14,41 +14,42 @@ except ImportError:
14
14
  from rich.console import Console
15
15
  from rich.table import Table
16
16
 
17
- # 새로운 설정 시스템 import
18
- try:
19
- from src.ic.config.manager import ConfigManager
20
- config_manager = ConfigManager()
21
- config = config_manager.get_config()
22
- except ImportError:
23
- try:
24
- from ic.config.manager import ConfigManager
25
- config_manager = ConfigManager()
26
- config = config_manager.get_config()
27
- except ImportError:
28
- # Legacy fallback for development
29
- import sys
30
- import os
31
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))
32
- from ic.config.manager import ConfigManager
33
- config_manager = ConfigManager()
34
- config = config_manager.get_config()
35
- except ImportError:
36
- # 호환성을 위한 fallback
37
- from dotenv import load_dotenv
38
- load_dotenv()
39
- config = {}
40
-
41
17
  console = Console()
42
18
 
43
19
  # 새로운 설정 시스템에서 태그 키 가져오기
44
20
  def get_tag_keys():
45
21
  """설정에서 태그 키를 가져옵니다."""
22
+ try:
23
+ from src.ic.config.manager import ConfigManager
24
+ config_manager = ConfigManager()
25
+ config_manager.load_config()
26
+ secrets = config_manager.load_secrets_config()
27
+ config = config_manager.get_config()
28
+
29
+ if secrets and 'aws' in secrets:
30
+ if 'aws' not in config:
31
+ config['aws'] = {}
32
+ config['aws'].update(secrets['aws'])
33
+ except ImportError:
34
+ try:
35
+ from ic.config.manager import ConfigManager
36
+ config_manager = ConfigManager()
37
+ config_manager.load_config()
38
+ secrets = config_manager.load_secrets_config()
39
+ config = config_manager.get_config()
40
+
41
+ if secrets and 'aws' in secrets:
42
+ if 'aws' not in config:
43
+ config['aws'] = {}
44
+ config['aws'].update(secrets['aws'])
45
+ except ImportError:
46
+ config = {}
47
+
46
48
  if config and 'aws' in config and 'tags' in config['aws']:
47
49
  aws_tags = config['aws']['tags']
48
- required_tags = aws_tags.get('required', ['User', 'Team', 'Environment'])
49
- optional_tags = aws_tags.get('optional', ['Service', 'Application'])
50
+ required_tags = aws_tags.get('required', [])
51
+ optional_tags = aws_tags.get('optional', [])
50
52
  else:
51
- # Fallback to environment variables
52
53
  env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
53
54
  env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
54
55
  required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
@@ -18,17 +18,50 @@ except ImportError:
18
18
  from rich.console import Console
19
19
  from rich.table import Table
20
20
 
21
- load_dotenv()
22
-
23
21
  console = Console()
24
22
 
25
- # .env에서 공통 태그 키를 읽기 (EC2 / LB와 동일)
26
- env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
27
- env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
23
+ # 새로운 설정 시스템에서 태그 가져오기
24
+ def get_tag_keys():
25
+ """설정에서 태그 키를 가져옵니다."""
26
+ try:
27
+ from src.ic.config.manager import ConfigManager
28
+ config_manager = ConfigManager()
29
+ config_manager.load_config()
30
+ secrets = config_manager.load_secrets_config()
31
+ config = config_manager.get_config()
32
+
33
+ if secrets and 'aws' in secrets:
34
+ if 'aws' not in config:
35
+ config['aws'] = {}
36
+ config['aws'].update(secrets['aws'])
37
+ except ImportError:
38
+ try:
39
+ from ic.config.manager import ConfigManager
40
+ config_manager = ConfigManager()
41
+ config_manager.load_config()
42
+ secrets = config_manager.load_secrets_config()
43
+ config = config_manager.get_config()
44
+
45
+ if secrets and 'aws' in secrets:
46
+ if 'aws' not in config:
47
+ config['aws'] = {}
48
+ config['aws'].update(secrets['aws'])
49
+ except ImportError:
50
+ config = {}
51
+
52
+ if config and 'aws' in config and 'tags' in config['aws']:
53
+ aws_tags = config['aws']['tags']
54
+ required_tags = aws_tags.get('required', [])
55
+ optional_tags = aws_tags.get('optional', [])
56
+ else:
57
+ env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
58
+ env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
59
+ required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
60
+ optional_tags = [t.strip() for t in env_optional.split(",") if t.strip()]
61
+
62
+ return required_tags + optional_tags
28
63
 
29
- required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
30
- optional_tags = [t.strip() for t in env_optional.split(",") if t.strip()]
31
- TAG_KEYS = required_tags + optional_tags
64
+ TAG_KEYS = get_tag_keys()
32
65
 
33
66
  @log_decorator
34
67
  def fetch_nat_tags(account_id, profile_name, region):
@@ -14,16 +14,50 @@ except ImportError:
14
14
  from rich.console import Console
15
15
  from rich.table import Table
16
16
 
17
- load_dotenv()
18
17
  console = Console()
19
18
 
20
- # .env에서 공통 태그 키 불러오기
21
- env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
22
- env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
23
-
24
- required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
25
- optional_tags = [t.strip() for t in env_optional.split(",") if t.strip()]
26
- TAG_KEYS = required_tags + optional_tags
19
+ # 새로운 설정 시스템에서 태그 키 가져오기
20
+ def get_tag_keys():
21
+ """설정에서 태그 키를 가져옵니다."""
22
+ try:
23
+ from src.ic.config.manager import ConfigManager
24
+ config_manager = ConfigManager()
25
+ config_manager.load_config()
26
+ secrets = config_manager.load_secrets_config()
27
+ config = config_manager.get_config()
28
+
29
+ if secrets and 'aws' in secrets:
30
+ if 'aws' not in config:
31
+ config['aws'] = {}
32
+ config['aws'].update(secrets['aws'])
33
+ except ImportError:
34
+ try:
35
+ from ic.config.manager import ConfigManager
36
+ config_manager = ConfigManager()
37
+ config_manager.load_config()
38
+ secrets = config_manager.load_secrets_config()
39
+ config = config_manager.get_config()
40
+
41
+ if secrets and 'aws' in secrets:
42
+ if 'aws' not in config:
43
+ config['aws'] = {}
44
+ config['aws'].update(secrets['aws'])
45
+ except ImportError:
46
+ config = {}
47
+
48
+ if config and 'aws' in config and 'tags' in config['aws']:
49
+ aws_tags = config['aws']['tags']
50
+ required_tags = aws_tags.get('required', [])
51
+ optional_tags = aws_tags.get('optional', [])
52
+ else:
53
+ env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
54
+ env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
55
+ required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
56
+ optional_tags = [t.strip() for t in env_optional.split(",") if t.strip()]
57
+
58
+ return required_tags + optional_tags
59
+
60
+ TAG_KEYS = get_tag_keys()
27
61
 
28
62
  @log_decorator
29
63
  def fetch_rds_tags(account_id, profile_name, region):
@@ -15,14 +15,50 @@ except ImportError:
15
15
  from rich.console import Console
16
16
  from rich.table import Table
17
17
 
18
- load_dotenv()
19
18
  console = Console()
20
19
 
21
- env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
22
- env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
23
- required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
24
- optional_tags = [t.strip() for t in env_optional.split(",") if t.strip()]
25
- TAG_KEYS = required_tags + optional_tags
20
+ # 새로운 설정 시스템에서 태그 키 가져오기
21
+ def get_tag_keys():
22
+ """설정에서 태그 키를 가져옵니다."""
23
+ try:
24
+ from src.ic.config.manager import ConfigManager
25
+ config_manager = ConfigManager()
26
+ config_manager.load_config()
27
+ secrets = config_manager.load_secrets_config()
28
+ config = config_manager.get_config()
29
+
30
+ if secrets and 'aws' in secrets:
31
+ if 'aws' not in config:
32
+ config['aws'] = {}
33
+ config['aws'].update(secrets['aws'])
34
+ except ImportError:
35
+ try:
36
+ from ic.config.manager import ConfigManager
37
+ config_manager = ConfigManager()
38
+ config_manager.load_config()
39
+ secrets = config_manager.load_secrets_config()
40
+ config = config_manager.get_config()
41
+
42
+ if secrets and 'aws' in secrets:
43
+ if 'aws' not in config:
44
+ config['aws'] = {}
45
+ config['aws'].update(secrets['aws'])
46
+ except ImportError:
47
+ config = {}
48
+
49
+ if config and 'aws' in config and 'tags' in config['aws']:
50
+ aws_tags = config['aws']['tags']
51
+ required_tags = aws_tags.get('required', [])
52
+ optional_tags = aws_tags.get('optional', [])
53
+ else:
54
+ env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
55
+ env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
56
+ required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
57
+ optional_tags = [t.strip() for t in env_optional.split(",") if t.strip()]
58
+
59
+ return required_tags + optional_tags
60
+
61
+ TAG_KEYS = get_tag_keys()
26
62
 
27
63
  @log_decorator
28
64
  def fetch_s3_tags(account_id, profile_name, region):
@@ -14,41 +14,42 @@ except ImportError:
14
14
  from rich.console import Console
15
15
  from rich.table import Table
16
16
 
17
- # 새로운 설정 시스템 import
18
- try:
19
- from src.ic.config.manager import ConfigManager
20
- config_manager = ConfigManager()
21
- config = config_manager.get_config()
22
- except ImportError:
23
- try:
24
- from ic.config.manager import ConfigManager
25
- config_manager = ConfigManager()
26
- config = config_manager.get_config()
27
- except ImportError:
28
- # Legacy fallback for development
29
- import sys
30
- import os
31
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))
32
- from ic.config.manager import ConfigManager
33
- config_manager = ConfigManager()
34
- config = config_manager.get_config()
35
- except ImportError:
36
- # 호환성을 위한 fallback
37
- from dotenv import load_dotenv
38
- load_dotenv()
39
- config = {}
40
-
41
17
  console = Console()
42
18
 
43
19
  # 새로운 설정 시스템에서 태그 키 가져오기
44
20
  def get_tag_keys():
45
21
  """설정에서 태그 키를 가져옵니다."""
22
+ try:
23
+ from src.ic.config.manager import ConfigManager
24
+ config_manager = ConfigManager()
25
+ config_manager.load_config()
26
+ secrets = config_manager.load_secrets_config()
27
+ config = config_manager.get_config()
28
+
29
+ if secrets and 'aws' in secrets:
30
+ if 'aws' not in config:
31
+ config['aws'] = {}
32
+ config['aws'].update(secrets['aws'])
33
+ except ImportError:
34
+ try:
35
+ from ic.config.manager import ConfigManager
36
+ config_manager = ConfigManager()
37
+ config_manager.load_config()
38
+ secrets = config_manager.load_secrets_config()
39
+ config = config_manager.get_config()
40
+
41
+ if secrets and 'aws' in secrets:
42
+ if 'aws' not in config:
43
+ config['aws'] = {}
44
+ config['aws'].update(secrets['aws'])
45
+ except ImportError:
46
+ config = {}
47
+
46
48
  if config and 'aws' in config and 'tags' in config['aws']:
47
49
  aws_tags = config['aws']['tags']
48
- required_tags = aws_tags.get('required', ['User', 'Team', 'Environment'])
49
- optional_tags = aws_tags.get('optional', ['Service', 'Application'])
50
+ required_tags = aws_tags.get('required', [])
51
+ optional_tags = aws_tags.get('optional', [])
50
52
  else:
51
- # Fallback to environment variables
52
53
  env_required = os.getenv("REQUIRED_TAGS", "User,Team,Environment")
53
54
  env_optional = os.getenv("OPTIONAL_TAGS", "Service,Application")
54
55
  required_tags = [t.strip() for t in env_required.split(",") if t.strip()]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ic-code
3
- Version: 1.2.1
3
+ Version: 1.2.3
4
4
  Summary: Infrastructure CLI tool for managing AWS, Azure, GCP, OCI, NCP, CloudFlare, SSH, and more
5
5
  Home-page: https://github.com/dgr009/ic
6
6
  Author: SangYun Kim
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes