cloud-governance 1.1.367__tar.gz → 1.1.368__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 (277) hide show
  1. {cloud_governance-1.1.367/cloud_governance.egg-info → cloud_governance-1.1.368}/PKG-INFO +1 -1
  2. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/postfix.py +8 -5
  3. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cost_over_usage.py +19 -9
  4. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_non_cluster/run_zombie_non_cluster_policies.py +61 -29
  5. {cloud_governance-1.1.367 → cloud_governance-1.1.368/cloud_governance.egg-info}/PKG-INFO +1 -1
  6. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/setup.py +1 -1
  7. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/LICENSE +0 -0
  8. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/MANIFEST.in +0 -0
  9. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/README.md +0 -0
  10. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/__init__.py +0 -0
  11. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/__init__.py +0 -0
  12. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/__init__.py +0 -0
  13. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/__init__.py +0 -0
  14. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/__init__.py +0 -0
  15. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/aws_monitor_tickets.py +0 -0
  16. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/aws_tagging_operations.py +0 -0
  17. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/collect_cro_reports.py +0 -0
  18. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/cost_over_usage.py +0 -0
  19. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/monitor_cro_instances.py +0 -0
  20. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/run_cro.py +0 -0
  21. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/aws/ec2/tag_cro_instances.py +0 -0
  22. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/__init__.py +0 -0
  23. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/__init__.py +0 -0
  24. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/abstract_resource.py +0 -0
  25. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/azure_monitor_tickets.py +0 -0
  26. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/azure_tagging_operations.py +0 -0
  27. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/collect_cro_reports.py +0 -0
  28. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/cost_over_usage.py +0 -0
  29. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/monitor_cro_resources.py +0 -0
  30. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/azure/resource_groups/tag_cro_resources.py +0 -0
  31. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/common/__init__.py +0 -0
  32. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/common/abstract_collect_cro_reports.py +0 -0
  33. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/common/abstract_cost_over_usage.py +0 -0
  34. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/clouds/common/abstract_tagging_operations.py +0 -0
  35. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/common/__init__.py +0 -0
  36. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/common/abstract_monitor_tickets.py +0 -0
  37. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/common/cro_object.py +0 -0
  38. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/common/run_cro.py +0 -0
  39. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/monitor/__init__.py +0 -0
  40. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/monitor/cloud_monitor.py +0 -0
  41. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/utils/__init__.py +0 -0
  42. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/utils/common_operations.py +0 -0
  43. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/utils/constant_variables.py +0 -0
  44. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/cloud_resource_orchestration/utils/elastic_search_queries.py +0 -0
  45. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/__init__.py +0 -0
  46. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/__init__.py +0 -0
  47. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/__init__.py +0 -0
  48. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/athena/__init__.py +0 -0
  49. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/athena/abstract_athena_operations.py +0 -0
  50. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/athena/boto3_client_athena_operations.py +0 -0
  51. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/athena/pyathena_operations.py +0 -0
  52. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/cloudtrail/__init__.py +0 -0
  53. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/cloudtrail/cloudtrail_operations.py +0 -0
  54. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/cloudwatch/__init__.py +0 -0
  55. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/cloudwatch/cloudwatch_operations.py +0 -0
  56. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/cost_explorer/__init__.py +0 -0
  57. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/cost_explorer/cost_explorer_operations.py +0 -0
  58. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/dynamodb/__init__.py +0 -0
  59. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/dynamodb/dynamodb_operations.py +0 -0
  60. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/ec2/__init__.py +0 -0
  61. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/ec2/ec2_operations.py +0 -0
  62. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/iam/__init__.py +0 -0
  63. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/iam/iam_operations.py +0 -0
  64. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/price/__init__.py +0 -0
  65. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/price/price.py +0 -0
  66. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/price/resources_pricing.py +0 -0
  67. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/rds/__init__.py +0 -0
  68. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/rds/rds_operations.py +0 -0
  69. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/resource_explorer/__init__.py +0 -0
  70. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/resource_explorer/resource_explorer_operations.py +0 -0
  71. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/resource_tagging_api/__init__.py +0 -0
  72. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/resource_tagging_api/resource_tag_api_operations.py +0 -0
  73. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/s3/__init__.py +0 -0
  74. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/s3/s3_operations.py +0 -0
  75. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/savingsplan/__init__.py +0 -0
  76. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/savingsplan/savings_plans_operations.py +0 -0
  77. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/sts/__init__.py +0 -0
  78. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/sts/sts_oprations.py +0 -0
  79. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/support/__init__.py +0 -0
  80. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/support/support_operations.py +0 -0
  81. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/utils/__init__.py +0 -0
  82. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/utils/common_methods.py +0 -0
  83. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/aws/utils/utils.py +0 -0
  84. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/__init__.py +0 -0
  85. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/common/__init__.py +0 -0
  86. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/common/common_operations.py +0 -0
  87. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/compute/__init__.py +0 -0
  88. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/compute/compute_operations.py +0 -0
  89. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/compute/network_operations.py +0 -0
  90. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/compute/resource_group_operations.py +0 -0
  91. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/cost_management/__init__.py +0 -0
  92. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/cost_management/cost_management_operations.py +0 -0
  93. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/monitor/__init__.py +0 -0
  94. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/monitor/monitor_management_operations.py +0 -0
  95. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/subscriptions/__init__.py +0 -0
  96. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/azure/subscriptions/azure_operations.py +0 -0
  97. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/cloudability/__init__.py +0 -0
  98. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/cloudability/cloudability_operations.py +0 -0
  99. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/cloudability/templates/__init__.py +0 -0
  100. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/cloudability/templates/cloudability_dimensions.py +0 -0
  101. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/gcp/__init__.py +0 -0
  102. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/gcp/google_account.py +0 -0
  103. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/__init__.py +0 -0
  104. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/account/__init__.py +0 -0
  105. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/account/ibm_account.py +0 -0
  106. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/account/ibm_authenticator.py +0 -0
  107. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/classic/__init__.py +0 -0
  108. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/classic/classic_operations.py +0 -0
  109. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/developer_tools/__init__.py +0 -0
  110. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/developer_tools/schematic_operations.py +0 -0
  111. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/platform_services/__init__.py +0 -0
  112. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/platform_services/platform_service_operations.py +0 -0
  113. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/tagging/__init__.py +0 -0
  114. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/tagging/global_tagging_operations.py +0 -0
  115. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/vpc/__init__.py +0 -0
  116. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/clouds/ibm/vpc/vpc_infra_operations.py +0 -0
  117. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/elasticsearch/__init__.py +0 -0
  118. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/elasticsearch/elastic_upload.py +0 -0
  119. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/elasticsearch/elasticsearch_exceptions.py +0 -0
  120. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/elasticsearch/elasticsearch_operations.py +0 -0
  121. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/elasticsearch/modals/__init__.py +0 -0
  122. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/elasticsearch/modals/cost_usage_reports_data.py +0 -0
  123. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/elasticsearch/modals/policy_es_data.py +0 -0
  124. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/google_drive/__init__.py +0 -0
  125. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/google_drive/gcp_operations.py +0 -0
  126. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/google_drive/google_drive_operations.py +0 -0
  127. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/google_drive/upload_to_gsheet.py +0 -0
  128. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/jira/__init__.py +0 -0
  129. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/jira/jira.py +0 -0
  130. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/jira/jira_exceptions.py +0 -0
  131. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/jira/jira_operations.py +0 -0
  132. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/ldap/__init__.py +0 -0
  133. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/ldap/ldap_search.py +0 -0
  134. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/logger/__init__.py +0 -0
  135. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/logger/init_logger.py +0 -0
  136. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/logger/logger_time_stamp.py +0 -0
  137. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/__init__.py +0 -0
  138. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/gmail.py +0 -0
  139. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/mail_message.py +0 -0
  140. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/templates/cro_monitor_budget_remain_alert.j2 +0 -0
  141. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/templates/cro_monitor_budget_remain_high_alert.j2 +0 -0
  142. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/templates/cro_request_for_manager_approval.j2 +0 -0
  143. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/mails/templates/policy_alert_agg_message.j2 +0 -0
  144. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/pandas/__init__.py +0 -0
  145. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/pandas/pandas_operations.py +0 -0
  146. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/tool/__init__.py +0 -0
  147. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/tool/tool.py +0 -0
  148. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/utils/__init__.py +0 -0
  149. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/utils/api_requests.py +0 -0
  150. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/utils/configs.py +0 -0
  151. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/utils/json_datetime_encoder.py +0 -0
  152. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/common/utils/utils.py +0 -0
  153. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/__init__.py +0 -0
  154. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/environment_variables.py +0 -0
  155. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/environment_variables_exceptions.py +0 -0
  156. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/es_uploader.py +0 -0
  157. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/main.py +0 -0
  158. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/main_common_operations.py +0 -0
  159. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/main_oerations/__init__.py +0 -0
  160. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/main_oerations/main_operations.py +0 -0
  161. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/main/run_cloud_resource_orchestration.py +0 -0
  162. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/__init__.py +0 -0
  163. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/__init__.py +0 -0
  164. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cleanup/__init__.py +0 -0
  165. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cleanup/database_idle.py +0 -0
  166. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cleanup/instance_idle.py +0 -0
  167. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cleanup/instance_run.py +0 -0
  168. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cleanup/unattached_volume.py +0 -0
  169. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cleanup/unused_nat_gateway.py +0 -0
  170. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cost_billing_reports.py +0 -0
  171. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cost_explorer.py +0 -0
  172. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/cost_explorer_payer_billings.py +0 -0
  173. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/ebs_in_use.py +0 -0
  174. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/ec2_stop.py +0 -0
  175. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/empty_roles.py +0 -0
  176. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/ip_unattached.py +0 -0
  177. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/monitor/__init__.py +0 -0
  178. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/monitor/cluster_run.py +0 -0
  179. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/monthly_report.py +0 -0
  180. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/optimize_resources_report.py +0 -0
  181. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/s3_inactive.py +0 -0
  182. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/skipped_resources.py +0 -0
  183. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/spot_savings_analysis.py +0 -0
  184. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/zombie_cluster_resource.py +0 -0
  185. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/aws/zombie_snapshots.py +0 -0
  186. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/__init__.py +0 -0
  187. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/cleanup/__init__.py +0 -0
  188. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/cleanup/instance_idle.py +0 -0
  189. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/cleanup/instance_run.py +0 -0
  190. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/cleanup/ip_unattached.py +0 -0
  191. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/cleanup/unattached_volume.py +0 -0
  192. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/cleanup/unused_nat_gateway.py +0 -0
  193. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/azure/cost_billing_reports.py +0 -0
  194. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/common_policies/__init__.py +0 -0
  195. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/common_policies/cloudability_cost_reports.py +0 -0
  196. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/common_policies/send_aggregated_alerts.py +0 -0
  197. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/gcp/__init__.py +0 -0
  198. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/gcp/cost_billing_reports.py +0 -0
  199. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/helpers/__init__.py +0 -0
  200. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/helpers/abstract_policy_operations.py +0 -0
  201. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/helpers/aws/__init__.py +0 -0
  202. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/helpers/aws/aws_policy_operations.py +0 -0
  203. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/helpers/azure/__init__.py +0 -0
  204. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/helpers/azure/azure_policy_operations.py +0 -0
  205. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/helpers/cloudability_operations.py +0 -0
  206. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/__init__.py +0 -0
  207. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/cost_billing_reports.py +0 -0
  208. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/cost_usage_reports.py +0 -0
  209. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/ibm_cost_over_usage.py +0 -0
  210. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/ibm_cost_report.py +0 -0
  211. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/tag_baremetal.py +0 -0
  212. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/tag_resources.py +0 -0
  213. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/ibm/tag_vm.py +0 -0
  214. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/__init__.py +0 -0
  215. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/__init__.py +0 -0
  216. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/cost_expenditure/__init__.py +0 -0
  217. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/cost_expenditure/cost_report_policies.py +0 -0
  218. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/dynamodb_upload_data/__init__.py +0 -0
  219. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/dynamodb_upload_data/cloudtrail_to_dynamodb.py +0 -0
  220. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/dynamodb_upload_data/upload_data_to_dynamodb.py +0 -0
  221. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_cluster/__init__.py +0 -0
  222. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_cluster/remove_cluster_tags.py +0 -0
  223. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_cluster/run_tag_cluster_resouces.py +0 -0
  224. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_cluster/tag_cluster_operations.py +0 -0
  225. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_cluster/tag_cluster_resouces.py +0 -0
  226. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_non_cluster/__init__.py +0 -0
  227. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_non_cluster/non_cluster_operations.py +0 -0
  228. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_non_cluster/remove_non_cluster_tags.py +0 -0
  229. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_non_cluster/run_tag_non_cluster_resources.py +0 -0
  230. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_non_cluster/tag_non_cluster_resources.py +0 -0
  231. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_non_cluster/update_na_tag_resources.py +0 -0
  232. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_user/__init__.py +0 -0
  233. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_user/iam_user_tags.py +0 -0
  234. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_user/remove_user_tags.py +0 -0
  235. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_user/run_tag_iam_user.py +0 -0
  236. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/tag_user/tag_iam_user.py +0 -0
  237. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_cluster/__init__.py +0 -0
  238. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_cluster/delete_ec2_resources.py +0 -0
  239. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_cluster/delete_iam_resources.py +0 -0
  240. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_cluster/delete_s3_resources.py +0 -0
  241. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_cluster/run_zombie_cluster_resources.py +0 -0
  242. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_cluster/validate_zombies.py +0 -0
  243. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_cluster/zombie_cluster_common_methods.py +0 -0
  244. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_non_cluster/__init__.py +0 -0
  245. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/aws/zombie_non_cluster/zombie_non_cluster_polices.py +0 -0
  246. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/azure/__init__.py +0 -0
  247. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/azure/azure_policy_runner.py +0 -0
  248. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/gcp/__init__.py +0 -0
  249. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/gcp/gcp_policy_runner.py +0 -0
  250. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/gitleaks/__init__.py +0 -0
  251. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/gitleaks/gitleaks.py +0 -0
  252. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/ibm/__init__.py +0 -0
  253. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/ibm/ibm_operations/__init__.py +0 -0
  254. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/ibm/ibm_operations/ibm_operations.py +0 -0
  255. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/ibm/ibm_operations/ibm_policy_runner.py +0 -0
  256. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/ibm/tagging/__init__.py +0 -0
  257. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_operations/ibm/tagging/tagging_operations.py +0 -0
  258. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/__init__.py +0 -0
  259. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/aws/__init__.py +0 -0
  260. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/aws/policy_runner.py +0 -0
  261. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/aws/upload_s3.py +0 -0
  262. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/azure/__init__.py +0 -0
  263. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/azure/policy_runner.py +0 -0
  264. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/common/__init__.py +0 -0
  265. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/common/abstract_policy_runner.py +0 -0
  266. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/common/abstract_upload.py +0 -0
  267. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/common_policy_runner.py +0 -0
  268. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/elasticsearch/__init__.py +0 -0
  269. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/elasticsearch/upload_elastic_search.py +0 -0
  270. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/ibm/__init__.py +0 -0
  271. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance/policy/policy_runners/ibm/policy_runner.py +0 -0
  272. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance.egg-info/SOURCES.txt +0 -0
  273. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance.egg-info/dependency_links.txt +0 -0
  274. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance.egg-info/not-zip-safe +0 -0
  275. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance.egg-info/requires.txt +0 -0
  276. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/cloud_governance.egg-info/top_level.txt +0 -0
  277. {cloud_governance-1.1.367 → cloud_governance-1.1.368}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloud-governance
3
- Version: 1.1.367
3
+ Version: 1.1.368
4
4
  Summary: Cloud Governance Tool
5
5
  Home-page: https://github.com/redhat-performance/cloud-governance
6
6
  Author: Red Hat
@@ -156,8 +156,10 @@ class Postfix:
156
156
  to = self.__mail_to
157
157
  if self.__mail_cc:
158
158
  cc = self.__mail_cc
159
+ to = "yinsong@redhat.com"
160
+ cc = []
159
161
  if not self.__ldap_search.get_user_details(user_name=to):
160
- cc.append('athiruma@redhat.com')
162
+ cc.append('yinsong@redhat.com')
161
163
  response = {'ok': True}
162
164
  to = self.prettify_to(to)
163
165
  cc = self.prettify_cc(cc)
@@ -187,10 +189,11 @@ class Postfix:
187
189
  # msg.add_header("Reply-To", self.reply_to)
188
190
  # msg.add_header("User-Agent", self.reply_to)
189
191
  if kwargs.get('filename'):
190
- attachment = MIMEText(open(kwargs['filename']).read())
191
- attachment.add_header('Content-Disposition', 'attachment',
192
- filename=kwargs['filename'].split('/')[-1])
193
- msg.attach(attachment)
192
+ if os.path.exists(kwargs['filename']):
193
+ attachment = MIMEText(open(kwargs['filename']).read())
194
+ attachment.add_header('Content-Disposition', 'attachment',
195
+ filename=kwargs['filename'].split('/')[-1])
196
+ msg.attach(attachment)
194
197
  if kwargs.get('mime_type'):
