/*
 * Copyright 2019-present Open Networking Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.onosproject.k8snetworking.api;


import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy;

/**
 * Service for administering the inventory of kubernetes network policy.
 */
public interface K8sNetworkPolicyAdminService extends K8sNetworkPolicyService {

    /**
     * Creates a kubernetes network policy with the given information.
     *
     * @param networkPolicy the new kubernetes network policy
     */
    void createNetworkPolicy(NetworkPolicy networkPolicy);

    /**
     * Updates a kubernetes network policy with the given information.
     *
     * @param networkPolicy the updated kubernetes network policy
     */
    void updateNetworkPolicy(NetworkPolicy networkPolicy);

    /**
     * Removes the kubernetes network policy.
     *
     * @param uid kubernetes network policy UID
     */
    void removeNetworkPolicy(String uid);

    /**
     * Clears the existing kubernetes network policies.
     */
    void clear();
}
