Class: Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails

Inherits:
Object
  • Object
show all
Extended by:
Protobuf::MessageExts::ClassMethods
Includes:
Protobuf::MessageExts
Defined in:
proto_docs/google/cloud/binaryauthorization/v1beta1/continuous_validation_logging.rb

Overview

Container image with auditing details.

Defined Under Namespace

Modules: AuditResult, ContainerType Classes: CheckResult

Instance Attribute Summary collapse

Instance Attribute Details

#check_results::Array<::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult>



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'proto_docs/google/cloud/binaryauthorization/v1beta1/continuous_validation_logging.rb', line 84

class ImageDetails
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # @!attribute [rw] check_set_index
  #   @return [::String]
  #     The index of the check set.
  # @!attribute [rw] check_set_name
  #   @return [::String]
  #     The name of the check set.
  # @!attribute [rw] check_set_scope
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckSetScope]
  #     The scope of the check set.
  # @!attribute [rw] check_index
  #   @return [::String]
  #     The index of the check.
  # @!attribute [rw] check_name
  #   @return [::String]
  #     The name of the check.
  # @!attribute [rw] check_type
  #   @return [::String]
  #     The type of the check.
  # @!attribute [rw] verdict
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckVerdict]
  #     The verdict of this check.
  # @!attribute [rw] explanation
  #   @return [::String]
  #     User-friendly explanation of this check result.
  class CheckResult
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # A scope specifier for check sets.
    # @!attribute [rw] kubernetes_service_account
    #   @return [::String]
    #     Matches a single Kubernetes service account, e.g.
    #     'my-namespace:my-service-account'.
    #     `kubernetes_service_account` scope is always more specific than
    #     `kubernetes_namespace` scope for the same namespace.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_service_account`, `kubernetes_namespace`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] kubernetes_namespace
    #   @return [::String]
    #     Matches all Kubernetes service accounts in the provided
    #     namespace, unless a more specific `kubernetes_service_account`
    #     scope already matched.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_namespace`, `kubernetes_service_account`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    class CheckSetScope
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # Result of evaluating one check.
    module CheckVerdict
      # We should always have a verdict. This is an error.
      CHECK_VERDICT_UNSPECIFIED = 0

      # The check was successfully evaluated and the image did not satisfy
      # the check.
      NON_CONFORMANT = 1
    end
  end

  # The container type.
  module ContainerType
    # The container type should always be specified. This is an error.
    CONTAINER_TYPE_UNSPECIFIED = 0

    # A regular deployment.
    CONTAINER = 1

    # Init container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    INIT_CONTAINER = 2

    # Ephemeral container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/
    EPHEMERAL_CONTAINER = 3
  end

  # Result of the audit.
  module AuditResult
    # Unspecified result. This is an error.
    AUDIT_RESULT_UNSPECIFIED = 0

    # Image is allowed.
    ALLOW = 1

    # Image is denied.
    DENY = 2
  end
end

#container_name::String



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'proto_docs/google/cloud/binaryauthorization/v1beta1/continuous_validation_logging.rb', line 84

class ImageDetails
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # @!attribute [rw] check_set_index
  #   @return [::String]
  #     The index of the check set.
  # @!attribute [rw] check_set_name
  #   @return [::String]
  #     The name of the check set.
  # @!attribute [rw] check_set_scope
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckSetScope]
  #     The scope of the check set.
  # @!attribute [rw] check_index
  #   @return [::String]
  #     The index of the check.
  # @!attribute [rw] check_name
  #   @return [::String]
  #     The name of the check.
  # @!attribute [rw] check_type
  #   @return [::String]
  #     The type of the check.
  # @!attribute [rw] verdict
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckVerdict]
  #     The verdict of this check.
  # @!attribute [rw] explanation
  #   @return [::String]
  #     User-friendly explanation of this check result.
  class CheckResult
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # A scope specifier for check sets.
    # @!attribute [rw] kubernetes_service_account
    #   @return [::String]
    #     Matches a single Kubernetes service account, e.g.
    #     'my-namespace:my-service-account'.
    #     `kubernetes_service_account` scope is always more specific than
    #     `kubernetes_namespace` scope for the same namespace.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_service_account`, `kubernetes_namespace`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] kubernetes_namespace
    #   @return [::String]
    #     Matches all Kubernetes service accounts in the provided
    #     namespace, unless a more specific `kubernetes_service_account`
    #     scope already matched.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_namespace`, `kubernetes_service_account`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    class CheckSetScope
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # Result of evaluating one check.
    module CheckVerdict
      # We should always have a verdict. This is an error.
      CHECK_VERDICT_UNSPECIFIED = 0

      # The check was successfully evaluated and the image did not satisfy
      # the check.
      NON_CONFORMANT = 1
    end
  end

  # The container type.
  module ContainerType
    # The container type should always be specified. This is an error.
    CONTAINER_TYPE_UNSPECIFIED = 0

    # A regular deployment.
    CONTAINER = 1

    # Init container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    INIT_CONTAINER = 2

    # Ephemeral container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/
    EPHEMERAL_CONTAINER = 3
  end

  # Result of the audit.
  module AuditResult
    # Unspecified result. This is an error.
    AUDIT_RESULT_UNSPECIFIED = 0

    # Image is allowed.
    ALLOW = 1

    # Image is denied.
    DENY = 2
  end
end

#container_type::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::ContainerType



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'proto_docs/google/cloud/binaryauthorization/v1beta1/continuous_validation_logging.rb', line 84

class ImageDetails
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # @!attribute [rw] check_set_index
  #   @return [::String]
  #     The index of the check set.
  # @!attribute [rw] check_set_name
  #   @return [::String]
  #     The name of the check set.
  # @!attribute [rw] check_set_scope
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckSetScope]
  #     The scope of the check set.
  # @!attribute [rw] check_index
  #   @return [::String]
  #     The index of the check.
  # @!attribute [rw] check_name
  #   @return [::String]
  #     The name of the check.
  # @!attribute [rw] check_type
  #   @return [::String]
  #     The type of the check.
  # @!attribute [rw] verdict
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckVerdict]
  #     The verdict of this check.
  # @!attribute [rw] explanation
  #   @return [::String]
  #     User-friendly explanation of this check result.
  class CheckResult
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # A scope specifier for check sets.
    # @!attribute [rw] kubernetes_service_account
    #   @return [::String]
    #     Matches a single Kubernetes service account, e.g.
    #     'my-namespace:my-service-account'.
    #     `kubernetes_service_account` scope is always more specific than
    #     `kubernetes_namespace` scope for the same namespace.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_service_account`, `kubernetes_namespace`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] kubernetes_namespace
    #   @return [::String]
    #     Matches all Kubernetes service accounts in the provided
    #     namespace, unless a more specific `kubernetes_service_account`
    #     scope already matched.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_namespace`, `kubernetes_service_account`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    class CheckSetScope
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # Result of evaluating one check.
    module CheckVerdict
      # We should always have a verdict. This is an error.
      CHECK_VERDICT_UNSPECIFIED = 0

      # The check was successfully evaluated and the image did not satisfy
      # the check.
      NON_CONFORMANT = 1
    end
  end

  # The container type.
  module ContainerType
    # The container type should always be specified. This is an error.
    CONTAINER_TYPE_UNSPECIFIED = 0

    # A regular deployment.
    CONTAINER = 1

    # Init container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    INIT_CONTAINER = 2

    # Ephemeral container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/
    EPHEMERAL_CONTAINER = 3
  end

  # Result of the audit.
  module AuditResult
    # Unspecified result. This is an error.
    AUDIT_RESULT_UNSPECIFIED = 0

    # Image is allowed.
    ALLOW = 1

    # Image is denied.
    DENY = 2
  end
end

#description::String



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'proto_docs/google/cloud/binaryauthorization/v1beta1/continuous_validation_logging.rb', line 84

class ImageDetails
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # @!attribute [rw] check_set_index
  #   @return [::String]
  #     The index of the check set.
  # @!attribute [rw] check_set_name
  #   @return [::String]
  #     The name of the check set.
  # @!attribute [rw] check_set_scope
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckSetScope]
  #     The scope of the check set.
  # @!attribute [rw] check_index
  #   @return [::String]
  #     The index of the check.
  # @!attribute [rw] check_name
  #   @return [::String]
  #     The name of the check.
  # @!attribute [rw] check_type
  #   @return [::String]
  #     The type of the check.
  # @!attribute [rw] verdict
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckVerdict]
  #     The verdict of this check.
  # @!attribute [rw] explanation
  #   @return [::String]
  #     User-friendly explanation of this check result.
  class CheckResult
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # A scope specifier for check sets.
    # @!attribute [rw] kubernetes_service_account
    #   @return [::String]
    #     Matches a single Kubernetes service account, e.g.
    #     'my-namespace:my-service-account'.
    #     `kubernetes_service_account` scope is always more specific than
    #     `kubernetes_namespace` scope for the same namespace.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_service_account`, `kubernetes_namespace`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] kubernetes_namespace
    #   @return [::String]
    #     Matches all Kubernetes service accounts in the provided
    #     namespace, unless a more specific `kubernetes_service_account`
    #     scope already matched.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_namespace`, `kubernetes_service_account`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    class CheckSetScope
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # Result of evaluating one check.
    module CheckVerdict
      # We should always have a verdict. This is an error.
      CHECK_VERDICT_UNSPECIFIED = 0

      # The check was successfully evaluated and the image did not satisfy
      # the check.
      NON_CONFORMANT = 1
    end
  end

  # The container type.
  module ContainerType
    # The container type should always be specified. This is an error.
    CONTAINER_TYPE_UNSPECIFIED = 0

    # A regular deployment.
    CONTAINER = 1

    # Init container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    INIT_CONTAINER = 2

    # Ephemeral container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/
    EPHEMERAL_CONTAINER = 3
  end

  # Result of the audit.
  module AuditResult
    # Unspecified result. This is an error.
    AUDIT_RESULT_UNSPECIFIED = 0

    # Image is allowed.
    ALLOW = 1

    # Image is denied.
    DENY = 2
  end
end

