debian-mirror-gitlab/lib/gitlab/kubernetes/network_policy_common.rb

63 lines
1.5 KiB
Ruby
Raw Normal View History

2020-10-24 23:57:45 +05:30
# frozen_string_literal: true
module Gitlab
module Kubernetes
module NetworkPolicyCommon
DISABLED_BY_LABEL = :'network-policy.gitlab.com/disabled_by'
2020-11-24 15:15:51 +05:30
def generate
::Kubeclient::Resource.new(resource)
end
2020-10-24 23:57:45 +05:30
def as_json(opts = nil)
{
name: name,
namespace: namespace,
creation_timestamp: creation_timestamp,
manifest: manifest,
is_autodevops: autodevops?,
is_enabled: enabled?
}
end
def autodevops?
return false unless labels
!labels[:chart].nil? && labels[:chart].start_with?('auto-deploy-app-')
end
# selector selects pods that should be targeted by this
# policy. It can represent podSelector, nodeSelector or
# endpointSelector We can narrow selection by requiring
# this policy to match our custom labels. Since DISABLED_BY
# label will not be on any pod a policy will be effectively disabled.
def enabled?
return true unless selector&.key?(:matchLabels)
!selector[:matchLabels]&.key?(DISABLED_BY_LABEL)
end
def enable
return if enabled?
selector[:matchLabels].delete(DISABLED_BY_LABEL)
end
def disable
selector[:matchLabels] ||= {}
selector[:matchLabels].merge!(DISABLED_BY_LABEL => 'gitlab')
end
private
2020-11-24 15:15:51 +05:30
def resource
2020-10-24 23:57:45 +05:30
raise NotImplementedError
end
def manifest
2020-11-24 15:15:51 +05:30
YAML.dump(resource.deep_stringify_keys)
2020-10-24 23:57:45 +05:30
end
end
end
end