# Couverture Day-2 : instance v1 Contrat : `instance.v1.yml` Opérations découvertes : **74** ## Classification | classe | opérations | |---|---:| | INFO | 26 | | ACTION | 3 | | MANAGE | 10 | | WORKFLOW | 1 | | LIFECYCLE | 19 | | IGNORE | 15 | | UNKNOWN | 0 | ## Couverture | mesure | valeur | |---|---:| | candidates Day-2 | 40 | | AUTO | 39 | | OVERRIDE | 0 | | MANUAL | 1 | | couverture Day-2 | 97,5 % | La couverture rapporte `(AUTO + OVERRIDE)` aux seules opérations Day-2. Les classes LIFECYCLE et IGNORE ne sont pas au dénominateur : elles ne sont pas du travail à automatiser, elles sont du travail écarté, et le tableau ci-dessus les compte à part pour que l'écart reste visible. ## Modules cibles | module | opérations | |---|---| | `instance_dashboard_info` | GetDashboard | | `instance_image` | UpdateImage | | `instance_image_info` | GetImage, ListImages | | `instance_ip` | UpdateIp | | `instance_ip_action` | ReleaseIpToIpam | | `instance_ip_info` | GetIp, ListIps | | `instance_placement_group` | UpdatePlacementGroup | | `instance_placement_group_info` | GetPlacementGroup, ListPlacementGroups | | `instance_placement_group_server_info` | GetPlacementGroupServers | | `instance_security_group` | UpdateSecurityGroup | | `instance_security_group_info` | GetSecurityGroup, ListSecurityGroups | | `instance_security_group_rule` | UpdateSecurityGroupRule | | `instance_security_group_rule_info` | GetSecurityGroupRule, ListSecurityGroupRules | | `instance_security_group_rules` | SetSecurityGroupRules | | `instance_server` | UpdateServer | | `instance_server_action` | ServerAction | | `instance_server_compatible_type_info` | GetServerCompatibleTypes | | `instance_server_info` | GetServer, ListServers | | `instance_server_private_nic` | UpdatePrivateNIC | | `instance_server_private_nic_info` | GetPrivateNIC, ListPrivateNICs | | `instance_server_type_availability_info` | GetServerTypesAvailability | | `instance_server_type_info` | ListServersTypes | | `instance_server_user_data` | SetServerUserData | | `instance_server_user_data_info` | GetServerUserData, ListServerUserData | | `instance_snapshot` | UpdateSnapshot | | `instance_snapshot_action` | ExportSnapshot | | `instance_snapshot_info` | GetSnapshot, ListSnapshots | | `instance_volume` | UpdateVolume | | `instance_volume_info` | GetVolume, ListVolumes | | `instance_volume_type_info` | ListVolumesTypes | ## Opérations | opération | méthode | classe | mode | module | raison | |---|---|---|---|---|---| | `AttachServerFileSystem` | POST | IGNORE | OVERRIDE | - | Relation entre deux ressources, décrite par Terraform et non par Ansible. | | `AttachServerVolume` | POST | IGNORE | OVERRIDE | - | Relation entre deux ressources, décrite par Terraform et non par Ansible. | | `CheckBlockMigrationOrganizationQuotas` | POST | IGNORE | OVERRIDE | - | Pré-contrôle de quotas d'une migration de volumes vers Block Storage. La migration elle-même n'est pas exposée ; son pré-contrôle seul n'a pas d'usage Day-2. | | `CreateImage` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreateIp` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreatePlacementGroup` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreatePrivateNIC` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreateSecurityGroup` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreateSecurityGroupRule` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreateServer` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreateSnapshot` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `CreateVolume` | POST | LIFECYCLE | AUTO | - | création de ressource, périmètre Terraform | | `DeleteImage` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeleteIp` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeletePlacementGroup` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeletePrivateNIC` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeleteSecurityGroup` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeleteSecurityGroupRule` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeleteServer` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeleteServerUserData` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeleteSnapshot` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DeleteVolume` | DELETE | LIFECYCLE | AUTO | - | suppression de ressource, périmètre Terraform | | `DetachServerFileSystem` | POST | IGNORE | OVERRIDE | - | Relation entre deux ressources, décrite par Terraform et non par Ansible. | | `DetachServerVolume` | POST | IGNORE | OVERRIDE | - | Relation entre deux ressources, décrite par Terraform et non par Ansible. | | `ExportSnapshot` | POST | ACTION | AUTO | `instance_snapshot_action` | POST hors création : opération ponctuelle | | `GetDashboard` | GET | INFO | AUTO | `instance_dashboard_info` | verbe de lecture sur GET | | `GetImage` | GET | INFO | AUTO | `instance_image_info` | verbe de lecture sur GET | | `GetIp` | GET | INFO | AUTO | `instance_ip_info` | verbe de lecture sur GET | | `GetPlacementGroup` | GET | INFO | AUTO | `instance_placement_group_info` | verbe de lecture sur GET | | `GetPlacementGroupServers` | GET | INFO | AUTO | `instance_placement_group_server_info` | verbe de lecture sur GET | | `GetPrivateNIC` | GET | INFO | AUTO | `instance_server_private_nic_info` | verbe de lecture sur GET | | `GetSecurityGroup` | GET | INFO | AUTO | `instance_security_group_info` | verbe de lecture sur GET | | `GetSecurityGroupRule` | GET | INFO | AUTO | `instance_security_group_rule_info` | verbe de lecture sur GET | | `GetServer` | GET | INFO | AUTO | `instance_server_info` | verbe de lecture sur GET | | `GetServerCompatibleTypes` | GET | INFO | AUTO | `instance_server_compatible_type_info` | verbe de lecture sur GET | | `GetServerTypesAvailability` | GET | INFO | AUTO | `instance_server_type_availability_info` | verbe de lecture sur GET | | `GetServerUserData` | GET | INFO | AUTO | `instance_server_user_data_info` | verbe de lecture sur GET | | `GetSnapshot` | GET | INFO | AUTO | `instance_snapshot_info` | verbe de lecture sur GET | | `GetVolume` | GET | INFO | AUTO | `instance_volume_info` | verbe de lecture sur GET | | `ListDefaultSecurityGroupRules` | GET | IGNORE | OVERRIDE | - | Cas particulier de ListSecurityGroupRules, joignable par `security_group_id: default` sur la même URL et avec la même réponse, et celle-là est paginée. | | `ListImages` | GET | INFO | AUTO | `instance_image_info` | verbe de lecture sur GET | | `ListIps` | GET | INFO | AUTO | `instance_ip_info` | verbe de lecture sur GET | | `ListPlacementGroups` | GET | INFO | AUTO | `instance_placement_group_info` | verbe de lecture sur GET | | `ListPrivateNICs` | GET | INFO | AUTO | `instance_server_private_nic_info` | verbe de lecture sur GET | | `ListSecurityGroupRules` | GET | INFO | AUTO | `instance_security_group_rule_info` | verbe de lecture sur GET | | `ListSecurityGroups` | GET | INFO | AUTO | `instance_security_group_info` | verbe de lecture sur GET | | `ListServerActions` | GET | IGNORE | OVERRIDE | - | Liste les actions qu'un serveur accepte à l'instant t. Elle est consommée par instance_server_action pour valider une demande, pas exposée comme module d'information. | | `ListServerUserData` | GET | INFO | AUTO | `instance_server_user_data_info` | verbe de lecture sur GET | | `ListServers` | GET | INFO | AUTO | `instance_server_info` | verbe de lecture sur GET | | `ListServersTypes` | GET | INFO | AUTO | `instance_server_type_info` | verbe de lecture sur GET | | `ListSnapshots` | GET | INFO | AUTO | `instance_snapshot_info` | verbe de lecture sur GET | | `ListVolumes` | GET | INFO | AUTO | `instance_volume_info` | verbe de lecture sur GET | | `ListVolumesTypes` | GET | INFO | AUTO | `instance_volume_type_info` | verbe de lecture sur GET | | `ReleaseIpToIpam` | POST | ACTION | AUTO | `instance_ip_action` | POST hors création : opération ponctuelle | | `ServerAction` | POST | ACTION | AUTO | `instance_server_action` | POST hors création : opération ponctuelle | | `SetImage` | PUT | IGNORE | OVERRIDE | - | PUT de remplacement complet ; le module utilise le PATCH UpdateImage. | | `SetPlacementGroup` | PUT | IGNORE | OVERRIDE | - | PUT de remplacement complet ; le module utilise le PATCH UpdatePlacementGroup. | | `SetPlacementGroupServers` | PUT | IGNORE | OVERRIDE | - | PUT de remplacement complet ; le module utilise le PATCH UpdatePlacementGroupServers. | | `SetSecurityGroup` | PUT | IGNORE | OVERRIDE | - | PUT de remplacement complet ; le module utilise le PATCH UpdateSecurityGroup. | | `SetSecurityGroupRule` | PUT | IGNORE | OVERRIDE | - | PUT de remplacement complet ; le module utilise le PATCH UpdateSecurityGroupRule. | | `SetSecurityGroupRules` | PUT | WORKFLOW | MANUAL | `instance_security_group_rules` | Remplace en un appel la totalité des règles d'un groupe. L'idempotence demande de comparer deux listes ordonnées et de décider ce qu'est une règle « identique » : c'est de la logique métier, elle s'écrit à la main. Le module porte un nom au pluriel parce qu'il gère l'ensemble des règles, là où instance_security_group_rule en gère une. | | `SetServerUserData` | PATCH | MANAGE | AUTO | `instance_server_user_data` | écriture d'un état durable | | `SetSnapshot` | PUT | IGNORE | OVERRIDE | - | PUT de remplacement complet ; le module utilise le PATCH UpdateSnapshot. | | `SetVolume` | PUT | IGNORE | OVERRIDE | - | PUT de remplacement complet ; le module utilise le PATCH UpdateVolume. | | `UpdateImage` | PATCH | MANAGE | AUTO | `instance_image` | écriture d'un état durable | | `UpdateIp` | PATCH | MANAGE | AUTO | `instance_ip` | écriture d'un état durable | | `UpdatePlacementGroup` | PATCH | MANAGE | AUTO | `instance_placement_group` | écriture d'un état durable | | `UpdatePlacementGroupServers` | PATCH | IGNORE | OVERRIDE | - | Réécrit la liste des machines d'un groupe de placement. Relier des ressources relève de Terraform, qui déclare cette liste ; un module qui la remplace produirait un écart entre l'état déclaré et l'état réel, invisible jusqu'au prochain `terraform apply`. Même frontière que AttachServerVolume, et même raison que AddBackendServers côté Load Balancer. Le modèle l'écartait déjà, mais pour un symptôme, l'absence de lecture unitaire : c'est la décision qui doit porter l'écart, pas ce qui l'a révélé. | | `UpdatePrivateNIC` | PATCH | MANAGE | AUTO | `instance_server_private_nic` | écriture d'un état durable | | `UpdateSecurityGroup` | PATCH | MANAGE | AUTO | `instance_security_group` | écriture d'un état durable | | `UpdateSecurityGroupRule` | PATCH | MANAGE | AUTO | `instance_security_group_rule` | écriture d'un état durable | | `UpdateServer` | PATCH | MANAGE | AUTO | `instance_server` | écriture d'un état durable | | `UpdateSnapshot` | PATCH | MANAGE | AUTO | `instance_snapshot` | écriture d'un état durable | | `UpdateVolume` | PATCH | MANAGE | AUTO | `instance_volume` | écriture d'un état durable | ## Limites relevées à la lecture du contrat - CreateServer.public_ips : tableau sans `items`, type des éléments inconnu - CreateSnapshot.tags : tableau sans `items`, type des éléments inconnu - SetImage.tags : tableau sans `items`, type des éléments inconnu - SetPlacementGroup.tags : tableau sans `items`, type des éléments inconnu - SetSecurityGroup.tags : tableau sans `items`, type des éléments inconnu - SetServerUserData : corps de requête sans schéma JSON - SetSnapshot.tags : tableau sans `items`, type des éléments inconnu - SetVolume.tags : tableau sans `items`, type des éléments inconnu - UpdateImage.tags : tableau sans `items`, type des éléments inconnu - UpdateIp.tags : tableau sans `items`, type des éléments inconnu - UpdatePlacementGroup.tags : tableau sans `items`, type des éléments inconnu - UpdatePrivateNIC.tags : tableau sans `items`, type des éléments inconnu - UpdateSecurityGroup.tags : tableau sans `items`, type des éléments inconnu - UpdateServer.private_nics : tableau sans `items`, type des éléments inconnu - UpdateServer.public_ips : tableau sans `items`, type des éléments inconnu - UpdateServer.tags : tableau sans `items`, type des éléments inconnu - UpdateSnapshot.tags : tableau sans `items`, type des éléments inconnu - UpdateVolume.tags : tableau sans `items`, type des éléments inconnu