1. Les IA et le code
Les Assistants de codage IA sont des outils logiciels qui utilisent l'intelligence artificielle pour aider les développeurs à écrire du code plus rapidement et plus précisément.
Ils le font en générant du code en fonction des "prompts" ou en suggérant du code pour l'auto-complétion au fur et à mesure que vous écrivez du code en temps réel.
Avantages des assistants de codage IA :
Les assistants de codage IA offrent un certain nombre d'avantages aux développeurs, notamment :
-
Augmentation de la productivité : les assistants de codage IA peuvent aider à écrire du code plus rapidement et plus facilement.
-
Amélioration de la qualité et de la sécurité : Les assistants de codage IA peuvent aider à éviter les erreurs de codage.
-
Apprentissage rapide : Les assistants de codage IA peuvent vous aider à apprendre de nouveaux langages de programmation en fournissant des exemples de code et des explications.
2. Comparaison de d'IA spécialisée dans le code
Pour ce billet de blog, je n'ai pas pris un langage de programmation standard. J'ai pris le langage hcl.
-
Je me suis focalisé uniquement sur Terraform pour voir si les IA orientées code peuvent aider à la génération de code Terraform de bonne qualité et directement utilisable.
-
J'ai testé à la fois des extensions vscode et directement des IA génératives sur internet (bard, bing)
-
J'ai utilisé des assistants permettant d'avoir l'ensemble des fonctionnalités avec des formules gratuites.
-
Je n'ai pas pu utiliser des assistants open source (ex : fauxpilot) car je n'ai pas de GPU à disposition.
-
Je n'ai pas pris des assistants qui ne couvrent que quelques langages de programmation.
Voici la liste des IA testées
Extensions vscode :
- Bito (https://bito.ai/)
- AskCodi (https://www.askcodi.com/)
- Codeium https://codeium.com/
- Cody AI (https://about.sourcegraph.com/cody
- Github Copilot (https://github.com/features/copilot)
Dans le navigateur :
- Bard (https://bard.google.com/)
- Bing (https://www.bing.com/search?q=Bing%20AI&showconv=1&form=MG0AUO)
- Perplexity (https://www.perplexity.ai/)
Prompt utilisé pour la génération de code
Pour notre exemple de code, nous allons utiliser le prompt suivant :
C'est un prompt très simple. 😀
Create a terraform configuration for an aks cluster in north europe location
with private link and AD integration resource prefix must be awh, The azure terraform provider version is 3.80.0
4. Extensions vscode
Liste des fonctionnalités des assistants de codage IA utilisées :
Features | Bito | Codeium | Cody | AskCodi | Github Copilot |
---|---|---|---|---|---|
Completions Code | Oui | Oui | Oui | Oui | Oui |
Chat AI | Oui | Oui | Oui | Oui | Oui |
Traduction Code | Oui | Oui | Oui | Oui | Oui |
Command Line Interface | Oui | Non | Non | Non | Oui |
Correction Code | Oui | Oui | Oui | Non | Oui |
Open Source | Non | Non | Oui | Non | Non |
Comprend votre code local dès le départ | Oui | Oui | Non | Non | Oui |
Navigation code | Oui | Oui | Oui | Non | Oui |
Amélioration code (propositions) | Oui | Non | Oui | Non | Oui |
Résumer les modifications récentes du code | Oui | Non | Oui | Non | Non |
Générer des notes de version | Oui | Non | Non | Non | Non |
Suivi des références | Oui | Oui | Oui | Non | Non |
Generation Documentation | Oui | Oui | Oui | Oui | Oui |
Genère les test unitaires | Oui | Oui | Oui | Oui | Oui |
Modèle d'IA personnalisé | Oui | Fonctionnalité payante (entreprise) | Non | Non | Non |
Accès hors ligne | Non | Fonctionnalité payante (entreprise) | Non | Non | Non |
Auto-hébergement | Non | Fonctionnalité payante (entreprise) | Fonctionnalité payante (entreprise) | Non | Non |
Confidentialité du code | Oui | Oui | Oui | Non | Oui |
4.1. Bito
Contrairement à Copilot, Bito fonctionne comme un chatbot dans VS Code. Il garde les traces des conversations.
4.2. Codeium
Codeium est un assistant de codage alimenté par des modèles et une infrastructure d'IA générative internes. Les modèles d'IA sont entrainés sur plus de 70 langages de programmation.
Il propose la saisie semi-automatique du code, la recherche intelligente (recherche de fichiers et de code dans un dossier de projet à l'aide de prompt en langage naturel) et le chat alimenté par l'IA.
4.3. Cody AI
CodyAI est un outil de pair-programmation IA similaire à GitHub Copilot.
Les principales fonctionnalités de CodyAI sont les suivantes :
Autocomplétion : CodyAI suggère des mots, des phrases et des blocs de code complets en fonction du contexte du fichier que vous modifiez. Vous pouvez accepter ou rejeter les suggestions de CodyAI. Conversion des commentaires de code en code exécutable : CodyAI peut convertir des commentaires de code en code exécutable. Cela peut être utile pour documenter votre code ou pour générer des prototypes rapidement.
La prise en charge de plusieurs langages de programmation : CodyAI prend en charge plus de 100 langages de programmation, y compris Python, JavaScript, Java, C++, Go, Rust, etc. La personnalisation : Vous pouvez personnaliser les suggestions de CodyAI en fonction de vos préférences. L'apprentissage : CodyAI apprend de vos interactions avec lui, ce qui lui permet de fournir des suggestions plus pertinentes au fil du temps. CodyAI est un outil puissant qui peut aider les développeurs à gagner du temps et à améliorer la qualité de leur code. Il est encore en développement, mais il a déjà le potentiel de concurrencer GitHub Copilot.
4.4. AskCodi
AskCodi est une alternative gratuite à GitHub Copilot pour VS Code. Il utilise OpenAI Codex pour effectuer de nombreuses tâches d'un assistant de code AI.
Par exemple, il peut être utilisé pour des suggestions de code, de la documentation logicielle, des explications de code, des tests, etc. Vous pouvez également utiliser sa fonction de chat pour démarrer une conversation avec votre programmeur AI.
AskCodi donne la priorité à la confidentialité du code. Il n’enregistre pas le code que vous lui transmettez ni le code qu’il génère.
4.5. Github Copilot
GitHub Copilot est un outil de pair-programmation IA qui fournit des suggestions d'autocomplétion pendant que vous codez. Il est alimenté par un modèle d'IA générative développé par GitHub, OpenAI et Microsoft.
Les principales fonctionnalités de GitHub Copilot sont les suivantes :
Autocomplétion : GitHub Copilot suggère des mots, des phrases et des blocs de code complets en fonction du contexte du fichier que vous modifiez. Vous pouvez accepter ou rejeter les suggestions de GitHub Copilot. Conversion des commentaires de code en code exécutable : GitHub Copilot peut convertir des commentaires de code en code exécutable. Cela peut être utile pour documenter votre code ou pour générer des prototypes rapidement. Saisie semi-automatique de bloc de code : GitHub Copilot peut vous aider à saisir des morceaux de code répétitifs, tels que des fonctions ou des méthodes. Génération de code : GitHub Copilot peut générer du code complet, à partir d'une simple description en langage naturel.
5. Navigateur
5.1. Bard
Bard est un grand modèle de langage chatbot développé par Google AI, entrainé sur un ensemble de données massif de texte et de code.
5.2. Bing
Bing New AI est une nouvelle expérience de recherche web propulsée par l'intelligence artificielle.
Elle a été lancée par Microsoft en février 2023.
5.3. Perplexity.ai
Perplexity AI est une plateforme d'intelligence artificielle qui permet aux utilisateurs de créer des chatbots, des assistants virtuels et d'autres applications conversationnelles.
5.4. Claude.ai
Claude.ai est un générateur de texte par IA développé par Anthropic, une entreprise spécialisée dans l'intelligence artificielle. Il est capable de générer du texte, en réponse à une requête posée par l'utilisateur.
6. Résultats
6.1. AsckCodi
Code généré par AskCodi :
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "3.80.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "aks" {
name = "awh-aks-rg"
location = "northeurope"
}
resource "azurerm_virtual_network" "aks" {
name = "awh-aks-vnet"
resource_group_name = azurerm_resource_group.aks.name
location = azurerm_resource_group.aks.location
address_space = ["10.0.0.0/16"]
}
resource "azurerm_subnet" "aks" {
name = "aks-subnet"
resource_group_name = azurerm_resource_group.aks.name
virtual_network_name = azurerm_virtual_network.aks.name
address_prefixes = ["10.0.1.0/24"]
}
resource "azurerm_kubernetes_cluster" "aks" {
name = "awh-aks-cluster"
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
dns_prefix = "awh-aks"
private_cluster_enabled = true
private_dns_zone_id = azurerm_private_dns_zone.private_link.id
admin_username = "azureuser"
agent_pool_profile {
name = "default"
count = 1
vm_size = "Standard_D2s_v3"
os_type = "Linux"
os_disk_size_gb = 30
}
service_principal {
client_id = var.client_id
client_secret = var.client_secret
}
network_profile {
network_plugin = "azure"
network_policy = "calico"
}
addon_profile {
azure_active_directory {
enabled = true
managed = true
tenant_id = var.tenant_id
admin_group_object_ids = [var.admin_group_object_id]
user_group_object_ids = [var.user_group_object_id]
cluster_manager_group_object_id = var.cluster_manager_group_object_id
azure_rbac_user_assignment_enabled = true
}
}
}
resource "azurerm_private_link_service" "private_link" {
name = "awh-aks-private-link"
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
ip_configuration {
name = "awh-aks-privatelink-ipconfig"
subnet_id = azurerm_subnet.aks.id
private_ip_address_allocation = "Static"
private_ip_address = "10.0.1.100"
}
visibility {
private_endpoint_network_policies {
enable_private_endpoint_dns_registration = true
enable_private_link_service_network_acl = true
}
}
}
resource "azurerm_private_endpoint" "private_link" {
name = "awh-aks-private-endpoint"
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
subnet_id = azurerm_subnet.aks.id
private_link_service_id = azurerm_private_link_service.private_link.id
private_endpoint_network_policies_ids = [azurerm_private_dns_zone.private_link_policy.id]
private_service_connection {
name = "awh-aks-private-endpoint-connection"
private_connection_resource_id = azurerm_kubernetes_cluster.aks.id
group_ids = []
}
}
resource "azurerm_private_dns_zone" "private_link" {
name = "privatelink.kubernetes"
resource_group_name = azurerm_resource_group.aks.name
resolution_virtual_network_ids = [azurerm_virtual_network.aks.id]
}
resource "azurerm_private_dns_zone_virtual_network_link" "private_link_link" {
name = "privatelink-link"
resource_group_name = azurerm_resource_group.aks.name
private_dns_zone_id = azurerm_private_dns_zone.private_link.id
virtual_network_id = azurerm_virtual_network.aks.id
}
Résultats :
-
Configuration inutilisable
-
Le code généré n'est pas satisfaisant et comporte de nombreuses erreurs, défauts et oublis.
par exemple :
La ressource azurerm_kubernetes_cluster
est incomplète, il manque la partie node_pool.
L'IA s'appuie sur un modèle de code Terraform qui date.
6.2 Bito
Code généré par Bito :
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "3.80.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "aks" {
name = "awh-aks"
location = "northeurope"
}
resource "azurerm_virtual_network" "aks" {
name = "awh-aks-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
}
resource "azurerm_subnet" "aks" {
name = "aks-subnet"
resource_group_name = azurerm_resource_group.aks.name
virtual_network_name = azurerm_virtual_network.aks.name
address_prefixes = ["10.0.1.0/24"]
}
resource "azurerm_kubernetes_cluster" "aks" {
name = "awh-aks-cluster"
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
dns_prefix = "awh-aks"
private_cluster_enabled = true
default_node_pool {
name = "default"
node_count = 1
vm_size = "Standard_D2_v2"
type = "VirtualMachineScaleSets"
enable_auto_scaling = true
min_count = 1
max_count = 3
}
network_profile {
network_plugin = "azure"
network_policy = "azure"
}
addon_profile {
azure_active_directory {
enabled = true
}
}
}
Résultats :
-
Configuration inutilisable
-
Il manque les parties private link et AD. La section `addon_profile n'à rien à faire la.
-
Même chose que pour
AsckCodi
. Les modèles ne sont pas à la page.
Les réponses de l'IA sont les mêmes à chaque fois
6.3 CodeIum
# Configure Azure provider
provider "azurerm" {
features {}
}
# Create a resource group
resource "azurerm_resource_group" "example" {
name = "awh-resource-group"
location = "North Europe"
}
# Create a virtual network
resource "azurerm_virtual_network" "example" {
name = "awh-virtual-network"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
}
# Create a subnet
resource "azurerm_subnet" "example" {
name = "awh-subnet"
resource_group_name = azurerm_resource_group.example.name
virtual_network_name = azurerm_virtual_network.example.name
address_prefixes = ["10.0.1.0/24"]
}
# Create an AKS cluster
resource "azurerm_kubernetes_cluster" "example" {
name = "awh-aks-cluster"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "awhakscluster"
default_node_pool {
name = "default"
node_count = 1
vm_size = "Standard_DS2_v2"
}
service_principal {
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
}
network_profile {
network_plugin = "azure"
network_policy = "calico"
dns_service_ip = "10.0.0.10"
docker_bridge_cidr = "172.17.0.1/16"
service_cidr = "10.0.0.0/16"
}
addon_profile {
azure_active_directory {
enabled = true
managed = true
}
}
private_cluster_enabled = true
private_dns_zone = "privatelink.azure.com"
}
Résultats :
- Configuration inutilisable
- Les arguments
private_dns_zone
etaddon_profile
ne sont pas bons / bien placés
6.4. CodyAI
Code généré par CodyAI :
# Configure Azure provider
provider "azurerm" {
features {}
}
# Create resource group
resource "azurerm_resource_group" "awh" {
name = "awh-rg"
location = "North Europe"
}
# Create AD application
resource "azuread_application" "awh" {
display_name = "awh-app"
}
# Create service principal
resource "azuread_service_principal" "awh" {
application_id = azuread_application.awh.application_id
}
# Generate random password
resource "random_password" "awh" {
length = 16
special = true
}
# Create service principal password
resource "azuread_service_principal_password" "awh" {
service_principal_id = azuread_service_principal.awh.id
value = random_password.awh.result
end_date_relative = "17520h" # 2 years
}
# Create virtual network
resource "azurerm_virtual_network" "awh" {
name = "awh-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.awh.location
resource_group_name = azurerm_resource_group.awh.name
}
# Create subnet
resource "azurerm_subnet" "awh" {
name = "awh-subnet"
resource_group_name = azurerm_resource_group.awh.name
virtual_network_name = azurerm_virtual_network.awh.name
address_prefixes = ["10.0.0.0/24"]
}
# Create AKS cluster
resource "azurerm_kubernetes_cluster" "awh" {
name = "awh-aks"
location = azurerm_resource_group.awh.location
resource_group_name = azurerm_resource_group.awh.name
dns_prefix = "awhaks"
default_node_pool {
name = "default"
node_count = 1
vm_size = "Standard_D2_v2"
vnet_subnet_id = azurerm_subnet.awh.id
}
private_cluster_enabled = true
# Enable AD integration
azure_active_directory_role_based_access_control {
managed = true
admin_group_object_ids = [""]
client_app_id = azuread_application.awh.application_id
server_app_id = azuread_application.awh.application_id
server_app_secret = azuread_service_principal_password.awh.value
}
}
Résultats :
A première vue tout est ok. Aucun Warning dans l'interface de VSCode.
La seule chose à modifier pour que ca marche :
Supprimer value
dans la ressource car le mot de passe est généré dynamiquement.
# Create service principal password
resource "azuread_service_principal_password" "awh" {
service_principal_id = azuread_service_principal.awh.id
value = random_password.awh.result
end_date_relative = "17520h" # 2 years
}
6.5. Github Copilot
Code généré par Github Copilot :
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "aks" {
name = "awh-aks-rg"
location = "northeurope"
}
resource "azurerm_virtual_network" "aks" {
name = "awh-aks-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
}
resource "azurerm_subnet" "aks" {
name = "aks-subnet"
resource_group_name = azurerm_resource_group.aks.name
virtual_network_name = azurerm_virtual_network.aks.name
address_prefixes = ["10.0.1.0/24"]
}
resource "azurerm_kubernetes_cluster" "aks" {
name = "awh-aks-cluster"
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
dns_prefix = "awh-aks-cluster"
private_cluster_enabled = true
network_profile {
network_plugin = "azure"
network_policy = "azure"
}
linux_profile {
admin_username = "azureuser"
}
service_principal {
client_id = var.client_id
client_secret = var.client_secret
}
depends_on = [
azurerm_subnet.aks
]
}
resource "azurerm_kubernetes_service" "aks" {
depends_on = [
azurerm_kubernetes_cluster.aks
]
name = "awh-aks-service"
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
depends_on = [azurerm_kubernetes_cluster.aks]
private_endpoint_connections {
name = "awh-aks-pec"
private_endpoint_id = var.private_endpoint_id
subnet_id = azurerm_subnet.aks.id
}
}
Résultats :
- Configuration inutilisable
- La ressource
azurerm_kubernetes_cluster
est incomplète. Il manque le paramètre default_node_pool.
6.6. Perplexity
Code généré par Perplexity :
provider "azurerm" {
features {}
}
provider "azuread" {}
resource "azuread_application" "aks" {
name = "aks"
}
resource "azuread_service_principal" "aks" {
application_id = azuread_application.aks.application_id
}
resource "azuread_service_principal_password" "aks" {
service_principal_id = azuread_service_principal.aks.id
value = "password"
end_date = "2024-01-01T01:02:03Z"
}
resource "azurerm_kubernetes_cluster" "aks" {
name = "aks"
location = "northeurope"
resource_group_name = "rg"
dns_prefix = "aks"
service_cidr = "10.0.0.0/16"
dns_service_ip = "10.0.0.10"
pod_cidr = "10.244.0.0/16"
linux_profile {
admin_username = "azureuser"
ssh_key {
key_data = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7..."
}
}
service_principal {
client_id = azuread_service_principal.aks.application_id
client_secret = azuread_service_principal_password.aks.value
}
depends_on = [
azuread_service_principal_password.aks
]
}
- Configuration inutilisable
- La ressource
azurerm_kubernetes_cluster
est incomplète. Il manque le paramètre default_node_pool.
6.7. Bard
Code généré par Bard :
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">= 3.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "aks-rg" {
name = "awh-aks-rg"
location = "northcentralus"
}
resource "azurerm_private_dns_zone" "aks-private-dns" {
name = "awh-aks-private-dns"
resource_group_name = azurerm_resource_group.aks-rg.name
}
resource "azurerm_private_dns_virtual_network_link" "aks-private-dns-link" {
name = "awh-aks-private-dns-link"
resource_group_name = azurerm_resource_group.aks-rg.name
private_dns_zone_name = azurerm_private_dns_zone.aks-private-dns.name
subnet_id = azurerm_virtual_network_subnet.aks-vnet-subnet.id
}
resource "azurerm_virtual_network" "aks-vnet" {
name = "awh-aks-vnet"
location = azurerm_resource_group.aks-rg.location
resource_group_name = azurerm_resource_group.aks-rg.name
address_prefixes = ["10.0.0.0/16"]
}
resource "azurerm_subnet" "aks-vnet-subnet" {
name = "awh-aks-vnet-subnet"
virtual_network_name = azurerm_virtual_network.aks-vnet.name
resource_group_name = azurerm_resource_group.aks-rg.name
address_prefix = "10.0.0.0/24"
}
resource "azurerm_kubernetes_cluster" "aks-cluster" {
name = "awh-aks-cluster"
location = azurerm_resource_group.aks-rg.location
resource_group_name = azurerm_resource_group.aks-rg.name
dns_prefix = "awh-aks"
default_node_pool {
name = "awh-aks-node-pool"
node_count = 3
vm_size = "Standard_D2s_v3"
}
private_link_subnet_ids = [azurerm_private_dns_virtual_network_link.aks-private-dns-link.subnet_id]
}
resource "azurerm_ad_service_principal" "aks-service-principal" {
application_id = azurerm_client_application.aks-service-principal.application_id
}
resource "azurerm_kubernetes_cluster_role_binding" "aks-cluster-role-binding" {
cluster_name = azurerm_kubernetes_cluster.aks-cluster.name
role_definition_id = "5b888547-1782-4e28-8552-78266df53e59"
service_principal_object_id = azurerm_ad_service_principal.aks-service-principal.object_id
}
Résultats :
- Configuration inutilisable
- Les ressources
azurerm_virtual_network
etazurerm_subnet
sont incomplètes
6.8. Bing
Code généré par Bing :
# Define the required provider and version
provider "azurerm" {
features {}
}
# Define the resource group
resource "azurerm_resource_group" "awh_rg" {
name = "awh-rg"
location = "northeurope"
}
# Define the virtual network
resource "azurerm_virtual_network" "awh_vnet" {
name = "awh-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.awh_rg.location
resource_group_name = azurerm_resource_group.awh_rg.name
}
# Define the subnet for the aks cluster
resource "azurerm_subnet" "awh_subnet" {
name = "awh-subnet"
resource_group_name = azurerm_resource_group.awh_rg.name
virtual_network_name = azurerm_virtual_network.awh_vnet.name
address_prefixes = ["10.0.1.0/24"]
}
# Define the private endpoint for the aks cluster
resource "azurerm_private_endpoint" "awh_pe" {
name = "awh-pe"
location = azurerm_resource_group.awh_rg.location
resource_group_name = azurerm_resource_group.awh_rg.name
subnet_id = azurerm_subnet.awh_subnet.id
private_service_connection {
name = "awh-psc"
private_connection_resource_id = azurerm_kubernetes_cluster.awh_aks.id
is_manual_connection = false
subresource_names = ["management"]
}
}
# Define the AD service principal for the aks cluster
resource "azuread_service_principal" "awh_sp" {
application_id = azuread_application.awh_app.application_id
}
# Define the AD application for the aks cluster
resource "azuread_application" "awh_app" {
display_name = "awh-app"
}
# Define the AD service principal password for the aks cluster
resource "azuread_service_principal_password" "awh_spp" {
service_principal_id = azuread_service_principal.awh_sp.id
#value = "your-password-here"
end_date_relative = "8760h"
}
# Define the aks cluster
resource "azurerm_kubernetes_cluster" "awh_aks" {
name = "awh-aks"
location = azurerm_resource_group.awh_rg.location
resource_group_name = azurerm_resource_group.awh_rg.name
dns_prefix = "awh-aks"
default_node_pool {
name = "default"
node_count = 1
vm_size = "Standard_D2_v2"
}
identity {
type = "SystemAssigned"
}
service_principal {
client_id = azuread_service_principal.awh_sp.application_id
client_secret = azuread_service_principal_password.awh_spp.value
}
private_cluster_enabled = true
private_dns_zone_id = "System"
}
Résultats :
Tout est ok à première vue.
Pour que ca passe au niveau du plan, comme pour CodyAI, il faut mettre en commentaire value dans la ressource azuread_service_principal_password
6.9. Claude
Code généré par Claude :
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=3.80.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "rg-awh"
location = "northeurope"
}
resource "azurerm_virtual_network" "vnet" {
name = "vnet-awh"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
address_space = ["10.0.0.0/16"]
}
resource "azurerm_subnet" "subnet" {
name = "subnet-awh"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = ["10.0.1.0/24"]
delegation {
name = "delegation"
service_delegation {
name = "Microsoft.ContainerService/managedClusters"
actions = ["Microsoft.Network/virtualNetworks/subnets/join/action", "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action"]
}
}
}
resource "azurerm_private_dns_zone" "dns_zone" {
name = "privatelink.northeurope.azmk8s.io"
resource_group_name = azurerm_resource_group.rg.name
}
resource "azurerm_role_assignment" "role_assignment" {
scope = azurerm_private_dns_zone.dns_zone.id
role_definition_name = "Private DNS Zone Contributor"
principal_id = azurerm_kubernetes_cluster.aks.identity[0].principal_id
}
resource "azurerm_kubernetes_cluster" "aks" {
name = "aks-awh"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
dns_prefix = "aks-awh"
default_node_pool {
name = "default"
node_count = 1
vm_size = "Standard_D2_v2"
}
identity {
type = "SystemAssigned"
}
private_cluster_enabled = true
private_dns_zone_id = azurerm_private_dns_zone.dns_zone.id
network_profile {
network_plugin = "azure"
load_balancer_sku = "Standard"
}
azure_active_directory_role_based_access_control {
managed = true
admin_group_object_ids = ["${azuread_group.aks_admin.id}"]
}
depends_on = [azurerm_role_assignment.role_assignment]
}
resource "azuread_group" "aks_admin" {
display_name = "aks-admins"
security_enabled = true
}
Résultats:
- Code généré de bonne facture
- Corrections a effectuées au niveau du plan : enlever dans la resource "azure_active_directory_role_based_access_control" la dépendance qui génère une circularité avec la resource du cluster aks et changer Standard en standard.
7. Conclusions
Les grands gagnant des tests sont :
- Bing
- CodyAI
- Claude
Les autres assistants sont sur des modèles qui ne sont pas à jour ou des codes non fonctionnels enfin pour terrform.
Je pense que pour des langages "classiques" tous les assistant tirent leur épingles du jeux.
Par contre pour des langages très actifs, souvent sujet à des évolutions rapides, les assistants ne sont pas adaptés.
8. Focus CodyAI
C'est un produit de chez sourcegraph
Encore en Beta
Cody est un assistant de codage basé sur l’IA développé par Sourcegraph.
Il est conçu pour aider les développeurs à écrire, corriger et maintenir leur code plus rapidement et plus efficacement.
Cody utilise des modèles de langage naturel (LLM) pour fournir des réponses précises et contextuelles aux questions techniques et pour compléter automatiquement le code dans n’importe quel langage de programmation, fichier de configuration ou documentation.
Il est également capable de générer des tests unitaires, d’optimiser le code pour les meilleures pratiques et de décrire les améliorations possible du code.
Cody est disponible pour IntelliJ, VS Code, Neovim, Emacs et d’autres éditeurs de code populaires.
8.1. Video pour présenter la création de ressources terraform
8.2. Exemple de "code smell" (améliorations)
Découvrez les derniers articles d'alter way
- kubevpn
- Kubernetes 1.32
- re:Invent 2024 : AWS mise tout sur l'IA pour son Cloud
- OVHcloud Summit 2024 : L’innovation au cœur d’un cloud souverain et performant
- Big Data & AI Paris 2024 : L'IA au cœur de toutes les transformations.
- Un retour vers l'open-source ? Vos outils DevOps préférés et leurs equivalents open-source.