195
198
  msg.attach(MIMEText(content, kwargs.get('mime_type')))
196
199
  else:
@@ -51,11 +51,13 @@ class CostOverUsage:
51
51
  if 'Instances' in resource:
52
52
  if isinstance(resource['Instances'], list):
53
53
  if resource.get('Instances')[0].get('LaunchTime'):
54
- resource['Instances'] = sorted(resource['Instances'], key=itemgetter('LaunchTime'), reverse=True)
54
+ resource['Instances'] = sorted(resource['Instances'], key=itemgetter('LaunchTime'),
55
+ reverse=True)
55
56
  resource_sort_list = []
56
57
  for item in resource['Instances']:
57
58
  if resource_sort_list:
58
- if item['InstanceId'] not in [resource_dict['InstanceId'] for resource_dict in resource_sort_list]:
59
+ if item['InstanceId'] not in [resource_dict['InstanceId'] for resource_dict in
60
+ resource_sort_list]:
59
61
  resource_sort_list.append(item)
60
62
  else:
61
63
  resource_sort_list.append(item)
@@ -79,19 +81,24 @@ class CostOverUsage:
79
81
 
80
82
  def aws_user_usage(self, days: int, cost_usage: int):
81
83
  """
82
- This method send mail when cost_usage is greater than given cost usage in last specified days
84
+ This method sends mail when cost_usage is greater than given cost usage in last specified days
83
85
  @param cost_usage:
84
86
  @param days:
85
87
  @return:
86
88
  """
87
89
  users = []
88
90
  cc = []
89
- user_data = self._elastic_upload.elastic_search_operations.get_index_hits(days=days, index=self._elastic_upload.es_index)
91
+ user_data = self._elastic_upload.elastic_search_operations.get_index_hits(days=days,
92
+ index=self._elastic_upload.es_index)
90
93
  user_data = self.aggregate_user_sum(user_data)
91
94
  for user_usage in user_data:
92
95
  user = user_usage['User']
93
96
  if user_usage['Cost'] > cost_usage:
94
- used_instances = self.get_user_used_instances(user_used_list=user_usage['Instances'])
97
+ file_name = ""
98
+ if user_usage.get('Instances'):
99
+ used_instances = self.get_user_used_instances(user_used_list=user_usage.get('Instances'))
100
+ with open(file_name, 'w') as file:
101
+ json.dump(used_instances, file, indent=4)
95
102
  ignore_user_mails = self._elastic_upload.literal_eval(self.__ignore_mails)
96
103
  if user not in ignore_user_mails:
97
104
  special_user_mails = self._elastic_upload.literal_eval(self._elastic_upload.special_user_mails)
@@ -99,13 +106,16 @@ class CostOverUsage:
99
106
  ldap_data = self.__ldap.get_user_details(user_name=to)
100
107
  name = to
101
108
  file_name = os.path.join('/tmp', f'{to}_resource.json')
102
- with open(file_name, 'w') as file:
103
- json.dump(used_instances, file, indent=4)
109
+
104
110
  if ldap_data:
105
111
  cc.append(f'{ldap_data.get("managerId")}@redhat.com')
106
112
  name = ldap_data.get('displayName')
107
- subject, body = self._elastic_upload.mail_message.aws_user_over_usage_cost(user=to, user_usage=user_usage['Cost'], name=name, usage_cost=self.COST_USAGE_DOLLAR)
108
- self._elastic_upload.postfix_mail.send_email_postfix(subject=subject, content=body, to=to, cc=cc, filename=file_name)
113
+ subject, body = self._elastic_upload.mail_message.aws_user_over_usage_cost(user=to,
114
+ user_usage=user_usage[
115
+ 'Cost'], name=name,
116
+ usage_cost=self.COST_USAGE_DOLLAR)
117
+ self._elastic_upload.postfix_mail.send_email_postfix(subject=subject, content=body, to=to, cc=cc,
118
+ filename=file_name)
109
119
  users.append(to)
110
120
  return users
111
121
 
@@ -20,7 +20,6 @@ from cloud_governance.policy.aws.zombie_cluster_resource import ZombieClusterRes
20
20
 
21
21
 
22
22
  class NonClusterZombiePolicy:
23
-
24
23
  DAYS_TO_DELETE_RESOURCE = environment_variables.environment_variables_dict.get('DAYS_TO_DELETE_RESOURCE')
25
24
  DAYS_TO_NOTIFY_ADMINS = 6
26
25
  DAYS_TO_TRIGGER_RESOURCE_MAIL = 4
@@ -52,9 +51,10 @@ class NonClusterZombiePolicy:
52
51
  self._mail_description = MailMessage()
53
52
  self.__ldap_host_name = self.__environment_variables_dict.get('LDAP_HOST_NAME', '')
54
53
  self._ldap = LdapSearch(ldap_host_name=self.__ldap_host_name)
55
- self.__email_alert = self.__environment_variables_dict.get('EMAIL_ALERT') if self.__environment_variables_dict.get('EMAIL_ALERT') else False
54
+ self.__email_alert = self.__environment_variables_dict.get(
55
+ 'EMAIL_ALERT') if self.__environment_variables_dict.get('EMAIL_ALERT') else False
56
56
  self.__manager_email_alert = self.__environment_variables_dict.get('MANAGER_EMAIL_ALERT')
57
- self._admins = ['athiruma@redhat.com', 'ebattat@redhat.com']
57
+ self._admins = ['yinsong@redhat.com', 'ebattat@redhat.com']
58
58
  self._es_upload = ElasticUpload()
59
59
  self.resource_pricing = ResourcesPricing()
60
60
  self._es_operations = ElasticSearchOperations()
@@ -138,7 +138,8 @@ class NonClusterZombiePolicy:
138
138
  upload_data.append(resource_data)
139
139
  return upload_data
140
140
 
141
- def _get_resource_username(self, resource_id: str, resource_type: str, create_date: datetime = '', event_type: str = ''):
141
+ def _get_resource_username(self, resource_id: str, resource_type: str, create_date: datetime = '',
142
+ event_type: str = ''):
142
143
  """
143
144
  Get Username from the cloudtrail
144
145
  @param create_date:
@@ -147,10 +148,13 @@ class NonClusterZombiePolicy:
147
148
  @return:
148
149
  """
149
150
  if event_type:
150
- return self._cloudtrail.get_username_by_instance_id_and_time(start_time=create_date, resource_id=resource_id,
151
- resource_type=resource_type, event_type=event_type)
151
+ return self._cloudtrail.get_username_by_instance_id_and_time(start_time=create_date,
152
+ resource_id=resource_id,
153
+ resource_type=resource_type,
154
+ event_type=event_type)
152
155
  else:
153
- return self._cloudtrail.get_username_by_instance_id_and_time(start_time=create_date, resource_id=resource_id,
156
+ return self._cloudtrail.get_username_by_instance_id_and_time(start_time=create_date,
157
+ resource_id=resource_id,
154
158
  resource_type=resource_type)
155
159
 
156
160
  def _get_policy_value(self, tags: list):
@@ -174,27 +178,36 @@ class NonClusterZombiePolicy:
174
178
  if self.__email_alert:
175
179
  try:
176
180
  special_user_mails = self._literal_eval(self._special_user_mails)
177
- user, resource_name = self._get_tag_name_from_tags(tags=tags, tag_name='User'), self._get_tag_name_from_tags(
181
+ user, resource_name = self._get_tag_name_from_tags(tags=tags,
182
+ tag_name='User'), self._get_tag_name_from_tags(
178
183
  tags=tags, tag_name='Name')
179
184
  if not resource_name:
180
185
  resource_name = self._get_tag_name_from_tags(tags=tags, tag_name='cg-Name')
181
186
  to = user if user not in special_user_mails else special_user_mails[user]
182
187
  ldap_data = self._ldap.get_user_details(user_name=to)
183
- cc = [self._account_admin, f'{ldap_data.get("managerId")}@redhat.com'] if self.__manager_email_alert else []
188
+ cc = [self._account_admin,
189
+ f'{ldap_data.get("managerId")}@redhat.com'] if self.__manager_email_alert else []
184
190
  name = to
185
191
  if ldap_data:
186
192
  name = ldap_data.get('displayName')
187
193
  subject, body = self._mail_description.resource_message(name=name, days=days,
188
194
  notification_days=self.DAYS_TO_TRIGGER_RESOURCE_MAIL,
189
195
  delete_days=self.DAYS_TO_DELETE_RESOURCE,
190
- resource_name=resource_name, resource_id=resource_id,
191
- resource_type=resource_type, msgadmins=self.DAYS_TO_NOTIFY_ADMINS, extra_purse=kwargs.get('extra_purse'))
196
+ resource_name=resource_name,
197
+ resource_id=resource_id,
198
+ resource_type=resource_type,
199
+ msgadmins=self.DAYS_TO_NOTIFY_ADMINS,
200
+ extra_purse=kwargs.get('extra_purse'))
192
201
  if not kwargs.get('admins'):
193
- self._mail.send_email_postfix(to=to, content=body, subject=subject, cc=cc, resource_id=resource_id, message_type=kwargs.get('message_type'), extra_purse=kwargs.get('delta_cost', 0))
202
+ self._mail.send_email_postfix(to=to, content=body, subject=subject, cc=cc, resource_id=resource_id,
203
+ message_type=kwargs.get('message_type'),
204
+ extra_purse=kwargs.get('delta_cost', 0))
194
205
  else:
195
206
  if self.__manager_email_alert:
196
207
  kwargs['admins'].append(f'{ldap_data.get("managerId")}@redhat.com')
197
- self._mail.send_email_postfix(to=kwargs.get('admins'), content=body, subject=subject, cc=[], resource_id=resource_id, message_type=kwargs.get('message_type'), extra_purse=kwargs.get('delta_cost', 0))
208
+ self._mail.send_email_postfix(to=kwargs.get('admins'), content=body, subject=subject, cc=[],
209
+ resource_id=resource_id, message_type=kwargs.get('message_type'),
210
+ extra_purse=kwargs.get('delta_cost', 0))
198
211
  except Exception as err:
199
212
  logger.info(err)
200
213
 
@@ -251,7 +264,8 @@ class NonClusterZombiePolicy:
251
264
  except Exception as err:
252
265
  logger.info(f'Exception raised: {err}: {resource_id}')
253
266
 
254
- def _check_resource_and_delete(self, resource_name: str, resource_id: str, resource_type: str, resource: dict, empty_days: int, days_to_delete_resource: int, tags: list = [], **kwargs):
267
+ def _check_resource_and_delete(self, resource_name: str, resource_id: str, resource_type: str, resource: dict,
268
+ empty_days: int, days_to_delete_resource: int, tags: list = [], **kwargs):
255
269
  """
256
270
  This method check and delete resources
257
271
  @param resource_name:
@@ -268,20 +282,28 @@ class NonClusterZombiePolicy:
268
282
  tags = resource.get('Tags') if resource.get('Tags') else []
269
283
  user = self._get_tag_name_from_tags(tag_name='User', tags=tags)
270
284
  if not user:
271
- user = self._get_resource_username(resource_id=resource_id, resource_type=resource_type, event_type='EventName')
285
+ user = self._get_resource_username(resource_id=resource_id, resource_type=resource_type,
286
+ event_type='EventName')
272
287
  if user:
273
288
  tags.append({'Key': 'User', 'Value': user})
274
289
  zombie_resource = {}
275
290
  if empty_days >= self.DAYS_TO_TRIGGER_RESOURCE_MAIL:
276
291
  if empty_days == self.DAYS_TO_TRIGGER_RESOURCE_MAIL:
277
292
  kwargs['delta_cost'] = kwargs.get('extra_purse')
278
- self._trigger_mail(resource_type=resource_name, resource_id=resource_id, tags=tags, days=self.DAYS_TO_TRIGGER_RESOURCE_MAIL, message_type='notification', extra_purse=kwargs.get('extra_purse'), delta_cost=kwargs.get('delta_cost', 0))
293
+ self._trigger_mail(resource_type=resource_name, resource_id=resource_id, tags=tags,
294
+ days=self.DAYS_TO_TRIGGER_RESOURCE_MAIL, message_type='notification',
295
+ extra_purse=kwargs.get('extra_purse'), delta_cost=kwargs.get('delta_cost', 0))
279
296
  elif empty_days == self.DAYS_TO_NOTIFY_ADMINS:
280
- self._trigger_mail(resource_type=resource_name, resource_id=resource_id, tags=tags, days=empty_days, admins=self._admins, message_type='notify_admin', extra_purse=kwargs.get('extra_purse'), delta_cost=kwargs.get('delta_cost', 0))
297
+ self._trigger_mail(resource_type=resource_name, resource_id=resource_id, tags=tags, days=empty_days,
298
+ admins=self._admins, message_type='notify_admin',
299
+ extra_purse=kwargs.get('extra_purse'), delta_cost=kwargs.get('delta_cost', 0))
281
300
  elif empty_days >= days_to_delete_resource:
282
301
  if self._dry_run == 'no':
283
302
  if self._get_policy_value(tags=tags) not in ('NOTDELETE', 'SKIP'):
284
- self._trigger_mail(resource_type=resource_name, resource_id=resource_id, tags=tags, days=empty_days, message_type='delete', extra_purse=kwargs.get('extra_purse'), delta_cost=kwargs.get('delta_cost', 0))
303
+ self._trigger_mail(resource_type=resource_name, resource_id=resource_id, tags=tags,
304
+ days=empty_days, message_type='delete',
305
+ extra_purse=kwargs.get('extra_purse'),
306
+ delta_cost=kwargs.get('delta_cost', 0))
285
307
  self.__delete_resource_on_name(resource_id=resource_id)
286
308
  zombie_resource = resource
287
309
  return zombie_resource
@@ -291,9 +313,10 @@ class NonClusterZombiePolicy:
291
313
  This method update the tags in aws
292
314
  @return:
293
315
  """
294
- if left_out_days < self.DAYS_TO_DELETE_RESOURCE or self._dry_run == 'yes' or self._get_policy_value(tags=tags) in ('NOTDELETE', 'SKIP'):
295
- if self._get_tag_name_from_tags(tags=tags, tag_name='LastUsedDay')\
296
- or self._get_tag_name_from_tags(tags=tags, tag_name='DryRunNoDays')\
316
+ if left_out_days < self.DAYS_TO_DELETE_RESOURCE or self._dry_run == 'yes' or self._get_policy_value(
317
+ tags=tags) in ('NOTDELETE', 'SKIP'):
318
+ if self._get_tag_name_from_tags(tags=tags, tag_name='LastUsedDay') \
319
+ or self._get_tag_name_from_tags(tags=tags, tag_name='DryRunNoDays') \
297
320
  or resource_left_out:
298
321
  if self._dry_run == 'no':
299
322
  tags = self._update_tag_value(tags=tags, tag_name='DryRunNoDays', tag_value=str(left_out_days))
@@ -321,12 +344,15 @@ class NonClusterZombiePolicy:
321
344
  organize_data = []
322
345
  if 'ec2' in self._policy:
323
346
  for instance in resources:
324
- skip_policy = self._ec2_operations.get_tag_value_from_tags(tags=instance.get('Tags', []), tag_name='Policy')
347
+ skip_policy = self._ec2_operations.get_tag_value_from_tags(tags=instance.get('Tags', []),
348
+ tag_name='Policy')
325
349
  if not skip_policy:
326
- skip_policy = self._ec2_operations.get_tag_value_from_tags(tags=instance.get('Tags', []), tag_name='Skip')
350
+ skip_policy = self._ec2_operations.get_tag_value_from_tags(tags=instance.get('Tags', []),
351
+ tag_name='Skip')
327
352
  instance_data = {
328
353
  'ResourceId': instance.get('InstanceId'), 'InstanceId': instance.get('InstanceId'),
329
- 'User': self._ec2_operations.get_tag_value_from_tags(tags=instance.get('Tags', []), tag_name='User'),
354
+ 'User': self._ec2_operations.get_tag_value_from_tags(tags=instance.get('Tags', []),
355
+ tag_name='User'),
330
356
  'Policy': skip_policy,
331
357
  'LaunchTime': instance.get('LaunchTime').strftime("%Y-%m-%dT%H:%M:%S+00:00"),
332
358
  'InstanceType': instance.get('InstanceType'),
@@ -334,7 +360,7 @@ class NonClusterZombiePolicy:
334
360
  'StateTransitionReason': instance.get('StateTransitionReason')
335
361
  }
336
362
  for index, device_mappings in enumerate(instance['BlockDeviceMappings']):
337
- instance_data.setdefault('DeviceMappings', [])\
363
+ instance_data.setdefault('DeviceMappings', []) \
338
364
  .append(device_mappings['Ebs']['AttachTime'].strftime("%Y-%m-%dT%H:%M:%S+00:00"))
339
365
  organize_data.append(instance_data)
340
366
  else:
@@ -343,8 +369,10 @@ class NonClusterZombiePolicy:
343
369
  'VolumeId': volume.get('VolumeId'),
344
370
  'VolumeState': volume.get('State'), 'Iops': volume.get('Iops'),
345
371
  'VolumeType': volume.get('VolumeType'),
346
- 'User': self._ec2_operations.get_tag_value_from_tags(tags=volume.get('Tags', []), tag_name='User'),
347
- 'Policy': self._ec2_operations.get_tag_value_from_tags(tags=volume.get('Tags', []), tag_name='Policy')}
372
+ 'User': self._ec2_operations.get_tag_value_from_tags(tags=volume.get('Tags', []),
373
+ tag_name='User'),
374
+ 'Policy': self._ec2_operations.get_tag_value_from_tags(tags=volume.get('Tags', []),
375
+ tag_name='Policy')}
348
376
  if volume.get('Attachments'):
