summaryrefslogtreecommitdiffstats
path: root/kubernetes/multicloud/components/multicloud-vio/values.yaml
blob: 5b218f1e757d6906b62125f27bff15a6e9a6b512 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Copyright © 2017 Amdocs, Bell Canada
# Modifications Copyright © 2018 AT&T
#
# 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.

#################################################################
# Global configuration defaults.
#################################################################
global:
  nodePortPrefix: 302

#################################################################
# Application configuration defaults.
#################################################################
# application image
image: onap/multicloud/vio:1.4.1
pullPolicy: Always

#Istio sidecar injection policy
istioSidecar: true

# application configuration
config:
  msbgateway: msb-iag
  msbPort: 80
  aai:
    port: 8443
    schemaVersion: v13
    username: AAI
    password: AAI

# default number of instances
replicaCount: 1

nodeSelector: {}

affinity: {}

# probe configuration parameters
liveness:
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 10
  successThreshold: 1
  failureThreshold: 5
  enabled: true

service:
  type: ClusterIP
  name: multicloud-vio
  portName: multicloud-vio
  externalPort: 9004
  internalPort: 9004
  nodePort: 92

ingress:
  enabled: false

# Resource Limit flavor -By Default using small
flavor: small
# Segregation for Different environment (Small and Large)
resources:
  small:
    limits:
      cpu: 1
      memory: 4Gi
    requests:
      cpu: 10m
      memory: 1Gi
  large:
    limits:
      cpu: 2
      memory: 8Gi
    requests:
      cpu: 20m
      memory: 2Gi
  unlimited: {}

#Pods Service Account
serviceAccount:
  nameOverride: multicloud-vio
  roles:
    - read
ight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*!
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 *
 * 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.
 */
import React from 'react';
import i18n from 'nfvo-utils/i18n/i18n.js';
import union from 'lodash/union.js';
import Button from 'sdc-ui/lib/react/Button.js';
// import Checkbox from 'sdc-ui/lib/react/Checkbox.js';
import Input from 'nfvo-components/input/validation/Input.jsx';
import GridSection from 'nfvo-components/grid/GridSection.jsx';
import GridItem from 'nfvo-components/grid/GridItem.jsx';
import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js';
import Radio from 'sdc-ui/lib/react/Radio.js';
import equal from 'deep-equal';
import { ResolutionTypes } from './MergeEditorConstants.js';

class ConflictCategory extends React.Component {
    state = {
        resolution: ResolutionTypes.YOURS
    };

    getTitle(conflictType, conflictName) {
        if (
            typeof conflictName === 'undefined' ||
            conflictType === conflictName
        ) {
            return i18n(conflictType);
        } else {
            return `${i18n(conflictType)}: ${conflictName}`;
        }
    }

    render() {
        let {
            collapseExpand,
            conflict: { id: conflictId, type, name },
            isCollapsed,
            item: { id: itemId, version },
            onResolveConflict
        } = this.props;
        let { resolution } = this.state;
        const iconClass = isCollapsed ? 'merge-chevron' : 'merge-chevron right';

        return (
            <div key={'conflictCategory_' + conflictId}>
                <GridSection className="conflict-section">
                    <GridItem>
                        <div
                            className="collapsible-section"
                            onClick={collapseExpand}>
                            <SVGIcon
                                name={isCollapsed ? 'chevronDown' : 'chevronUp'}
                                iconClassName={iconClass}
                            />
                            <div className="conflict-title">
                                {this.getTitle(type, name)}
                            </div>
                        </div>
                    </GridItem>
                    <GridItem className="yours">
                        <Radio
                            name={'radio_' + conflictId}
                            checked={resolution === ResolutionTypes.YOURS}
                            value="yours"
                            onChange={() =>
                                this.setState({
                                    resolution: ResolutionTypes.YOURS
                                })
                            }
                            data-test-id={'radio_' + conflictId + '_yours'}
                        />
                    </GridItem>
                    <GridItem className="theirs">
                        <Radio
                            name={'radio_' + conflictId}
                            checked={resolution === ResolutionTypes.THEIRS}
                            value="theirs"
                            onChange={() =>
                                this.setState({
                                    resolution: ResolutionTypes.THEIRS
                                })
                            }
                            data-test-id={'radio_' + conflictId + '_theirs'}
                        />
                    </GridItem>
                    <GridItem className="resolve">
                        <Button
                            className="conflict-resolve-btn"
                            btnType="secondary"
                            size="default"
                            onClick={() =>
                                onResolveConflict({
                                    conflictId,
                                    resolution,
                                    itemId,
                                    version
                                })
                            }>
                            {i18n('Resolve')}
                        </Button>
                    </GridItem>
                </GridSection>
                <div>{isCollapsed && this.props.children}</div>
            </div>
        );
    }
}

