Blame examples/python/gi/update-ip4-method.py

Packit Service b23acc
#!/usr/bin/env python
Packit Service b23acc
# SPDX-License-Identifier: GPL-2.0+
Packit Service b23acc
#
Packit Service b23acc
# Copyright (C) 2014 Red Hat, Inc.
Packit Service b23acc
#
Packit Service b23acc
Packit Service b23acc
#
Packit Service b23acc
# This example updates a connection's IPv4 method with the Update() method
Packit Service b23acc
# using the libnm GObject-based convenience APIs.
Packit Service b23acc
#
Packit Service b23acc
# Configuration settings are described at
Packit Service b23acc
# https://developer.gnome.org/NetworkManager/1.0/ref-settings.html
Packit Service b23acc
#
Packit Service b23acc
Packit Service b23acc
import gi
Packit Service b23acc
Packit Service b23acc
gi.require_version("NM", "1.0")
Packit Service b23acc
from gi.repository import GLib, NM
Packit Service b23acc
import sys, socket
Packit Service b23acc
Packit Service b23acc
if __name__ == "__main__":
Packit Service b23acc
    # parse and validate arguments
Packit Service b23acc
    if len(sys.argv) < 3:
Packit Service b23acc
        print("Usage: %s <uuid> <auto|static> [address prefix gateway]" % sys.argv[0])
Packit Service b23acc
        sys.exit(1)
Packit Service b23acc
Packit Service b23acc
    method = sys.argv[2]
Packit Service b23acc
    if (method == "static" or method == "manual") and len(sys.argv) < 5:
Packit Service b23acc
        print(
Packit Service b23acc
            "Usage: %s %s static address prefix [gateway]" % (sys.argv[0], sys.argv[1])
Packit Service b23acc
        )
Packit Service b23acc
        sys.exit(1)
Packit Service b23acc
Packit Service b23acc
    uuid = sys.argv[1]
Packit Service b23acc
Packit Service b23acc
    # Convert method to NM method
Packit Service b23acc
    if method == "static":
Packit Service b23acc
        method = "manual"
Packit Service b23acc
Packit Service b23acc
    main_loop = GLib.MainLoop()
Packit Service b23acc
Packit Service b23acc
    # create Client object
Packit Service b23acc
    client = NM.Client.new(None)
Packit Service b23acc
Packit Service b23acc
    all_connections = client.get_connections()
Packit Service b23acc
    for c in all_connections:
Packit Service b23acc
        if c.get_uuid() != uuid:
Packit Service b23acc
            continue
Packit Service b23acc
Packit Service b23acc
        # add IPv4 setting if it doesn't yet exist
Packit Service b23acc
        s_ip4 = c.get_setting_ip4_config()
Packit Service b23acc
        if not s_ip4:
Packit Service b23acc
            s_ip4 = NM.SettingIP4Config.new()
Packit Service b23acc
            c.add_setting(s_ip4)
Packit Service b23acc
Packit Service b23acc
        # set the method and change properties
Packit Service b23acc
        s_ip4.set_property(NM.SETTING_IP_CONFIG_METHOD, method)
Packit Service b23acc
        if method == "auto":
Packit Service b23acc
            # remove addresses and gateway
Packit Service b23acc
            s_ip4.clear_addresses()
Packit Service b23acc
            s_ip4.props.gateway = None
Packit Service b23acc
        elif method == "manual":
Packit Service b23acc
            # Add the static IP address, prefix, and (optional) gateway
Packit Service b23acc
            addr = NM.IPAddress.new(socket.AF_INET, sys.argv[3], int(sys.argv[4]))
Packit Service b23acc
            s_ip4.add_address(addr)
Packit Service b23acc
            if len(sys.argv) == 6:
Packit Service b23acc
                s_ip4.props.gateway = sys.argv[5]
Packit Service b23acc
Packit Service b23acc
        try:
Packit Service b23acc
            c.commit_changes(True, None)
Packit Service b23acc
            print("The connection profile has been updated.")
Packit Service b23acc
        except Exception as e:
Packit Service b23acc
            sys.stderr.write("Error: %s\n" % e)
Packit Service b23acc
        break