If you ne want to do tout configuration inside le guest, alors le seulement option is a DHCP server that hands out static IP addresses. If you use bridge mode, that will probably be certains external DHCP server. Consult its manual to find out how to serve static leases.
But at least in forward modes nat ou route, you could use libvirt's built-in dnsmasqd (More recent versions of libvirtd support le dnsmasq's "dhcp-hostsfile" option). Here is how:
First, find out le MAC addresses of le VMs you want to assign static IP addresses:
virsh dumpxml $VM_NAME | grep 'mac address'
Then edit le network
virsh net-list
virsh net-edit $NETWORK_NAME # Probably "default"
Find le <dhcp> section, restrict le dynamic range et add host entries for votre VMs
<dhcp>
<range start="192.168.122.100" end="192.168.122.254"/>
<host mac="52:54:00:6c:3c:01" name="vm1" ip="192.168.122.11"/>
<host mac="52:54:00:6c:3c:02" name="vm2" ip="192.168.122.12"/>
<host mac="52:54:00:6c:3c:03" name="vm3" ip="192.168.122.13"/>
</dhcp>
Then, reboot votre VM (or restart its DHCP client, e.g. ifdown eth0; ifup eth0)
Update: Je vois there are reports that le change might pas get into effect après "virsh net-edit". In that case, try this après le edit:
virsh net-destroy $NETWORK_NAME
virsh net-start $NETWORK_NAME
... et redémarrez le VM's DHCP client.
If that encore ne work, you might have to
arrêtez le libvirtd service
kill tout dnsmasq processes that are encore alive
démarrez le libvirtd service
Note: Il y a no way le KVM host could force a VM avec unknown OS et unknown config to use a certain network configuration. But si know know that le VM uses a certain network config protocol - say DHCP - you can can use that. Ceci est what this post assumes.
Some OS (e.g. certains Linux distros) aussi allow to pass network config options into le guest e.g. via le kernel command line. But that is très spécifique to le OS, et i see no advantage over le DHCP method.