class TextCompare extends React.Component {
    render() {
        // let rand = Math.random() * (3000 - 1) + 1;
        let {
            yours,
            theirs,
            field,
            type,
            isObjName,
            conflictsOnly
        } = this.props;
        let typeYours = typeof yours;
        let typeTheirs = typeof theirs;

        let parsedType = `${type}/${field}`.replace(/\/[0-9]+/g, '/index');
        let level = type.split('/').length;

        if (typeYours === 'boolean' || typeTheirs === 'boolean') {
            yours = yours ? i18n('Yes') : i18n('No');
            theirs = theirs ? i18n('Yes') : i18n('No');
        }

        /*if ((typeYours !== 'string' && typeYours !== 'undefined') || (typeTheirs !== 'string' && typeTheirs !== 'undefined')) {
			return (<div className='merge-editor-text-field field-error'>{field} cannot be parsed for display</div>);
		}*/
        let isDiff = yours !== theirs;
        if (
            !isObjName &&
            ((!isDiff && conflictsOnly) ||
                (yours === '' && theirs === '') ||
                (typeYours === 'undefined' && typeTheirs === 'undefined'))
        ) {
            return null;
        }

        return (
            <GridSection
                className={
                    isDiff
                        ? 'merge-editor-text-field diff'
                        : 'merge-editor-text-field'
                }>
                <GridItem className="field-col grid-col-title" stretch>
                    <div
                        className={`field ${
                            isDiff ? 'diff' : ''
                        } field-name level-${level} ${
                            isObjName ? 'field-object-name' : ''
                        }`}>
                        {i18n(parsedType)}
                    </div>
                </GridItem>
                <GridItem className="field-col grid-col-yours" stretch>
                    <div
                        className={`field field-yours ${
                            !yours ? 'empty-field' : ''
                        }`}>
                        {yours || (isObjName ? '' : '━━')}
                    </div>
                </GridItem>
                <GridItem className="field-col grid-col-theirs" stretch>
                    <div
                        className={`field field-theirs ${
                            !theirs ? 'empty-field' : ''
                        }`}>
                        {theirs || (isObjName ? '' : '━━')}
                    </div>
                </GridItem>
                <GridItem stretch />
            </GridSection>
        );
    }
}

class MergeEditorView extends React.Component {
    state = {
        collapsingSections: {},
        conflictsOnly: false
    };

    render() {
        let {
            conflicts,
            item,
            conflictFiles,
            onResolveConflict,
            currentScreen,
            resolution
        } = this.props;

        return (
            <div className="merge-editor">
                {conflictFiles && this.renderConflictTableTitles()}
                <div className="merge-editor-body">
                    {conflictFiles &&
                        conflictFiles
                            .sort((a, b) => a.type > b.type)
                            .map(file => (
                                <ConflictCategory
                                    key={'conflict_' + file.id}
                                    conflict={file}
                                    item={item}
                                    isCollapsed={
                                        this.state.collapsingSections[file.id]
                                    }
                                    collapseExpand={() => {
                                        this.updateCollapseState(file.id);
                                    }}
                                    onResolveConflict={cDetails =>
                                        onResolveConflict({
                                            ...cDetails,
                                            currentScreen
                                        })
                                    }>
                                    {conflicts &&
                                        conflicts[file.id] &&
                                        this.getUnion(
                                            conflicts[file.id].yours,
                                            conflicts[file.id].theirs
                                        ).map(field => {
                                            return this.renderField(
                                                field,
                                                file,
                                                conflicts[file.id].yours[field],
                                                conflicts[file.id].theirs[
                                                    field
                                                ],
                                                resolution
                                            );
                                        })}
                                </ConflictCategory>
                            ))}
                </div>
            </div>
        );
    }