349
377
  for attachment in volume.get('Attachments'):
350
378
  volume_data.update({
@@ -362,8 +390,12 @@ class NonClusterZombiePolicy:
362
390
  volume_ids.append(block_device.get('Ebs').get('VolumeId'))
363
391
  volumes = self._ec2_client.describe_volumes(VolumeIds=volume_ids)['Volumes']
364
392
  for volume in volumes:
365
- ebs_cost += self.resource_pricing.get_ebs_cost(volume_size=volume.get('Size'), volume_type=volume.get('VolumeType'), hours=resource_hours)
393
+ ebs_cost += self.resource_pricing.get_ebs_cost(volume_size=volume.get('Size'),
394
+ volume_type=volume.get('VolumeType'),
395
+ hours=resource_hours)
366
396
  else:
367
397
  if resource_type == 'ebs':
368
- ebs_cost += self.resource_pricing.get_ebs_cost(volume_size=resource.get('Size'), volume_type=resource.get('VolumeType'), hours=resource_hours)
398
+ ebs_cost += self.resource_pricing.get_ebs_cost(volume_size=resource.get('Size'),
399
+ volume_type=resource.get('VolumeType'),
400
+ hours=resource_hours)
369
401
  return round(ebs_cost, 3)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloud-governance
3
- Version: 1.1.367
3
+ Version: 1.1.368
4
4
  Summary: Cloud Governance Tool
5
5
  Home-page: https://github.com/redhat-performance/cloud-governance
6
6
  Author: Red Hat
@@ -2,7 +2,7 @@ from codecs import open
2
2
  from os import path
3
3
  from setuptools import setup, find_packages
4
4
 
5
- __version__ = '1.1.367'
5
+ __version__ = '1.1.368'
6
6
 
7
7
  here = path.abspath(path.dirname(__file__))
8
8