from libcloud.loadbalancer.base import Member, Algorithm
from libcloud.loadbalancer.types import Provider
from libcloud.loadbalancer.providers import get_driver


ACCESS_ID = "your access id"
SECRET_KEY = "your secret key"


def main():
    cls = get_driver(Provider.ELB)
    driver = cls(key=ACCESS_ID, secret=SECRET_KEY)

    print(driver.list_balancers())

    # members associated with the load balancer
    members = (Member(None, "192.168.88.1", 8000), Member(None, "192.168.88.2", 8080))
    # creates a new balancer named 'MyLB'
    new_balancer = driver.create_balancer(
        name="MyLB",
        algorithm=Algorithm.ROUND_ROBIN,
        port=80,
        protocol="http",
        members=members,
    )
    print(new_balancer)

    # create load balancer policy
    print(
        driver.ex_create_balancer_policy(
            name="MyLB",
            policy_name="EnableProxyProtocol",
            policy_type="ProxyProtocolPolicyType",
            policy_attributes={"ProxyProtocol": "true"},
        )
    )

    # delete load balancer policy
    print(
        driver.ex_delete_balancer_policy(name="MyLB", policy_name="EnableProxyProtocol")
    )

    # set load balancer policies for backend server
    print(
        driver.ex_set_balancer_policies_backend_server(
            name="MyLB", port=80, policies=["MyDurationStickyPolicy"]
        )
    )

    # create the listeners for the balancers
    uid = "arn:aws:iam::123456789012:server-certificate/servercert"
    print(
        driver.ex_create_balancer_listeners(
            name="MyLB", listeners=[[1024, 65533, "HTTPS", uid]]
        )
    )

    # set the listeners policies for the balancers
    print(
        driver.ex_set_balancer_policies_listener(
            name="MyLB", port=80, policies=["MyDurationStickyPolicy"]
        )
    )


if __name__ == "__main__":
    main()