#image::String



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'proto_docs/google/cloud/binaryauthorization/v1beta1/continuous_validation_logging.rb', line 84

class ImageDetails
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # @!attribute [rw] check_set_index
  #   @return [::String]
  #     The index of the check set.
  # @!attribute [rw] check_set_name
  #   @return [::String]
  #     The name of the check set.
  # @!attribute [rw] check_set_scope
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckSetScope]
  #     The scope of the check set.
  # @!attribute [rw] check_index
  #   @return [::String]
  #     The index of the check.
  # @!attribute [rw] check_name
  #   @return [::String]
  #     The name of the check.
  # @!attribute [rw] check_type
  #   @return [::String]
  #     The type of the check.
  # @!attribute [rw] verdict
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckVerdict]
  #     The verdict of this check.
  # @!attribute [rw] explanation
  #   @return [::String]
  #     User-friendly explanation of this check result.
  class CheckResult
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # A scope specifier for check sets.
    # @!attribute [rw] kubernetes_service_account
    #   @return [::String]
    #     Matches a single Kubernetes service account, e.g.
    #     'my-namespace:my-service-account'.
    #     `kubernetes_service_account` scope is always more specific than
    #     `kubernetes_namespace` scope for the same namespace.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_service_account`, `kubernetes_namespace`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] kubernetes_namespace
    #   @return [::String]
    #     Matches all Kubernetes service accounts in the provided
    #     namespace, unless a more specific `kubernetes_service_account`
    #     scope already matched.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_namespace`, `kubernetes_service_account`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    class CheckSetScope
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # Result of evaluating one check.
    module CheckVerdict
      # We should always have a verdict. This is an error.
      CHECK_VERDICT_UNSPECIFIED = 0

      # The check was successfully evaluated and the image did not satisfy
      # the check.
      NON_CONFORMANT = 1
    end
  end

  # The container type.
  module ContainerType
    # The container type should always be specified. This is an error.
    CONTAINER_TYPE_UNSPECIFIED = 0

    # A regular deployment.
    CONTAINER = 1

    # Init container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    INIT_CONTAINER = 2

    # Ephemeral container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/
    EPHEMERAL_CONTAINER = 3
  end

  # Result of the audit.
  module AuditResult
    # Unspecified result. This is an error.
    AUDIT_RESULT_UNSPECIFIED = 0

    # Image is allowed.
    ALLOW = 1

    # Image is denied.
    DENY = 2
  end
end

#result::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::AuditResult



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'proto_docs/google/cloud/binaryauthorization/v1beta1/continuous_validation_logging.rb', line 84

class ImageDetails
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # @!attribute [rw] check_set_index
  #   @return [::String]
  #     The index of the check set.
  # @!attribute [rw] check_set_name
  #   @return [::String]
  #     The name of the check set.
  # @!attribute [rw] check_set_scope
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckSetScope]
  #     The scope of the check set.
  # @!attribute [rw] check_index
  #   @return [::String]
  #     The index of the check.
  # @!attribute [rw] check_name
  #   @return [::String]
  #     The name of the check.
  # @!attribute [rw] check_type
  #   @return [::String]
  #     The type of the check.
  # @!attribute [rw] verdict
  #   @return [::Google::Cloud::BinaryAuthorization::V1beta1::ContinuousValidationEvent::ContinuousValidationPodEvent::ImageDetails::CheckResult::CheckVerdict]
  #     The verdict of this check.
  # @!attribute [rw] explanation
  #   @return [::String]
  #     User-friendly explanation of this check result.
  class CheckResult
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # A scope specifier for check sets.
    # @!attribute [rw] kubernetes_service_account
    #   @return [::String]
    #     Matches a single Kubernetes service account, e.g.
    #     'my-namespace:my-service-account'.
    #     `kubernetes_service_account` scope is always more specific than
    #     `kubernetes_namespace` scope for the same namespace.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_service_account`, `kubernetes_namespace`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] kubernetes_namespace
    #   @return [::String]
    #     Matches all Kubernetes service accounts in the provided
    #     namespace, unless a more specific `kubernetes_service_account`
    #     scope already matched.
    #
    #     Note: The following fields are mutually exclusive: `kubernetes_namespace`, `kubernetes_service_account`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    class CheckSetScope
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # Result of evaluating one check.
    module CheckVerdict
      # We should always have a verdict. This is an error.
      CHECK_VERDICT_UNSPECIFIED = 0

      # The check was successfully evaluated and the image did not satisfy
      # the check.
      NON_CONFORMANT = 1
    end
  end

  # The container type.
  module ContainerType
    # The container type should always be specified. This is an error.
    CONTAINER_TYPE_UNSPECIFIED = 0

    # A regular deployment.
    CONTAINER = 1

    # Init container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    INIT_CONTAINER = 2

    # Ephemeral container defined as specified at
    # https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/
    EPHEMERAL_CONTAINER = 3
  end

  # Result of the audit.
  module AuditResult
    # Unspecified result. This is an error.
    AUDIT_RESULT_UNSPECIFIED = 0

    # Image is allowed.
    ALLOW = 1

    # Image is denied.
    DENY = 2
  end
end