    renderConflictTableTitles() {
        return (
            <GridSection className="conflict-titles-section">
                <GridItem>{i18n('Page')}</GridItem>
                <GridItem className="yours">{i18n('Local (Me)')}</GridItem>
                <GridItem className="theirs">{i18n('Last Committed')}</GridItem>
                <GridItem className="resolve">
                    <Input
                        label={i18n('Show Conflicts Only')}
                        type="checkbox"
                        value={this.state.conflictsOnly}
                        onChange={e => this.setState({ conflictsOnly: e })}
                    />
                </GridItem>
            </GridSection>
        );
    }
    // <Checkbox
    // 	label={i18n('Show Conflicts Only')}
    // 	value={this.state.conflictsOnly}
    // 	checked={this.state.conflictsOnly}
    // 	onChange={checked => this.setState({conflictsOnly: checked})} />

    renderObjects(yours, theirs, fileType, field, id, resolution) {
        if (equal(yours, theirs)) {
            return;
        }
        let { conflictsOnly } = this.state;
        return (
            <div key={`obj_${fileType}/${field}_${id}`}>
                <TextCompare
                    field={field}
                    type={fileType}
                    conflictsOnly={conflictsOnly}
                    yours=""
                    theirs=""
                    isObjName
                    resolution={resolution}
                />
                <div className="field-objects">
                    <div>
                        {this.getUnion(yours, theirs).map(key =>
                            this.renderField(
                                key,
                                { type: `${fileType}/${field}`, id },
                                yours && yours[key],
                                theirs && theirs[key]
                            )
                        )}
                    </div>
                </div>
            </div>
        );
    }

    renderList(yours = [], theirs = [], type, field, id, resolution) {
        let theirsList = theirs.join(', ');
        let yoursList = yours.join(', ');
        let { conflictsOnly } = this.state;
        return (
            <TextCompare
                key={'text_' + id + '_' + field}
                field={field}
                type={type}
                yours={yoursList}
                theirs={theirsList}
                conflictsOnly={conflictsOnly}
                resolution={resolution}
            />
        );
    }

    renderField(field, file, yours, theirs, resolution) {
        if (yours) {
            if (Array.isArray(yours)) {
                return this.renderList(
                    yours,
                    theirs,
                    file.type,
                    field,
                    file.id,
                    resolution
                );
            } else if (typeof yours === 'object') {
                return this.renderObjects(
                    yours,
                    theirs,
                    file.type,
                    field,
                    file.id,
                    resolution
                );
            }
        } else if (theirs) {
            if (Array.isArray(theirs)) {
                return this.renderList(
                    yours,
                    theirs,
                    file.type,
                    field,
                    file.id,
                    resolution
                );
            } else if (typeof theirs === 'object') {
                return this.renderObjects(
                    yours,
                    theirs,
                    file.type,
                    field,
                    file.id,
                    resolution
                );
            }
        }
        let { conflictsOnly } = this.state;
        return (
            <TextCompare
                key={'text_' + file.id + '_' + field}
                resolution={resolution}
                field={field}
                type={file.type}
                yours={yours}
                theirs={theirs}
                conflictsOnly={conflictsOnly}
            />
        );
    }

    getUnion(yours = {}, theirs = {}) {
        let yoursKeys = Object.keys(yours);
        let theirsKeys = Object.keys(theirs);
        let myUn = union(yoursKeys, theirsKeys);
        return myUn; //.sort((a, b) => a > b);
    }

    updateCollapseState(conflictId) {
        const {
            fetchConflict,
            item: { id: itemId, version } /*conflicts*/
        } = this.props;
        let isCollapsed = this.state.collapsingSections[conflictId];
        // if (!isCollapsed && !(conflicts && conflictId in conflicts)) {
        if (!isCollapsed) {
            fetchConflict({ cid: conflictId, itemId, version });
        }
        this.setState({
            collapsingSections: {
                ...this.state.collapsingSections,
                [conflictId]: !isCollapsed
            }
        });
    }
}

export default MergeEditorView;