Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
vnf-onboarding
OSM Packages
Commits
38dd8a1b
Commit
38dd8a1b
authored
Jun 23, 2022
by
Mark Beierl
Browse files
Merge branch 'helm_ee' into 'master'
Scripts from MR#10 Hackfest See merge request
!198
parents
537efb33
11cfe1c4
Pipeline
#6173
failed with stage
in 1 minute and 51 seconds
Changes
264
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
429 additions
and
0 deletions
+429
-0
Hackfest_Demos/OSM-MR10/HD1.2-Preparation/git-clone.sh
Hackfest_Demos/OSM-MR10/HD1.2-Preparation/git-clone.sh
+4
-0
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-build.sh
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-build.sh
+29
-0
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-delete.sh
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-delete.sh
+12
-0
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-launch.sh
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-launch.sh
+16
-0
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-actions.sh
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-actions.sh
+14
-0
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-build.sh
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-build.sh
+72
-0
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-launch.sh
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-launch.sh
+15
-0
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-watch-progress.sh
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-watch-progress.sh
+3
-0
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-actions.sh
...Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-actions.sh
+15
-0
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-build.sh
...t_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-build.sh
+40
-0
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-launch.sh
..._Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-launch.sh
+16
-0
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-watch-progress.sh
...SM-MR10/HD2.1-VNF-Primitives/virtual-pc-watch-progress.sh
+3
-0
Hackfest_Demos/OSM-MR10/HD2.2-Scaling/wiki-build.sh
Hackfest_Demos/OSM-MR10/HD2.2-Scaling/wiki-build.sh
+51
-0
Hackfest_Demos/OSM-MR10/HD2.2-Scaling/wiki-launch.sh
Hackfest_Demos/OSM-MR10/HD2.2-Scaling/wiki-launch.sh
+19
-0
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-build-and-onboard.sh
...mos/OSM-MR10/HD2.4-CNF-Helm/openldap-build-and-onboard.sh
+34
-0
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-check-k8s-status.sh
...emos/OSM-MR10/HD2.4-CNF-Helm/openldap-check-k8s-status.sh
+8
-0
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-launch.sh
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-launch.sh
+14
-0
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-params.yaml
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-params.yaml
+22
-0
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-show-vim-and-cluster.sh
.../OSM-MR10/HD2.4-CNF-Helm/openldap-show-vim-and-cluster.sh
+21
-0
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-test.sh
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-test.sh
+21
-0
No files found.
Hackfest_Demos/OSM-MR10/HD1.2-Preparation/git-clone.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
git clone
--recurse-submodules
-j8
https://osm.etsi.org/gitlab/vnf-onboarding/osm-packages.git
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-build.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
if
[
!
-d
hackfest_basic_ns
]
;
then
echo
"It does not look like we are in the osm-packages directory, exiting"
exit
1
fi
echo
"========================================================================"
echo
"Cleaning out any prior versions of the descriptors from OSM"
echo
"========================================================================"
osm nsd-delete hackfest_basic-ns
osm vnfd-delete hackfest_basic-vnf
echo
"========================================================================"
echo
"Building packages"
echo
"========================================================================"
osm package-build hackfest_basic_vnf
osm package-build hackfest_basic_ns
echo
"========================================================================"
echo
"Uploading packages"
echo
"========================================================================"
osm upload-package hackfest_basic_vnf.tar.gz
osm upload-package hackfest_basic_ns.tar.gz
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-delete.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
echo
"========================================================================"
echo
"Deleting network service"
echo
"========================================================================"
osm ns-delete basic-vnf
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD1.5-Checkpoint/basic-launch.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
VIMID
=
`
osm vim-list |
grep
osm_ |
awk
'{ print $4 }'
`
echo
"========================================================================"
echo
"Launching network service with VIMID
${
VIMID
}
"
echo
"========================================================================"
osm ns-create
--ns_name
basic-vnf
\
--nsd_name
hackfest_basic-ns
\
--vim_account
${
VIMID
}
\
--ssh_keys
~/.ssh/id_rsa.pub
\
--config
\
'{vld: [ {name: mgmtnet, vim-network-name: osm-ext} ] }'
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-actions.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
echo
"========================================================================"
echo
"Here are some of the actions you can run"
echo
"========================================================================"
cat
<<
'
EOF
'
DESKTOP_IP=`osm ns-show virtual-desktop --literal | yq e '.vcaStatus.*.machines.0.network_interfaces.ens3.ip_addresses.0' -`
osm ns-action firewall --vnf_name VYOS-PNF --action_name add-port-forward --params "{ruleNumber: '10', sourcePort: '3389', destinationAddress:
\"
${
DESKTOP_IP
}
\"
, destinationPort: '3389'}"
osm ns-action firewall --vnf_name VYOS-PNF --action_name remove-port-forward --params '{ruleNumber: "10"}'
EOF
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-build.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
if
[
!
-d
hackfest_firewall_pnf
]
;
then
echo
"It does not look like we are in the osm-packages directory, exiting"
exit
1
fi
echo
"========================================================================"
echo
"Building operator charms"
echo
"========================================================================"
cd
hackfest_firewall_pnf/charms/vyos-config-src
#virtualenv -p python3 venv
#source venv/bin/activate
#pip install -r requirements-dev.txt
#pip install charmcraft
#./venv/bin/charmcraft build
rm
-rf
venv
charmcraft build
cd
-
cd
hackfest_firewall_pnf/charms
mkdir
-p
vyos-config/
rm
-rf
vyos-config/
*
cp
-r
vyos-config-src/build/
*
vyos-config/
cd
-
echo
"========================================================================"
echo
"Cleaning out any prior versions of the descriptors from OSM"
echo
"========================================================================"
osm nsd-delete hackfest_firewall_pnf_ns
osm vnfd-delete hackfest_firewall_pnf
osm pdu-delete router01
rm
-v
hackfest_firewall_pnf
*
.tar.gz
echo
"========================================================================"
echo
"Building packages"
echo
"========================================================================"
osm package-build hackfest_firewall_pnf
osm package-build hackfest_firewall_pnf_ns
echo
"========================================================================"
echo
"Uploading packages"
echo
"========================================================================"
osm upload-package hackfest_firewall_pnf.tar.gz
osm upload-package hackfest_firewall_pnf_ns.tar.gz
VIMID
=
`
osm vim-list |
grep
osm_ |
awk
'{ print $4 }'
`
echo
"========================================================================"
echo
"Registering PDU 172.21.19.
${
HFID
}
with
$VIMID
"
echo
"========================================================================"
cat
<<
EOF
> firewall-pdu.yaml
name: router01
description: VyOS Router
type: gateway
shared: false
interfaces:
- name: gateway_public
ip-address: 172.21.19.
${
HFID
}
mgmt: true
vim-network-name: osm-ext
- name: vnf_internal
ip-address: 192.168.239.250
mgmt: false
vim-network-name: private
EOF
osm pdu-create
--descriptor_file
firewall-pdu.yaml
\
--vim_account
$VIMID
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-launch.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
VIMID
=
`
osm vim-list |
grep
osm_ |
awk
'{ print $4 }'
`
echo
"========================================================================"
echo
"Launching network service with VIMID
${
VIMID
}
"
echo
"========================================================================"
osm ns-create
--ns_name
firewall
\
--nsd_name
hackfest_firewall_pnf_ns
\
--vim_account
$VIMID
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD1.7-PNF/firewall-watch-progress.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
watch
--
'osm ns-show firewall | grep -i status'
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-actions.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
echo
"========================================================================"
echo
"Here are some of the actions you can run"
echo
"========================================================================"
cat
<<
'
EOF
'
osm ns-action virtual-desktop --vnf_name 1 --action_name update-system
osm ns-action virtual-desktop --vnf_name 1 --action_name add-package --params '{package: "ubuntu-mate-wallpapers-disco,ubuntu-mate-wallpapers-eoan"}'
osm ns-action virtual-desktop --vnf_name 1 --action_name remove-package --params '{package: "ubuntu-mate-wallpapers-disco"}'
osm ns-action virtual-desktop --vnf_name 1 --action_name add-snap --params '{package: "code --classic"}'
osm ns-action virtual-desktop --vnf_name 1 --action_name remove-snap --params '{package: "code"}'
osm ns-action virtual-desktop --vnf_name 1 --action_name reboot
osm ns-action virtual-desktop --vnf_name 1 --action_name announce --params '{message: "Hello from the Hackfest!"}'
EOF
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-build.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
if
[
!
-d
hackfest_virtual-pc_vnfd
]
;
then
echo
"It does not look like we are in the osm-packages directory, exiting"
exit
1
fi
cd
hackfest_virtual-pc_vnfd/charms/virtual-pc-src
echo
"========================================================================"
echo
"Building operator charms"
echo
"========================================================================"
rm
-rf
venv
charmcraft build
cd
-
cd
hackfest_virtual-pc_vnfd/charms
cp
-r
virtual-pc-src/build/
*
virtual-pc/
cd
-
echo
"========================================================================"
echo
"Cleaning out any prior versions of the descriptors from OSM"
echo
"========================================================================"
osm nsd-delete hackfest_virtual-pc_ns
osm vnfd-delete hackfest_virtual-pc_vnf
echo
"========================================================================"
echo
"Building packages"
echo
"========================================================================"
osm package-build hackfest_virtual-pc_vnfd
osm package-build hackfest_virtual-pc_ns
echo
"========================================================================"
echo
"Uploading packages"
echo
"========================================================================"
osm upload-package hackfest_virtual-pc_vnfd.tar.gz
osm upload-package hackfest_virtual-pc_ns.tar.gz
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-launch.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
VIMID
=
`
osm vim-list |
grep
osm_ |
awk
'{ print $4 }'
`
echo
"========================================================================"
echo
"Launching network service with VIMID
${
VIMID
}
"
echo
"========================================================================"
osm ns-create
--ns_name
virtual-desktop
\
--nsd_name
hackfest_virtual-pc_ns
\
--vim_account
${
VIMID
}
\
--config
\
'{vld: [ {name: mgmtnet, vim-network-name: osm-ext},
{name: private, vim-network-name: private} ] }'
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.1-VNF-Primitives/virtual-pc-watch-progress.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
watch
--
'osm ns-show virtual-desktop | grep -i status'
Hackfest_Demos/OSM-MR10/HD2.2-Scaling/wiki-build.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
OSM_PACKAGE_DIR
=
$HOME
/osm-packages
WIKI_VNFD_PACKAGE_NAME
=
wiki_webserver_autoscale_vnfd
WIKI_NSD_PACKAGE_NAME
=
wiki_webserver_autoscale_nsd
WIKI_VNF_PACKAGE_DIR
=
$OSM_PACKAGE_DIR
/
$WIKI_VNFD_PACKAGE_NAME
WIKI_NS_PACKAGE_DIR
=
$OSM_PACKAGE_DIR
/
$WIKI_NSD_PACKAGE_NAME
WIKI_VNFD_NAME
=
wiki_webserver_autoscale_vnf
WIKI_NSD_NAME
=
wiki_webserver_autoscale_ns
USER_ID
=
$OSM_USER
echo
"========================================================================"
echo
"Downloading and modifying the wiki package"
echo
"========================================================================"
# clone from git
rm
-rf
$OSM_PACKAGE_DIR
git clone https://osm.etsi.org/gitlab/vnf-onboarding/osm-packages.git
# Append user id to NSD and VNFD names
sed
-i
"s/
${
WIKI_VNFD_NAME
}
.*/
${
WIKI_VNFD_NAME
}
_
${
USER_ID
}
/"
$WIKI_VNF_PACKAGE_DIR
/wiki_webserver_autoscale_vnfd.yaml
sed
-i
"s/
${
WIKI_VNFD_NAME
}
.*/
${
WIKI_VNFD_NAME
}
_
${
USER_ID
}
/"
$WIKI_NS_PACKAGE_DIR
/wiki_webserver_autoscale_nsd.yaml
sed
-i
"s/
${
WIKI_NSD_NAME
}
.*/
${
WIKI_NSD_NAME
}
_
${
USER_ID
}
/"
$WIKI_NS_PACKAGE_DIR
/wiki_webserver_autoscale_nsd.yaml
# Add 'runcmd' in cloud-init to modify configuration and restart haproxy service
echo
'runcmd:'
>>
$WIKI_VNF_PACKAGE_DIR
/cloud_init/cloud_init_haproxy
echo
' - ip=$(ifconfig | grep -A 1 "ens4" | tail -1 | cut -d ":" -f 2 | cut -d " " -f 1)'
>>
$WIKI_VNF_PACKAGE_DIR
/cloud_init/cloud_init_haproxy
echo
' - sudo -S sed -i "s/ipv4@\(.*:9999\)/ipv4@${ip}\:9999/" /etc/haproxy/haproxy.cfg'
>>
$WIKI_VNF_PACKAGE_DIR
/cloud_init/cloud_init_haproxy
echo
' - sleep 60'
>>
$WIKI_VNF_PACKAGE_DIR
/cloud_init/cloud_init_haproxy
echo
' - echo "osm2021" | sudo service haproxy restart'
>>
$WIKI_VNF_PACKAGE_DIR
/cloud_init/cloud_init_haproxy
echo
"========================================================================"
echo
"Cleaning out any prior versions of the descriptors from OSM"
echo
"========================================================================"
osm nsd-delete
$WIKI_NSD_NAME
"_"
$USER_ID
osm vnfd-delete
$WIKI_VNFD_NAME
"_"
$USER_ID
echo
"========================================================================"
echo
"Building packages"
echo
"========================================================================"
cd
$OSM_PACKAGE_DIR
osm package-build
$WIKI_VNFD_PACKAGE_NAME
osm package-build
$WIKI_NSD_PACKAGE_NAME
echo
"========================================================================"
echo
"Uploading packages"
echo
"========================================================================"
osm upload-package
$WIKI_VNFD_PACKAGE_NAME
.tar.gz
osm upload-package
$WIKI_NSD_PACKAGE_NAME
.tar.gz
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.2-Scaling/wiki-launch.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
VIMID
=
`
osm vim-list |
grep
osm_ |
awk
'{ print $4 }'
`
USER_ID
=
$OSM_USER
NSD_NAME
=
wiki_webserver_autoscale_ns_
$USER_ID
echo
"========================================================================"
echo
"Launching network service with VIMID
${
VIMID
}
"
echo
"========================================================================"
osm ns-create
--ns_name
wiki
\
--nsd_name
wiki_webserver_autoscale_ns_
$USER_ID
\
--vim_account
${
VIMID
}
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-build-and-onboard.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
if
[
!
-d
openldap_knf
]
;
then
echo
"It does not look like we are in the osm-packages directory, exiting"
exit
1
fi
echo
"========================================================================"
echo
"Cleaning out any prior versions of the descriptors from OSM"
echo
"========================================================================"
osm nspkg-delete openldap_ns
osm nfpkg-delete openldap_knf
echo
"========================================================================"
echo
"Validating packages"
echo
"========================================================================"
osm package-validate
--no-recursive
openldap_knf
osm package-validate
--no-recursive
openldap_ns
echo
"========================================================================"
echo
"Building packages"
echo
"========================================================================"
osm package-build openldap_knf
osm package-build openldap_ns
echo
"========================================================================"
echo
"Uploading packages"
echo
"========================================================================"
osm nfpkg-create openldap_knf.tar.gz
osm nspkg-create openldap_ns.tar.gz
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-check-k8s-status.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
PROJECT_ID
=
`
osm project-list |
grep
$OSM_PROJECT
|
awk
'{ print $4 }'
`
kubectl
-n
${
PROJECT_ID
}
get all
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-launch.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
VIMID
=
`
osm vim-list |
grep
$OSM_PROJECT
|
awk
'{ print $4 }'
`
echo
"========================================================================"
echo
"Launching network service in VIM with ID
${
VIMID
}
"
echo
"========================================================================"
osm ns-create
--ns_name
ldap
\
--nsd_name
openldap_ns
\
--vim_account
${
VIMID
}
\
--config_file
$HOME
/openldap-params.yaml
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-params.yaml
0 → 100644
View file @
38dd8a1b
vld
:
-
name
:
mgmtnet
vim-network-name
:
osm-ext
additionalParamsForVnf
:
-
member-vnf-index
:
openldap
additionalParamsForKdu
:
-
kdu_name
:
ldap
additionalParams
:
# replicaCount: 2
service
:
type
:
LoadBalancer
loadBalancerIP
:
'
172.21.251.X'
# MetalLB IP Address
adminPassword
:
osm4u
configPassword
:
osm4u
env
:
LDAP_ORGANISATION
:
"
Example
Inc."
LDAP_DOMAIN
:
"
example.org"
LDAP_BACKEND
:
"
hdb"
LDAP_TLS
:
"
true"
LDAP_TLS_ENFORCE
:
"
false"
LDAP_REMOVE_CONFIG_AFTER_SETUP
:
"
true"
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-show-vim-and-cluster.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
echo
"========================================================================"
echo
"Listing VIM"
echo
"========================================================================"
osm vim-list
echo
"========================================================================"
echo
"Getting details of VIM
$OSM_PROJECT
"
echo
"========================================================================"
osm vim-show
$OSM_PROJECT
echo
"========================================================================"
echo
"Listing K8s clusters"
echo
"========================================================================"
osm k8scluster-list
echo
"========================================================================"
echo
"Getting details of K8s cluster
$OSM_PROJECT
"
echo
"========================================================================"
osm k8scluster-show
$OSM_PROJECT
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Hackfest_Demos/OSM-MR10/HD2.4-CNF-Helm/openldap-test.sh
0 → 100755
View file @
38dd8a1b
#!/bin/bash
echo
"========================================================================"
echo
"Getting IP address of the LDAP server"
echo
"========================================================================"
VNF_ID
=
`
osm vnf-list
--ns
ldap|grep openldap |awk
'{print $2}'
`
IP_ADDR1
=
`
osm vnf-show
${
VNF_ID
}
--literal
| yq e
'.kdur[0].services[0].external_ip[0]'
-
`
PROJECT_ID
=
`
osm project-list |
grep
$OSM_PROJECT
|
awk
'{ print $4 }'
`
IP_ADDR2
=
`
kubectl
-n
${
PROJECT_ID
}
get svc|grep stable-openldap |awk
'{print $4}'
`
LB_IP
=
${
IP_ADDR1
}
[
"
${
LB_IP
}
"
==
"null"
]
&&
LB_IP
=
""
[
-n
"
${
LB_IP
}
"
]
||
LB_IP
=
${
IP_ADDR2
}
echo
$LB_IP
echo
"========================================================================"
echo
"Testing LDAP server"
echo
"========================================================================"
ldapsearch
-x
-H
ldap://
${
LB_IP
}
:389
-b
dc
=
example,dc
=
org
-D
"cn=admin,dc=example,dc=org"
-w
osm4u
echo
"========================================================================"
echo
"Done"
echo
"========================================================================"
Prev
1
2
3
4
5
…
14
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment