From 60da4f5d90b24030a0cc44a2122bb636681f9329 Mon Sep 17 00:00:00 2001 From: jrzeszutek Date: Wed, 6 Mar 2019 15:00:10 +0100 Subject: [PATCH 1/6] commercial case on openstack: fixed wrong BIG-IP configuration, workflow timeout issue not resolved yet --- .../Resources/templates/install_license.txt | 4 +- .../Resources/templates/revoke_license.txt | 4 +- .../bigip/Resources/templates/vlan_config.txt | 12 +-- .../templates/vlan_config_delete.txt | 10 +- .../bigip/VNFM-F5-Prov-Openstack-vm.yaml | 40 +++++++- ...FM-Networking-Prov-Openstack-networks.yaml | 8 +- .../VNFM-Fortigate-Prov-Openstack-vm.yaml | 6 +- .../httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml | 29 +++--- .../Resources/templates/ltm_config.txt | 12 +-- .../Resources/templates/ltm_config_stop.txt | 8 +- .../Resources/bigip.zip | Bin 5594 -> 5643 bytes .../Resources/common.zip | Bin 3040 -> 3066 bytes .../Resources/fortigate.zip | Bin 4665 -> 4459 bytes .../Resources/httpd.zip | Bin 4723 -> 4704 bytes .../Resources/service.zip | Bin 4702 -> 4717 bytes .../VNFM-E2E-F5-Fortigate-HTTPD.yaml | 91 ++++++++---------- 16 files changed, 129 insertions(+), 95 deletions(-) diff --git a/openstack_commercial_case/bigip/Resources/templates/install_license.txt b/openstack_commercial_case/bigip/Resources/templates/install_license.txt index 91d24dd..6b4e62e 100755 --- a/openstack_commercial_case/bigip/Resources/templates/install_license.txt +++ b/openstack_commercial_case/bigip/Resources/templates/install_license.txt @@ -1,2 +1,2 @@ -install /sys license registration-key {{REG_KEY}} -quit +tmsh install /sys license registration-key {{REG_KEY}} +tmsh quit diff --git a/openstack_commercial_case/bigip/Resources/templates/revoke_license.txt b/openstack_commercial_case/bigip/Resources/templates/revoke_license.txt index 337886b..64b9de7 100755 --- a/openstack_commercial_case/bigip/Resources/templates/revoke_license.txt +++ b/openstack_commercial_case/bigip/Resources/templates/revoke_license.txt @@ -1,2 +1,2 @@ -revoke /sys license -quit +tmsh revoke /sys license +tmsh quit diff --git a/openstack_commercial_case/bigip/Resources/templates/vlan_config.txt b/openstack_commercial_case/bigip/Resources/templates/vlan_config.txt index 6994c6b..50778af 100755 --- a/openstack_commercial_case/bigip/Resources/templates/vlan_config.txt +++ b/openstack_commercial_case/bigip/Resources/templates/vlan_config.txt @@ -1,6 +1,6 @@ -create net vlan inside interfaces add { 1.1 { untagged } } -create net vlan outside interfaces add { 1.2 { untagged } } -create net self {{IP_INSIDE}} address {{IP_INSIDE}}/24 vlan inside allow-service default -create net self {{IP_OUTSIDE}} address {{IP_OUTSIDE}}/24 vlan outside allow-service default -save sys config -quit +tmsh create net vlan inside interfaces add { 1.1 { untagged } } +tmsh create net vlan outside interfaces add { 1.2 { untagged } } +tmsh create net self {{IP_INSIDE}} address {{IP_INSIDE}}/24 vlan inside allow-service default +tmsh create net self {{IP_OUTSIDE}} address {{IP_OUTSIDE}}/24 vlan outside allow-service default +tmsh save sys config +tmsh quit diff --git a/openstack_commercial_case/bigip/Resources/templates/vlan_config_delete.txt b/openstack_commercial_case/bigip/Resources/templates/vlan_config_delete.txt index 69e4755..e94b59a 100755 --- a/openstack_commercial_case/bigip/Resources/templates/vlan_config_delete.txt +++ b/openstack_commercial_case/bigip/Resources/templates/vlan_config_delete.txt @@ -1,5 +1,5 @@ -delete net self {{IP_OUTSIDE}} -delete net self {{IP_INSIDE}} -delete net vlan outside -delete net vlan outside -quit +tmsh delete net self {{IP_OUTSIDE}} +tmsh delete net self {{IP_INSIDE}} +tmsh delete net vlan outside +tmsh delete net vlan outside +tmsh quit diff --git a/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml b/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml index 422faab..9a056b0 100755 --- a/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml +++ b/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml @@ -6,6 +6,7 @@ description: > imports: - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml - plugin:cloudify-openstack-plugin + - plugin:cloudify-utilities-plugin inputs: @@ -23,11 +24,13 @@ inputs: flavor_id: type: string - default: f7cfaaa8-e2db-4f9b-a65b-6a407f340960 + # default: f7cfaaa8-e2db-4f9b-a65b-6a407f340960 #MEMSET + default: 8f68d4e5-4281-48c0-ad43-a8ac58d635f0 image_id: type: string - default: 6d8ff903-f35b-43df-b7c2-e219929924b9 + default: 7f5477bd-c2a8-4608-82ae-0ca2a9bf5254 + # default: 8577e342-ff99-4737-8aa3-2a8178eaa891 #MEMSET vnf_vm_name: type: string @@ -152,6 +155,31 @@ node_templates: create_if_missing: False resource_id: { get_input: image_id } + cloud_config: + type: cloudify.nodes.CloudInit.CloudConfig + properties: + resource_config: + write_files: + - path: /config/check_mcpd_status.sh + permissions: 0755 + owner: root:root + content: | + #!/bin/sh + echo 'preOnboard: Starting MCP status check' >> /var/log/cloud-init.log + checks=0 + while [ $checks -lt 120 ]; do + echo preOnboard: checking mcpd + if tmsh -a show sys mcp-state field-fmt | grep -q running; then + echo preOnboard: mcpd ready >> /var/log/cloud-init.log + break + fi + echo preOnboard: mcpd not ready yet + let checks=checks+1 + sleep 10 + done + runcmd: + - nohup sh -c '/config/check_mcpd_status.sh' + vm: type: cloudify.openstack.nodes.Server properties: @@ -171,15 +199,19 @@ node_templates: - { get_input: resource_suffix } image: { get_property: [ image, resource_id ] } flavor: { get_input: flavor_id } + userdata: { get_attribute: [ cloud_config, cloud_config ] } + config_drive: True relationships: - type: cloudify.openstack.server_connected_to_port target: mgmt_port - - type: cloudify.openstack.server_connected_to_port - target: public_port - type: cloudify.openstack.server_connected_to_port target: wan_port + - type: cloudify.openstack.server_connected_to_port + target: public_port - type: cloudify.relationships.depends_on target: image + - type: cloudify.relationships.depends_on + target: cloud_config capabilities: diff --git a/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml b/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml index a97df3e..2637425 100755 --- a/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml +++ b/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml @@ -11,7 +11,8 @@ inputs: external_network_name: description: Openstack tenant external network name. - default: ext-net + # default: ext-net #MEMSET + default: GATEWAY_NET resource_prefix: description: > @@ -66,6 +67,9 @@ inputs: - port_range_min: 1 port_range_max: 65535 protocol: udp + - port_range_min: null + port_range_max: null + protocol: icmp dsl_definitions: @@ -193,6 +197,7 @@ node_templates: cidr: { get_input: wan_subnet_cidr } dns_nameservers: { get_input: nameservers } allocation_pools: { get_input: wan_subnet_allocation_pools } + gateway_ip: null relationships: - type: cloudify.relationships.contained_in target: wan_network @@ -211,6 +216,7 @@ node_templates: cidr: { get_input: lan_subnet_cidr } dns_nameservers: { get_input: nameservers } allocation_pools: { get_input: lan_subnet_allocation_pools } + gateway_ip: null relationships: - type: cloudify.relationships.contained_in target: lan_network diff --git a/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml b/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml index 2929e8e..2fb2853 100755 --- a/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml +++ b/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml @@ -21,11 +21,13 @@ inputs: flavor_id: type: string - default: 5aaa5054-f7a4-4bbe-8b47-69da2308ecb2 + # default: 5aaa5054-f7a4-4bbe-8b47-69da2308ecb2 + default: 3 image_id: type: string - default: 20acb407-2a20-405e-9e19-360c0a705368 + # default: 20acb407-2a20-405e-9e19-360c0a705368 + default: 84c8bc76-af89-4005-b068-b6f5b4550e23 vnf_vm_name: type: string diff --git a/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml b/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml index b42fc7a..16c4bd5 100755 --- a/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml +++ b/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml @@ -20,11 +20,14 @@ inputs: flavor_id: type: string - default: 6e2d4276-0390-4a24-b6ab-40f388edcc87 + # default: 6e2d4276-0390-4a24-b6ab-40f388edcc87 + default: 3 image_id: type: string - default: ee6a6582-1351-4f8b-b132-a90b7db88171 + # default: ee6a6582-1351-4f8b-b132-a90b7db88171 + # default: d732f334-28d8-4351-b64f-96375314c4be + default: 1d6340df-2f14-41e6-ab27-bbd35e818fdf vnf_vm_name: type: string @@ -153,22 +156,19 @@ node_templates: properties: resource_config: users: - - name: { get_secret: httpd_username } + - name: ubuntu + shell: /bin/bash + sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh-authorized-keys: - { get_attribute: [ keypair, public_key_export ] } write_files: - - path: - concat: - - "/home/" - - { get_secret: httpd_username } - - "/index.html" + - path: "/home/ubuntu/index.html" permissions: 0644 - owner: - concat: - - { get_secret: httpd_username } - - ":" - - { get_secret: httpd_username } + owner: ubuntu:ubuntu content: { get_secret: httpd_website } + runcmd: + - ifconfig ens4 up + - dhclient ens4 relationships: - type: cloudify.relationships.depends_on target: keypair @@ -190,8 +190,9 @@ node_templates: - { get_input: resource_prefix } - "_httpd_vm" - { get_input: resource_suffix } - image: { get_property: [ image, resource_id ] } + image: { get_input: image_id } flavor: { get_input: flavor_id } + key_name: '' userdata: { get_attribute: [ cloud_config, cloud_config ] } relationships: - type: cloudify.openstack.server_connected_to_port diff --git a/openstack_commercial_case/service/Resources/templates/ltm_config.txt b/openstack_commercial_case/service/Resources/templates/ltm_config.txt index 3361f44..79f484b 100755 --- a/openstack_commercial_case/service/Resources/templates/ltm_config.txt +++ b/openstack_commercial_case/service/Resources/templates/ltm_config.txt @@ -1,6 +1,6 @@ -create ltm node app-node-1 address {{APP_NODE_1_IP}} -create ltm pool sg-pool -modify ltm pool sg-pool members add { app-node-1:{{APP_NODE_1_PORT}} } -modify ltm pool sg-pool monitor http -create ltm virtual sg-virtual pool sg-pool destination {{DESTINATION_IP}}:{{DESTINATION_PORT}} mask 255.255.255.255 source-address-translation { type automap } -quit \ No newline at end of file +tmsh create ltm node app-node-1 address {{APP_NODE_1_IP}} +tmsh create ltm pool sg-pool +tmsh modify ltm pool sg-pool members add { app-node-1:{{APP_NODE_1_PORT}} } +tmsh modify ltm pool sg-pool monitor http +tmsh create ltm virtual sg-virtual pool sg-pool destination {{DESTINATION_IP}}:{{DESTINATION_PORT}} mask 255.255.255.255 source-address-translation { type automap } +tmsh quit diff --git a/openstack_commercial_case/service/Resources/templates/ltm_config_stop.txt b/openstack_commercial_case/service/Resources/templates/ltm_config_stop.txt index 1118749..c8cafa7 100755 --- a/openstack_commercial_case/service/Resources/templates/ltm_config_stop.txt +++ b/openstack_commercial_case/service/Resources/templates/ltm_config_stop.txt @@ -1,4 +1,4 @@ -delete ltm virtual sg-virtual -delete ltm pool sg-pool -delete ltm node app-node-1 -quit +tmsh delete ltm virtual sg-virtual +tmsh delete ltm pool sg-pool +tmsh delete ltm node app-node-1 +tmsh quit diff --git a/openstack_commercial_case_e2e/Resources/bigip.zip b/openstack_commercial_case_e2e/Resources/bigip.zip index 703c5f2029cc312bc89c66c6cb51e793de068414..47d97397aac1f6a09bb2005ddcbd993f6c8e17d2 100755 GIT binary patch delta 3636 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 delta 3611 zcmZvfXHZky7Jvg%A~l5GL3)o!1f)psL4E|Z_`v(-z3aTU&#alV=d5qM!dvJ!&VSR?CJyxcqhanx z@#=@$fnxDLM}oKb4X3bsZ8F{o+W~I_&LaGCaLTTuE7z3sAQgoE(Sdm3=ExkwB*>z+ zKt*6jN;N9xHFLADZy&H+3=Pa;Y0vv0`jn-VI^e0_Yu8fY0Gwou|5h!QkX}jRZECS1 zB6i@xo5@M$*#4^RVQs2GP7!|_@O8SDSf#M5JgZZ@>rw8YwiL1?W@-&%q22R>MUBNH|ywL%|Aj(kvJw}h}fxC{dorwF0n=}poc`_ z#}=(sRBx4UM|Og063x{GInh~`C3<3f zYgvO@juV2h4Ek?FC&(oNC%uLnotow?Lb?J!iei$oni{i^!x2WT+=xMG4CMgnDQ~ai zG>hg-4(*zP+;&k%FtVF0lpx>66X0ua8Viwj6j9pbT1SU%B0E(a&?h%e;Q$rcJ^ zC)_nNkm{atTlEfc3z>VC+q75u95R=YAdGqur8^(|J_8#!AhwZ}#}nG*wf%-cdV;ixE}=>RA=>=>TIyy$%0>{z=Hdn^tKM-MHU>s7om#I zl|A1?#y8v%T08WC4?FVK_;SH!tG7-MNf}k`nVW1_%T{9Xrk3IP(PnH(G^8nP-uVml znj+LhJoJ*5Y6-jXw$OF^fgfJH(=rPJ&jvZHT-yT4NRz>%qM65{6yhOe0|S<#1XJK( z9nkSFs}tk9-T7D84V&rfj|f8c5vWr?Nk-O6e_7XEPQ`h_ynMy|utbre+a(@+2J*M^ zwr*%MMG#>m#o&Q29(etM4vDl`@X=E8E_d#igCg5o`Hr+e!!hdX$VA~GG5^-YP$7jB zqtNTkvQZ8J+lwbwYr)9+7ljm6`i{3?CnIC7?U|<=gVdDMP~D?9b|LJIBB+KdzI(&! zp=4%I4%(tWwEf>Z9go$==2rTZK!cuj)=Y;yT9w%p8MPrV6I}(75DyqVREto!O6cKe z$R0}Mp#xd+<^*>}vQ~c+Dph}se^BBn@CB;=RWQ56h?}nPooPLcx4|=0+z;((C93K0 z27_Jbbw=DUGtlRg4&B~W_=(a8>(Xm`xvIlXx${8CyTSMnxdFES2J*@r2kw?{wen00 zodt~)w`3T*^VuDkD#^PrFN|w9yT)LTEB-v<=IA}*?xjufNfU&9FHU|-{S7wgU5{Mu z{aAe0veO%^X5O&ecTex2M{=~U-A)gg{TF*$oKNb3BJGmHAy%u7(;u~UCu4nGe(U)X z`#I%W7xX);!x$OwG~l2GT$JW3gKjFhTD_tsLfp>PqUOQ7p_0xWsKoD$1o7}m!;&!H zk?8hPb-ksN^O;HUt`$sKCV=qprGunUM?_Vk1+hsI}vn~ z>`cM?-K_JI+!$_TRP}k<^&cHk_;hl%@PqpB<)c(vKWL`FkDe%F!qX7=7Lr5cG)B#A z{A9m&LXf0Xhqp#0G)``;PTO>?w;7sX+oB{tH$b{d);N;<3`Mz+TR^C3;2xkWPPY^)K7**P}&Xc{jZ2K;0$55^y4P6O@T?%Q|mC8i|}mAcjVGP~pg1&~{x zOK_7V73$h7s5!Noc?aW@AQfO`aS)r;*Jl|MZq`&njr*YQdgF3Avs{`u*5u>-fla`$ z?26pvT)b_TL>jrStoJZhDQs4-e&%KT8m^m@Ezu4suReqS_@XX|$npL7-W+OZNb~sn zhxnMnG;$`Nw~ry#jzR|1vzD=HHoggQa{UF)4az_PiWmjX?Y-6duP6YTn$#D3sUzz> zrCr$z4PAx=0NuvGfi5SdM|YA+^ZErL0x9n5Um>Bm_yz!6W}oEWGGe`WzYOuevt`M^ zP=A;EKAtW-QURd>JYEPV7i547#eZmqi(KF@+5(Kr&A8a95&-}rm$VQ{GB6}C^06vK z2Lz;fq||Mr(!EF*h)<^YY!$a$OrrMaFI`Q&9pnsy=+rP(M9AZxhQwmRYNfOs{o4CX zOUC@YWNKa#)OEH#y*U{FPaW_AcqGR5BgzZcMiGs1bRRid4MBYS6RvC#-KRM7;frJ0C*HEQ1T}crKgpG^&@4omz)FUi?0rZ805~&R zpHduU=tF-Ugj+MWQ1Vsrf=|J9XgE}ezXD7|7o$^Gwx&u=D{+L`7~uXKE2^TFw}9OU zWN${BtQ0kRpy)I@C29<|G3pU$u+e>(ZNh%+7N=J*^{5t#O=_dv-*7iEGWM9YxP2NJ z^De+Jp(tLbtEgHdi$NqV-?l|uQZg-l-4La|k}0q<93rzAgsFqxcw+Y4(=%t%xyGuZ zhth+7%wnUvOQtTjFu#BD7~h3u_vrD2Q{HZ%+m0Tzlonw~WzmMm&^=E#+yWawi~Pa)E*57>;i?V-|Hg)bdBVeeR_%>tU%F)iU|i>CXxhGN?n;pHxP zBPP0WIZ44jIAW;$6J&BJolY&E;jr*2vzyl~slF3Ts2^-3g}ZjFc4?!@Ua_)2nx;*m zG9PkNNm+uh!PllxVR0R0lMguU+&~?YoR6#;|Jjg1CAF!F96gDa#o+ri!$x93szviK z99*}D`9`46LGS|v^>{vMb$aP-_9lcHYAhR~)nqns;Es@2SUcRGbgm4bCkT{h{p=ucm%aJ07P zB~NDZ<<7`ZV%!t4&WGo5Q|Zc|9wCr)ln& z_ru3mx(VB1?*#ZM=pR|gAyC(SAf=)f4_OO`66JOmzZCa%#6xtm>oj(bUd?6a()RAm z#AjvI9)M1y2oCKL5ltTcsmj?7$4&zpWrTaGcql|7fqS$E{_6hqfvGVGZ8#Vz> zjUH;T4Rsfn!>lwjICj>4#2r#e8J!)* zIBbR8FZ%j+nJYchTI8()KKm=4C{-T+Cd)}_%;vG&&{Q63s;0BDvx;V6oB0 zi#a~Y0(9FWLzCtvN-7Gs&f?t47R1}nRk%P@-;t`YGGdya8s$DJ#0T4Q?K=v0?TPN{ z6A|AATn<0v!SpbSG&=QU`66`GISW&fq0VampYEY5bpoA3jf7X zmy72j=+LbUoR^9LQ~cTk07L*5z_+Q$%L5bWxqjilYv!Lg`WJrTod1WDGyIMJ?wNn$ z-!5=rv=;-2?B6$DAUwas_S=B}CxQoFbf%0Zp$DOZ85z*m7`cd@uA+aEv!bmTAw0j& mYyg1&;`w`BHd{-DzC$VaTdAxZrmEuo=q1K$WX^P#ng0T>Ms*PY diff --git a/openstack_commercial_case_e2e/Resources/common.zip b/openstack_commercial_case_e2e/Resources/common.zip index b56da061476bc4386887cdca7aef82f05f902e6c..c00e42d8de6d4601fa2a10763e2a07aeabb32e11 100755 GIT binary patch delta 2772 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 a1CwwILIzr#Ju+j`leh~a2BZoA0002A#Wqy{ delta 2717 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 OlS>jJ25b)i0001gWGwjr delta 2788 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 TyosY~aX=$U6{sPKzX<#RVm5^D delta 1397 zcmaE>a!+N$5;oq?KK_0W{?G5pW@ccpp1hGw+O6-hfk5r~@SZI~Im(k*RaA~d@6=hd zC4_^ELvc!}kowkwoX6hYKdaL2EQ!)jwslF@tgLZ$7Q-w^HR@G z7GhVbZ$G-T`EqgY-WP%_GqN7OJnFrp!dQFrnYm;l_2tl~B(1Ck;A%n~vSkiQc2FH(#v&`Jqp|lQ&t^hrD^Mk@T+U zG#e-HA+G0vANb^&F6plPv7lwoYwc#n&{sSc4W~(`ZM5(HS#*8n4WY$LGg!*MCu|lv z%k_aPAljgsJFfYmSRq^1%k|Cyho0y8cYo@A$@P5Z*QNj8?Vq#nsUQ38g7RlS6I9M# zy21}S;*!jg-RMKtb?84k7X}VW@jIR2;X1u}Z+`IatbZ}$hxr_e!k=HxftX8vY zN&5XPU+l@G^Y(EKWA(I%t;d&bXghDTK65!&)Xacn<;(UQg5QdhzLhgxs-JtM(fR56 zm2;T1CcTt+^2)<@Gf#J7Znu@?yGIsfcg(f#^@%>U{T_OlXLYMc-E3#^kUJY+XsH)0 z^!cE7%k%pRqa8~_PxoHA-KZU}X;zSRQRw*0eT9{eGX9^e2)eQNuR&6g#Ec}{<;6kC zA##gjbMCQxeaI@padD%f^Ep^i$y!Q*9 zJx8bh^t8wCd=vJ+Q%L%#R?(OL>}u%cTy^OdW%<5E`+h#VD*DlD{pDGn7yI5klQqj) zGVPx3k0s1Irt)oCS{1qX^Mo*qFHO2R6|&9-Mv}J|X1~lc*q`R;ay1+9?0v8OiCH#hL$|pje_V*!`%5?Tv^V=+Ki25+zgCNH z%0_1oj!OOadyjeg2}NB>2=I7tZBu3f`vWJ7m$p34G1E%pR5EKs+^md4JE#ZMhQu^3M^D!>?SoEY#~R7G-MrZ;~Ohu$g^gY<7jVyKMCQ_tOfyg)dDu znj>~STQ@O>vu)zzW81m)1M-jmuyQ*4 zHsjG%&0h=w-pni_K;LjMfQpfhnbPmF6?)Z~1AnaO^9r_c&3RemG3+kM@?Igd_`<+oun;hMaGM`ZGPem|xZ5L0fltbiZW zJP1>VM`H3~fl#LR++Z0Upsbmofda_c@F-zqV9;Vv0XiN86o7al4^XiV&=?uxEtC6z l_FQ2M@MdJPXTafS6wNaxGYZ*H))L^K>@Ot2rpyO26ac)Jb<6+& diff --git a/openstack_commercial_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml b/openstack_commercial_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml index 9117bb6..6163dd0 100755 --- a/openstack_commercial_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml +++ b/openstack_commercial_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml @@ -1,8 +1,8 @@ tosca_definitions_version: cloudify_dsl_1_3 description: > - Master blueprint, which provisions all atomic components, configures them and - chains together. In partilucar: + This is the master blueprint for the Cloudify VNF example. It provisions all the atomic components, + configures, and then chains them together. In partilucar: * prepares the environment, including networks, subnets, security groups etc. * provisions F5 BIG-IP VM * provisions Fortigate VM @@ -12,20 +12,17 @@ description: > * configures HTTPD * creates a service chain to allow traffic forwarding -# In this section, we import the basic node types, which will be later used in -# node_templates section to define particular elements of the chain and -# relationships between them. We import cloudify-utilities-plugin as well, -# because DeploymentProxy mechanism is going to be used and it is a part of this -# plugin. +# In this section, we import the basic node types, which will be later used in the +# node_templates section to define particular elements of the chain and the +# relationships between them. This section also imports the cloudify-utilities-plugin +# to allow using the Deployment Proxy mechanism. + imports: - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml - plugin:cloudify-utilities-plugin -# In inputs section, there are names of the particular blueprints and -# deployments, which later will be used in DeploymentProxy nodes, -# which are responsible for uploading these blueprints to Cloudify Manager, -# creating deployments out of them and finally installing them in desired order -# defined by relationships. +# The inputs section includes the names of the particular blueprints and +# deployments which this blueprint will leverage. inputs: common_prov_name: description: Name of common resources provisioning blueprint/deployment @@ -59,15 +56,14 @@ inputs: description: Name of service chain Provisioning blueprint/deployment default: NS-LB-Firewall-F5-Fortigate-HTTPD -# In node_templates section, there are nodes defined, which during the install -# workflow upload the blueprints defined under resource_config["blueprint"] -# property, create the deployments out of them and installs them in the order -# defined by relationships. +# In the node_templates section, we define the nodes that will be instanciated. +# We use DeploymentProxy nodes to deploy other blueprints representing the example +# building blocks. node_templates: # Common: # This blueprint is responsible for creating all of the common resources, - # which later are being used in other blueprints. Especially: resource_group, + # which are later used in other blueprints. Especially: router, # networks, subnets and security groups. # DeploymentProxy is being used for the blueprint uploading and the # deployment creation. @@ -88,16 +84,14 @@ node_templates: ### PROVISIONING ### # F5 Provisioning: - # This blueprint is responsible for provisioning the F5 BIG-IP VM in Azure - # infrastructure, including necessary storage account and network - # interfaces. - # DeploymentProxy is being used for the blueprint uploading and the + # This blueprint is responsible for provisioning the F5 BIG-IP VM in OpenStack + # infrastructure, including the necessary network interfaces. + # DeploymentProxy is used for the blueprint uploading and the # deployment creation. - # In relationships section, there's a "depends_on" relationship defined, - # which targets the "common_prov" node. It means, that during install - # workflow, "f5_prov" node will be instantiated right after "common_prov" - # node. Thanks to that fact, "f5_prov" node will be able to create network - # interfaces in networks created by "common_prov" blueprint. + # A "depends_on" relationship which targets the "common_prov" node is defined. + # It means, that during the install workflow, "f5_prov" node will be instantiated + # after "common_prov" node will. That will alllow the "f5_prov" node to create network + # interfaces in the networks created by "common_prov" blueprint. f5_prov: type: cloudify.nodes.DeploymentProxy properties: @@ -113,14 +107,14 @@ node_templates: target: common_prov # FortiGate Provisioning: - # This blueprint is responsible for provisioning the FortiGate VM in Azure - # infrastructure, including necessary storage account, network interfaces - # and cloud_init (used for license delivery). - # DeploymentProxy is being used for the blueprint uploading and the + # This blueprint is responsible for provisioning the FortiGate VM in OpenStack + # infrastructure, including the necessary network interfaces. + # DeploymentProxy is used for the blueprint uploading and the # deployment creation. - # In relationships section, there's a "depends_on" relationship defined, - # which targets the "common_prov" node. It results in the same behaviour - # like in "f5_prov" node. + # A "depends_on" relationship which targets the "common_prov" node is defined. + # It means, that during the install workflow, "fg_prov" node will be instantiated + # after "common_prov" node will. That will alllow the "fg_prov" node to create network + # interfaces in the networks created by "common_prov" blueprint. fg_prov: type: cloudify.nodes.DeploymentProxy properties: @@ -136,14 +130,14 @@ node_templates: target: common_prov # HTTPD Provisioning: - # This blueprint is responsible for provisioning the HTTPD VM in Azure - # infrastructure, including necessary storage account, network interfaces - # and cloud_init (used for website uploading). - # DeploymentProxy is being used for the blueprint uploading and the + # This blueprint is responsible for provisioning the HTTPD VM in OpenStack + # infrastructure, including the necessary network interfaces. + # DeploymentProxy is used for the blueprint uploading and the # deployment creation. - # In relationships section, there's a "depends_on" relationship defined, - # which targets the "common_prov" node. It results in the same behaviour - # like in "f5_prov" and "fg_prov" nodes. + # A "depends_on" relationship which targets the "common_prov" node is defined. + # It means, that during the install workflow, "httpd_prov" node will be instantiated + # after "common_prov" node will. That will alllow the "httpd_prov" node to create network + # interfaces in the networks created by "common_prov" blueprint. httpd_prov: type: cloudify.nodes.DeploymentProxy properties: @@ -167,7 +161,7 @@ node_templates: # deployment creation. # In relationships section, there's a "depends_on" relationship defined, # which targets the "f5_prov" node. It means, that during install - # workflow, "f5_conf" node will be instantiated right after "f5_prov". + # workflow, "f5_conf" node will be instantiated after "f5_prov". # It prevents the situation, when Cloudify Manager starts to configure # F5 BIG-IP VM before it gets instantiated by "f5_prov" node. f5_conf: @@ -191,7 +185,7 @@ node_templates: # deployment creation. # In relationships section, there's a "depends_on" relationship defined, # which targets the "fg_prov" node. It means, that during install - # workflow, "fg_conf" node will be instantiated right after "fg_prov". + # workflow, "fg_conf" node will be instantiated after "fg_prov". # It prevents the situation, when Cloudify Manager starts to configure # FortiGate VM before it gets instantiated by "fg_prov" node. fg_conf: @@ -215,7 +209,7 @@ node_templates: # deployment creation. # In relationships section, there's a "depends_on" relationship defined, # which targets the "httpd_prov" node. It means, that during install - # workflow, "httpd_conf" node will be instantiated right after "httpd_prov". + # workflow, "httpd_conf" node will be instantiated after "httpd_prov". # It prevents the situation, when Cloudify Manager starts to configure # HTTPD VM before it gets instantiated by "httpd_prov" node. httpd_conf: @@ -240,11 +234,10 @@ node_templates: # BIG-IP VM. # DeploymentProxy is being used for the blueprint uploading and the # deployment creation. - # In relationships section, there's a couple of the "depends_on" + # In the relationships section, there are several "depends_on" # relationships defined. As a result, Cloudify Manager will be waiting - # with service chain creation until all of the particular VNFs, which are - # going to be a part of this chain, become provisioned & configured - # properly. + # with the service chain creation until all of the particular VNFs, which are + # going to be a part of this chain, are properly provisioned & configured service_prov: type: cloudify.nodes.DeploymentProxy properties: @@ -272,9 +265,9 @@ node_templates: # - type: cloudify.relationships.depends_on # target: httpd_conf -# In outputs section we can expose some values, which will appear in GUI after +# In the outputs section we can expose values, which will appear in GUI after # the successful deployment installation. Here, a webserver endpoint is being -# printed. "get_attribute" function gets this value from "service_prov" +# printed. "get_attribute" function gets this value from the "service_prov" # deployment outputs. Once the "install" workflow is finished, user can use this # endpoint to check if the service is working fine. # outputs: From fdb8fbfb2403ae65f6c7b7ee5159c1daca5faec5 Mon Sep 17 00:00:00 2001 From: jrzeszutek Date: Thu, 7 Mar 2019 16:07:19 +0100 Subject: [PATCH 2/6] openstack commercial use case: fully tested & working (including F5 BIG-IP) --- .../Resources/templates/check_mcpd_status.txt | 1 + .../bigip/VNFM-F5-Conf.yaml | 13 +++++++++++++ .../bigip/VNFM-F5-Prov-Openstack-vm.yaml | 9 +++------ ...FM-Networking-Prov-Openstack-networks.yaml | 1 - .../VNFM-Fortigate-Prov-Openstack-vm.yaml | 2 -- .../httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml | 3 --- .../Resources/bigip.zip | Bin 5643 -> 5888 bytes 7 files changed, 17 insertions(+), 12 deletions(-) create mode 100755 openstack_commercial_case/bigip/Resources/templates/check_mcpd_status.txt diff --git a/openstack_commercial_case/bigip/Resources/templates/check_mcpd_status.txt b/openstack_commercial_case/bigip/Resources/templates/check_mcpd_status.txt new file mode 100755 index 0000000..5424cce --- /dev/null +++ b/openstack_commercial_case/bigip/Resources/templates/check_mcpd_status.txt @@ -0,0 +1 @@ +sh -c '/config/check_mcpd_status.sh' diff --git a/openstack_commercial_case/bigip/VNFM-F5-Conf.yaml b/openstack_commercial_case/bigip/VNFM-F5-Conf.yaml index a1c2c97..032f506 100755 --- a/openstack_commercial_case/bigip/VNFM-F5-Conf.yaml +++ b/openstack_commercial_case/bigip/VNFM-F5-Conf.yaml @@ -27,6 +27,16 @@ dsl_definitions: node_templates: + check_mcpd_status: + type: cloudify.terminal.raw + interfaces: + cloudify.interfaces.lifecycle: + start: + inputs: + terminal_auth: *terminal_auth + calls: + - template: Resources/templates/check_mcpd_status.txt + license: type: cloudify.terminal.raw interfaces: @@ -46,6 +56,9 @@ node_templates: responses: - question: 'Revoking the license will return this BIG-IP to an unlicensed state. It will stop processing traffic. Are you sure? Y/N:' answer: 'Y' + relationships: + - type: cloudify.relationships.depends_on + target: check_mcpd_status vlan_configuration: type: cloudify.terminal.raw diff --git a/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml b/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml index 9a056b0..f9dbacc 100755 --- a/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml +++ b/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml @@ -24,13 +24,11 @@ inputs: flavor_id: type: string - # default: f7cfaaa8-e2db-4f9b-a65b-6a407f340960 #MEMSET default: 8f68d4e5-4281-48c0-ad43-a8ac58d635f0 image_id: type: string default: 7f5477bd-c2a8-4608-82ae-0ca2a9bf5254 - # default: 8577e342-ff99-4737-8aa3-2a8178eaa891 #MEMSET vnf_vm_name: type: string @@ -165,20 +163,19 @@ node_templates: owner: root:root content: | #!/bin/sh - echo 'preOnboard: Starting MCP status check' >> /var/log/cloud-init.log + echo preOnboard: Starting MCP status check checks=0 while [ $checks -lt 120 ]; do echo preOnboard: checking mcpd if tmsh -a show sys mcp-state field-fmt | grep -q running; then - echo preOnboard: mcpd ready >> /var/log/cloud-init.log + echo preOnboard: mcpd ready + sleep 10 break fi echo preOnboard: mcpd not ready yet let checks=checks+1 sleep 10 done - runcmd: - - nohup sh -c '/config/check_mcpd_status.sh' vm: type: cloudify.openstack.nodes.Server diff --git a/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml b/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml index 2637425..9346590 100755 --- a/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml +++ b/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml @@ -11,7 +11,6 @@ inputs: external_network_name: description: Openstack tenant external network name. - # default: ext-net #MEMSET default: GATEWAY_NET resource_prefix: diff --git a/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml b/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml index 2fb2853..a4990e9 100755 --- a/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml +++ b/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml @@ -21,12 +21,10 @@ inputs: flavor_id: type: string - # default: 5aaa5054-f7a4-4bbe-8b47-69da2308ecb2 default: 3 image_id: type: string - # default: 20acb407-2a20-405e-9e19-360c0a705368 default: 84c8bc76-af89-4005-b068-b6f5b4550e23 vnf_vm_name: diff --git a/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml b/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml index 16c4bd5..0b2f04d 100755 --- a/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml +++ b/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml @@ -20,13 +20,10 @@ inputs: flavor_id: type: string - # default: 6e2d4276-0390-4a24-b6ab-40f388edcc87 default: 3 image_id: type: string - # default: ee6a6582-1351-4f8b-b132-a90b7db88171 - # default: d732f334-28d8-4351-b64f-96375314c4be default: 1d6340df-2f14-41e6-ab27-bbd35e818fdf vnf_vm_name: diff --git a/openstack_commercial_case_e2e/Resources/bigip.zip b/openstack_commercial_case_e2e/Resources/bigip.zip index 47d97397aac1f6a09bb2005ddcbd993f6c8e17d2..a510506763f21afd020b027df994d250af6e4859 100755 GIT binary patch delta 2958 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 b&58Kqmwuu(8U)_&#(H~;`H$bR%687)?S delta 2752 zcmZXWcRbXOAIHzQJ0trzd(<6gB%I9&MfN!BjN=r^IHT<1?3JvKjN+6TSs7Revj|t@%=r1@An_C$LsNW{r`MLNZ*#Kg@bAG+${iJuq4e_BU3;RtU%M? zZCC#lOr&N$?PFn*oga_qqXB_N7yxfN0n#Vy8Se=hSlEaSE`pmr{UY5_2GlH)!fRe? z6rU;d$h&#NKI0x zH1st(3l-Q9o3zT~!3m{iC*ExRkg&O%{N z(jW9VKhodbc*CjLk&Zpv#;D>ifJMYydC$F z(BPCqyS5YD5_g%~NAdd3wT*Vsf!s{VL7Mku9;`BTndfc7m?5S78CDZBi#9p7>Ad>z zWwonSZTpjy!2Ol``G5#%h`AYTv|5ge{4uE5YsIBzya+n0!ivx2oyS-WB^aqJ2w? z45s|hBdBTsagEb*^N}@1cb$7LkE#1ilC*Oo<)k$-$)x7HfU*~rNaMC?#Crv6?PqHH zK9B1Nb#eB<&l${g^UY&s4M{E>KjvBLT)mo3AW}f&q?5XcaW?<7t$4eSnIR1=3iNL74T?Q2l=T4yBzbl* z%Iu@4i6`+gbk4mz;@9wDdh?f3)}9OPx84xfL&60|lB;5q^fO;)`jzH>kg&5T|L}sp zHy6c`l@CIu6&aJjf|Z;{uMNO=<2u=7Vo~w*uwuPsxR8(s?4S-B-Gw)@_mMSeY=je zG*5vI0vEyVnn`FHGqCi?ij1}lIb9nMFOh}zBdrQEW$!T1YqmoH=RQ&GYsNE8$Uxkvk zqi&?iBBE@VIr@lS{49@?Vo7`W&Ynv6La;Mif#H+BMuYVdi6Y6Ne!KnzB-G^{9d_J3 zk6rs}PD%z?u&j*H$V8O!mUdsad#Jh~nS5&W&ax@lNj+q;!7YpYDuX1O|6%7^V9bm9 z-~@d+jXoFM#Q`Z56>{;EUlxGGTr*5lG8S9<;-CH@nD%qBX&hRek1Z))mM48&N0rC8 z@5j`L=(spWFxB@SnY_5O7o6l4!+#~sS3ci-du{I#MKEVt{mxW~STo#fAjz@DEyY>+ zk@WSYWrPWFp5BpZCiIqW)hc!M3?k03hL#Cv5#kfeB9=2H11u>$`=`C9$ zhB_I254B4^^O?rxUu%SLdtV&8Cz~M5z7HH+q<&sH4jSGRsTDaE^6T7{Kiuqml_-u( zxRZs=)Dh#BR)2}^-hoDqZnk#!3S`Q2T)a?v2gjCb0LRz)PF6YHZ+j4TEOP^ zuagy)C6@8CC$gjmR-YS0(|<(-KwkA_y9cN(++dD*AD?XVDc%RQN>wcTWX+k-u(lq4 za9d-8%_-Fj%08Kb-$D$1YY1Q)N!YNnuH0r`47a|DpJi=I6se2hZhDq6VbGaXYP`jV=HF38mi>7VRMYT_V-Y^jCtPti;kSoYj+($P zBJZ74Y@QrT>h_GG+ze!yGsv?^;f)Gj>;7SPn~>8B3js|FA4fyHG)6ugt%qYMdq1vi zlrv*b-snL{TxC)>8bsI`3vF)5`|d>t>rj!^r8DT##!6NnTb=ROD%hEM_i@x$HCNuc z7ZM1ewxh!+k&Z9FQ5~d;O$}5{=9`8v_CXyjxaA$`{rODZ7G|7Hj1srmHS#Xv5_Tu%O0^ZS{_J6J>p%F-ae)ztZqGRS&OdFD0Yl`AxJMPFZ$V! zZA;y^k(-3L(G+0~fEc7#@dVWI^06nu0S>CXD%~*MQPLVKS=2g9b+EN*&UkkarRm$y zd5ONAlxJxH$yYYz?K(AU;~IIYU$*t6B&UNYRKII7^Cik4xaYVd>Oz)th2qRp4L93N zi>K@n!Yn^O#n7a>&)aW-E_UCZE1ZzoDILYd{d}izT-p{?K~O~c5kt0>q`slE#)A3W zG#262Y}u;|dzs!BnLYJA0_VI&O@$6SSX(SA-D_jbav5^Er?t-f9qO2J!@ULi z=DQGrg%=PK_bzkV8k0rBUJI_Yh z)x-{Hy8Vp$C#e2W>sO&a=zAxq%nYfh&x8Ij2L$>v;m{m9Vn;aA-|QbPG`jV#F2mpM z@0kY(!}x$!4naT=!U1@}PC;H}t{IFC0pT!ps$YO9hX7CkVgC~V`!H>4F9=}9!4JTp zEPyMg3AHiwuRVlv0n3~+!v8xKK_K{V;QjZ6f6EdSP~t*D{0d9%WBY;coPt9CkH>%a j(Lezg8my1%)Zhl3xj13q-w*|X7=Ay276iJ>_Q(APsygxB From 4b036288b3a4ac26cddbe08fba86a0c6f1023221 Mon Sep 17 00:00:00 2001 From: jrzeszutek Date: Fri, 8 Mar 2019 11:30:26 +0100 Subject: [PATCH 3/6] sync with blueprint-examples repo + applied relevant changes in Azure E2E example --- azure_case/README.md | 75 +++-- azure_case/bigip/README.md | 90 +++--- .../blueprints/existing_networks.yaml | 2 +- .../bigip/Resources/blueprints/nics.yaml | 0 .../Resources/templates/install_license.txt | 0 .../Resources/templates/revoke_license.txt | 0 .../bigip/Resources/templates/vlan_config.txt | 0 .../templates/vlan_config_delete.txt | 0 .../{VNFM-F5-Conf.yaml => application.yaml} | 4 +- ...Prov-Azure-vm.yaml => infrastructure.yaml} | 17 +- azure_case/common/README.md | 97 ------- azure_case/fortigate/README.md | 98 +++---- .../templates/fortigate-baseline.txt | 0 ...M-Fortigate-Conf.yaml => application.yaml} | 2 +- ...Prov-Azure-vm.yaml => infrastructure.yaml} | 2 +- azure_case/httpd/README.md | 81 +++--- ...{VNFM-HTTPD-Conf.yaml => application.yaml} | 2 +- ...Prov-Azure-vm.yaml => infrastructure.yaml} | 2 +- azure_case/network-topology/README.md | 31 ++ .../infrastructure.yaml} | 19 +- azure_case/service/README.md | 37 ++- .../templates/fortigate-portforward-start.txt | 0 .../templates/fortigate-portforward-stop.txt | 0 .../Resources/templates/ltm_config.txt | 0 .../Resources/templates/ltm_config_stop.txt | 0 ...l-F5-Fortigate-HTTPD.yaml => service.yaml} | 2 +- azure_case_e2e/README.md | 10 +- azure_case_e2e/Resources/service.zip | Bin 4176 -> 4167 bytes .../VNFM-E2E-F5-Fortigate-HTTPD.yaml | 176 ------------ azure_case_e2e/e2e.yaml | 272 ++++++++++++++++++ 30 files changed, 496 insertions(+), 523 deletions(-) mode change 100644 => 100755 azure_case/bigip/Resources/blueprints/existing_networks.yaml mode change 100644 => 100755 azure_case/bigip/Resources/blueprints/nics.yaml mode change 100644 => 100755 azure_case/bigip/Resources/templates/install_license.txt mode change 100644 => 100755 azure_case/bigip/Resources/templates/revoke_license.txt mode change 100644 => 100755 azure_case/bigip/Resources/templates/vlan_config.txt mode change 100644 => 100755 azure_case/bigip/Resources/templates/vlan_config_delete.txt rename azure_case/bigip/{VNFM-F5-Conf.yaml => application.yaml} (95%) rename azure_case/bigip/{VNFM-F5-Prov-Azure-vm.yaml => infrastructure.yaml} (99%) mode change 100644 => 100755 delete mode 100755 azure_case/common/README.md mode change 100644 => 100755 azure_case/fortigate/Resources/templates/fortigate-baseline.txt rename azure_case/fortigate/{VNFM-Fortigate-Conf.yaml => application.yaml} (95%) mode change 100644 => 100755 rename azure_case/fortigate/{VNFM-Fortigate-Prov-Azure-vm.yaml => infrastructure.yaml} (99%) mode change 100644 => 100755 rename azure_case/httpd/{VNFM-HTTPD-Conf.yaml => application.yaml} (92%) rename azure_case/httpd/{VNFM-HTTPD-Prov-Azure-vm.yaml => infrastructure.yaml} (99%) create mode 100755 azure_case/network-topology/README.md rename azure_case/{common/VNFM-Networking-Prov-Azure-networks.yaml => network-topology/infrastructure.yaml} (98%) mode change 100644 => 100755 mode change 100644 => 100755 azure_case/service/Resources/templates/fortigate-portforward-start.txt mode change 100644 => 100755 azure_case/service/Resources/templates/fortigate-portforward-stop.txt mode change 100644 => 100755 azure_case/service/Resources/templates/ltm_config.txt mode change 100644 => 100755 azure_case/service/Resources/templates/ltm_config_stop.txt rename azure_case/service/{NS-LB-Firewall-F5-Fortigate-HTTPD.yaml => service.yaml} (98%) mode change 100644 => 100755 delete mode 100755 azure_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml create mode 100755 azure_case_e2e/e2e.yaml diff --git a/azure_case/README.md b/azure_case/README.md index 332b866..a92dcd6 100755 --- a/azure_case/README.md +++ b/azure_case/README.md @@ -1,55 +1,46 @@ -# Network Service - Commercial VNFs +# Commercial VNF Use Case -In this examples we demonstrate how to construct a simple network service consisting of a load balancer and a firewall. To make it a tad more interesting we will be deploying a simple web service to allow for complete user experience: +Upon completion of this example we will have a complete running network service. ![ns](https://user-images.githubusercontent.com/30900001/52050834-12889e00-2552-11e9-9a68-452e92cc7014.png) -If we break it down to how we would typically build such a service the basic steps would probably be: - -1. Provision a firewall and configure it’s network interfaces and the network settings - -2. Provision a load balancer and setup basic settings - -3. Provision a web server instance, configure it, and setup basic web content - -4. Compose the service flow by setting the load balancer to accept traffic on a certain port, direct it to the firewall, configure the firewall to allow web traffic to the web server, etc. - -This example contains blueprints implementing each of these steps. These can be easily modified for other VNFs or different infrastructure. - -Upon completion of this example we will have a complete running network service. +This series of blueprints demonstrates how to install a simple network service consisting of a load balancer and a firewall. To make it a tad more interesting we will be deploying a simple web service to allow for complete user experience. All of the examples are currently implemented only for Azure. -Note! The infrastructure used in this example is Microsoft Azure, and the demonstrated VNFs are: -* F5 BIG-IP VE (Load balancer) -* Fortigate (Firewall) -* Httpd (Web Server) +**Note!** +The infrastructure used in this example is Microsoft Azure, and the demonstrated VNFs are: + * F5 BIG-IP VE (Load balancer) + * Fortigate (Firewall) + * Httpd (Web Server) -## Cloudify Manager +## Common Prerequisites: -Before we get started, please make sure you have a Cloudify manager deployed. +* Cloudify Manager 4.5.5, for more info: [Cloudify-Getting-Started](https://cloudify.co/download/). -The cloudify manager is available in multiple formats ranging from Docker to RPM. In this tutorial we will be using the docker option and assume that it is deployed on your local computer. It can be of course deployed using any other method and on any given platform. +* These plugins should exist on your manager. (E.g. You can just run `cfy plugins bundle-upload`, which will satisfy all plugin requirements.): + * [cloudify-azure-plugin](https://github.com/cloudify-cosmo/cloudify-openstack-plugin/releases), version 2.1.1 or higher. + * [cloudify-utilities-plugin](https://github.com/cloudify-incubator/cloudify-utilities-plugin/releases), version 1.12.5 or higher. -To learn more about Cloudify manager deployment go to: [Cloudify-Getting-Started](https://cloudify.co/download/) +* These secrets should exist on your manager: + * `azure_client_id`: Service Principal appId. You can set this up via the CLI: `cfy secrets create azure_client_id -s [secret value]`. + * `azure_client_secret`: Service Principal password. You can set this up via the CLI: `cfy secrets create azure_client_secret -s [secret value]`. + * `azure_subscription_id`: Service Principal ID. You can set this up via the CLI: `cfy secrets create azure_subscription_id -s [secret value]`. + * `azure_tenant_id`: Service Principal tenant. You can set this up via the CLI: `cfy secrets create azure_tenant_id -s [secret value]`. + * `azure_location`: Specifies the supported Azure location for the resource. You can set this up via the CLI: `cfy secrets create azure_location -s [secret value]`. + * `agent_key_private`: The content of an RSA private key. (E.g. You can upload this key from a file: `cfy secrets create agent_key_private -f ~/.ssh/id_rsa`). + * `agent_key_public`: The content of an RSA public key. (E.g. You can upload this key from a file: `cfy secrets create agent_key_private -f ~/.ssh/id_rsa.pub`). -## Example overview -Creation of the whole service consists of the following steps. Each step is available as a blueprint (yaml file) in this example folder. +## Installation -1. *Environment preparation* -Create networks, a resource group, and a security group. For more details check [common/README](common/README.md) -2. *Provisioning of the VNFs* -Create the virtual machines in Azure and connect those to the proper networks. -Each VNF is created using a blueprint named ``VNFM--Prov-Azure-vm.yaml``: -* **bigip/VNFM-F5-Prov-Azure-vm.yaml** - [BIG IP Provisioning instruction](bigip/README.md##Provisioning) -* **fortigate/VNFM-Fortigate-Prov-Azure-vm.yaml** - [Fortigate Provisioning instruction](fortigate/README.md##Provisioning) -* **httpd/VNFM-HTTPD-Prov-Azure-vm.yaml** - [HTTPD Provisioning instruction](httpd/README.md##Provisioning) -3. *Configure the VNFs* -Apply basic configuration of the VNFs. This is done using blueprints named ``VNFM--Conf.yaml``: -* **bigip/VNFM-F5-Conf.yaml** (licensing and VLAN configuration) - [BIG IP Configuration instruction](bigip/README.md##Configuration) -* **fortigate/VNFM-Fortigate-Conf.yaml** (Setting firewall rules and port forwarding) - [Fortigate Configuration instruction](fortigate/README.md##Configuration) -* **httpd/VNFM-HTTPD-Conf.yaml** (Creation of Web Server) - [HTTPD Configuration instruction](httpd/README.md##Configuration) -4. *Service chaining* -The last step creates a service chain of connected network services (Load Balancer, Firewall and Web Server). In this case service chaining consists of port forwarding rule on Fortigate and load balancing rule on BIG IP in order to pass traffic through. -Use the ``service/NS-LB-Firewall-F5-Fortigate-HTTPD.yaml`` - [Service creation instruction](service/README.md) +The installation is broken into a few basic steps. Go to the relevant README and progress through these steps in the correct order. -Once all steps had been performed, you should be able to access the web page displayed by the web service by accessing the ip of the load balancer (This IP will be the output of the service deployment flow, and will be titled web_server). +1. [Prepare the environment](network-topology/README.md##Installation): Create networks, a resource group, and a security group. +1. Provisioning of the VNFs: + 1. [Provision the load balancer](bigip/README.md##Provisioning) and setup basic settings. + 1. [Provision the firewall](fortigate/README.md##Provisioning) and configure its network interfaces and the network settings. + 1. [Provision the web server](httpd/README.md##Provisioning) instance, configure it, and setup basic web content. +1. Compose the service flow by: + 1. [Configuration the load balancer](bigip/README.md##Configuration) and setup basic settings. + 1. [Configuration the firewall](fortigate/README.md##Configuration) and configure its network interfaces and the network settings. + 1. [Configuration the web server](httpd/README.md##Configuration) instance, configure it, and setup basic web content. +1. [Create service](service/README.md) The last step creates a service chain of connected network services (Load Balancer, Firewall and Web Server). In this case service chaining consists of port forwarding rule on Fortigate and load balancing rule on BIG IP in order to pass traffic through. diff --git a/azure_case/bigip/README.md b/azure_case/bigip/README.md index a5e9c68..3bfe063 100755 --- a/azure_case/bigip/README.md +++ b/azure_case/bigip/README.md @@ -1,82 +1,68 @@ -# F5 Big-IP on Azure +# BIG-IP Load Balancer -## Prerequisites: +This blueprint installs the BIG-IP load balancer on Azure. -### Common resource creation -Prior to any deployment You have to upload plugins, create secrets and create common environment - [instructions](../common/README.md) +### Prerequisites -### Secrets +First make sure that you have satisfied the global requirements in the [main README](../README.md). -Create the below secrets in the secret store management: -* **bigip_username** - Username for BIG IP VE, it is set during provisioning and used during configuration, "admin" is not allowed -* **bigip_password** - Password for BIG IP VE, it is set during provisioning and used during configuration. The supplied password must be between 6-72 characters long and must satisfy at least 3 of password complexity requirements from the following: Contains an uppercase character, Contains a lowercase character, Contains a numeric digit, Contains a special character. Control characters are not allowed -* **bigip_license_key** - License key for BIG IP VE, it is being applied during configuration. - -You can create those with the following cfy commands:\ -``cfy secrets create bigip_username -s ``\ -``cfy secrets create bigip_password -s ``\ -``cfy secrets create bigip_license_key -s `` +* These additional secrets should exist on your manager: + * `bigip_username`: Username for BIG IP VE. It is set during provisioning and used during configuration, "admin" is not allowed. You can set this up via the CLI: `cfy secrets create bigip_username -s [secret value]`. + * `bigip_password`: Password for BIG IP VE. It is set during provisioning and used during configuration. The supplied password must be between 6-72 characters long and must satisfy at least 3 of password complexity requirements from the following: Contains an uppercase character, Contains a lowercase character, Contains a numeric digit, Contains a special character. Control characters are not allowed. . You can set this up via the CLI: `cfy secrets create bigip_password -s [secret value]`. + * `bigip_license`: License key for BIG IP VE. It is being applied during configuration. . You can set this up via the CLI: `cfy secrets create bigip_license -s [secret value]`. ## Provisioning -VNFM-F5-Prov-Azure-vm.yaml is responsible for creation BIG-IP Virtual Machine connected to 3 networks: -* Management, -* WAN, -* Public. +* Blueprint: The `infrastructure.yaml` blueprint is responsible for creation BIG-IP Virtual Machine. This VM is connected to 3 networks: + * Management + * WAN + * Public Network's NICs are connected to security group created in network deployment. Networks and security group names are fetched from network deployment using `get_capability` intrinsic function. -### Inputs -* *virtual_machine_size* - Name of Virtual Machine Size in Azure - default: Standard_A7 -* *vm_name* - Name of Virtual Machine - default: BIGIP -* *virtual_machine_image_sku* - An instance of an offer, such as a major release of a distribution - default: 'f5-big-all-1slot-byol' -* *virtual_machine_image_publisher* - Name of the organization that created the image - default: 'f5-networks' -* *virtual_machine_image_offer* - The name of a group of related images created by a publisher - default: 'f5-big-ip-byol' -* *retry_after* - The number of seconds for each task retry interval (in the - case of iteratively checking the status of an asynchronous operation) - default: 5 -* *resource_prefix* - Prefix of every resource created at this deployment on Azure - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Azure - default: 0 -* *network_api_version* - API Version for Network - default: "2015-06-15" -* *azure_network_deployment_name* - Name of deployment responsible for creation resource group, security group and networks - - default: VNFM-Networking-Prov-Azure-networks +* Inputs: + * `virtual_machine_size`: Name of Virtual Machine Size in Azure. Default: `Standard_A7`. + * `virtual_machine_image_sku`: An instance of an offer, such as a major release of a distribution. Default: `f5-big-all-1slot-byol`. + * `virtual_machine_image_publisher`: Name of the organization that created the image. Default: `f5-networks`. + * `virtual_machine_image_offer`: The name of a group of related images created by a publisher. Default: `f5-big-ip-byol`. + * `azure_network_deployment_name`: Name of deployment responsible for creation resource group, security group and networks. Default: `VNFM-Networking-Prov-Azure-networks`. ### Installation -Resources created in Prerequisites subsection are fetched in existing_networks.yaml blueprint file using capabilities and VNFM-F5-Prov-Azure-vm.yaml is using it. - -To provision BIG-IP execute: +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: -``cfy install VNFM-F5-Prov-Azure-vm.yaml -b VNFM-F5-Prov-Azure-vm`` +```bash +cfy install infrastructure.yaml -b \ + VNFM-F5-Prov-Azure-vm +``` -### Uninstalling +###Uninstalling -To delete BIG IP execute: +Uninstall the **VNFM-F5-Prov-Azure-vm** deployment: -``cfy uninstall VNFM-F5-Prov-Azure-vm`` +``` +cfy uninstall VNFM-F5-Prov-Azure-vm +``` ## Configuration -The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name -is required as an input. Exposed IP addresses are fetched using *get_capability* function, ie:\ -``{ get_capability: [ {get_input: prov_deployment_name}, wan_ip ] }`` +The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name is required as an input. Exposed IP addresses are fetched using `get_capability` function: `{ get_capability: [ {get_input: prov_deployment_name}, wan_ip ] }`. -VNFM-F5-Conf.yaml is responsible for licensing BIG IP with the provided registration key and applying VLAN configuration necessary for further LTM configuration. -It consists of 2 nodes: -1. *license* - Applies license using [install_license.txt](Resources/templates/install_license.txt) file and revokes it using [revoke_license.txt](Resources/templates/revoke_license.txt). -2. *vlan_configuration* - Creates VLAN configuration on WAN and Public interfaces - using [vlan_config.txt](Resources/templates/vlan_config.txt) to apply it during install and [vlan_config_delete.txt](Resources/templates/vlan_config_delete.txt) to tear it down during uninstall. +* Blueprint: The `application.yaml` blueprint is responsible for licensing BIG IP with the provided registration key and applying VLAN configuration necessary for further LTM configuration. It consists of two nodes: + * `license`: Applies license using [install_license.txt](Resources/templates/install_license.txt) file and revokes it using [revoke_license.txt](Resources/templates/revoke_license.txt). + * `vlan_configuration`: Creates VLAN configuration on WAN and Public interfaces - using [vlan_config.txt](Resources/templates/vlan_config.txt) to apply it during install and [vlan_config_delete.txt](Resources/templates/vlan_config_delete.txt) to tear it down during uninstall. +* Inputs: + * `prov_deployment_name`: Name of BIG IP Provisioning deployment created in previous section. Default: `VNFM-F5-Prov-Azure-vm`. -### Inputs - -* *prov_deployment_name* - Name of BIG IP Provisioning deployment created in previous section ### Install -``cfy install VNFM-F5-Conf.yaml -b VNFM-F5-Conf`` +`cfy install application.yaml -b VNFM-F5-Conf` ### Uninstall -During uninstall the license is revoked so it can be used on different BIG IP VE or on the same one again. -Also VLAN configuration is deleted. -``cfy uninstall VNFM-F5-Conf`` +During uninstall the license is revoked so it can be used on different BIG IP VE or on the same one again. Also VLAN configuration is deleted. + +`cfy uninstall VNFM-F5-Conf` diff --git a/azure_case/bigip/Resources/blueprints/existing_networks.yaml b/azure_case/bigip/Resources/blueprints/existing_networks.yaml old mode 100644 new mode 100755 index ca79f37..6c9ddf3 --- a/azure_case/bigip/Resources/blueprints/existing_networks.yaml +++ b/azure_case/bigip/Resources/blueprints/existing_networks.yaml @@ -4,7 +4,7 @@ description: > Fetch existing: Resource group, security group, network and 4 subnets. imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-azure-plugin inputs: diff --git a/azure_case/bigip/Resources/blueprints/nics.yaml b/azure_case/bigip/Resources/blueprints/nics.yaml old mode 100644 new mode 100755 diff --git a/azure_case/bigip/Resources/templates/install_license.txt b/azure_case/bigip/Resources/templates/install_license.txt old mode 100644 new mode 100755 diff --git a/azure_case/bigip/Resources/templates/revoke_license.txt b/azure_case/bigip/Resources/templates/revoke_license.txt old mode 100644 new mode 100755 diff --git a/azure_case/bigip/Resources/templates/vlan_config.txt b/azure_case/bigip/Resources/templates/vlan_config.txt old mode 100644 new mode 100755 diff --git a/azure_case/bigip/Resources/templates/vlan_config_delete.txt b/azure_case/bigip/Resources/templates/vlan_config_delete.txt old mode 100644 new mode 100755 diff --git a/azure_case/bigip/VNFM-F5-Conf.yaml b/azure_case/bigip/application.yaml similarity index 95% rename from azure_case/bigip/VNFM-F5-Conf.yaml rename to azure_case/bigip/application.yaml index dada796..31897b1 100755 --- a/azure_case/bigip/VNFM-F5-Conf.yaml +++ b/azure_case/bigip/application.yaml @@ -4,7 +4,7 @@ description: > Licensing BIG IP with provided registration key and applying VLAN configuration. imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-utilities-plugin inputs: @@ -37,7 +37,7 @@ node_templates: calls: - template: Resources/templates/install_license.txt params: - REG_KEY: { get_secret: bigip_license_key } + REG_KEY: { get_secret: bigip_license } delete: inputs: terminal_auth: *terminal_auth diff --git a/azure_case/bigip/VNFM-F5-Prov-Azure-vm.yaml b/azure_case/bigip/infrastructure.yaml old mode 100644 new mode 100755 similarity index 99% rename from azure_case/bigip/VNFM-F5-Prov-Azure-vm.yaml rename to azure_case/bigip/infrastructure.yaml index 875c350..659777f --- a/azure_case/bigip/VNFM-F5-Prov-Azure-vm.yaml +++ b/azure_case/bigip/infrastructure.yaml @@ -3,6 +3,14 @@ tosca_definitions_version: cloudify_dsl_1_3 description: > Create an instance of BIG-IP on Azure. +dsl_definitions: + + client_config: &client_config + subscription_id: { get_secret: azure_subscription_id } + tenant_id: { get_secret: azure_tenant_id } + client_id: { get_secret: azure_client_id } + client_secret: { get_secret: azure_client_secret } + imports: - Resources/blueprints/nics.yaml @@ -28,15 +36,6 @@ inputs: description: The name of a group of related images created by a publisher. default: 'f5-big-ip-byol' - -dsl_definitions: - - client_config: &client_config - subscription_id: { get_secret: azure_subscription_id } - tenant_id: { get_secret: azure_tenant_id } - client_id: { get_secret: azure_client_id } - client_secret: { get_secret: azure_client_secret } - node_templates: virtual_machine: diff --git a/azure_case/common/README.md b/azure_case/common/README.md deleted file mode 100755 index 09801b6..0000000 --- a/azure_case/common/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# Common resources - -Before installation of any service, suitable resource group, networks and security group must be created. - -The following resources are created in Azure using the ``VNFM-Networking-Prov-Azure-networks.yaml`` blueprint: -* **Management Network** - This network connects the Cloudify manager to all managed components. -* **LAN network** - This network connects the firewall to the web server. -* **WAN network** - This network connects the load balancer to the web server. -* **Public network** - This is the public network accessible to the user. BIG IP exposes the web server on the Public network interface. -* **Security group** - Security group for VNF NICs, defined by *network_security_group_rules* input, -* **Resource group** - Group that is required to create any other resource in Azure. - -Those resources are fetched by all other provisioning deployments. - -## Prerequisites: - -Prior to installation you have to upload plugins and create secrets. - -### Plugins - -Upload: -* **cloudify-azure-plugin** - Tested for version 2.1.1 -* **cloudify-utilities-plugin** - Tested for version 1.12.5 - -You can do this using Cloudify UI from *Cloudify Catalog* page with *Plugins Catalog* widget just by picking the plugin and clicking *Upload*.\ -Using *cfy* you can upload those with following commands:\ -``cfy plugins upload https://github.com/cloudify-incubator/cloudify-utilities-plugin/releases/download/1.12.5/cloudify_utilities_plugin-1.12.5-py27-none-linux_x86_64-centos-Core.wgn -y https://github.com/cloudify-incubator/cloudify-utilities-plugin/releases/download/1.12.5/plugin.yaml`` - -``cfy plugins upload https://github.com/cloudify-incubator/cloudify-azure-plugin/releases/download/2.1.1/cloudify_azure_plugin-2.1.1-py27-none-linux_x86_64-centos-Core.wgn -y https://github.com/cloudify-incubator/cloudify-azure-plugin/releases/download/2.1.1/plugin.yaml`` - -### Secrets - -Create the below secrets in the secret store management: -* **Azure secrets:** - * *azure_client_id* - Service Principal appId - * *azure_client_secret* - Service Principal password - * *azure_subscription_id* - Service Principal ID - * *azure_tenant_id* - Service Principal tenant - * *azure_location* - Specifies the supported Azure location for the resource - -You can create those with the following cfy commands:\ -``cfy secrets create azure_client_id -s ``\ -``cfy secrets create azure_client_secret -s ``\ -``cfy secrets create azure_subscription_id -s ``\ -``cfy secrets create azure_tenant_id -s ``\ -``cfy secrets create azure_location -s `` - -## Environment creation - -### Inputs -* *retry_after* - The number of seconds for each task retry interval (in the - case of iteratively checking the status of an asynchronous operation) - default: 5 -* *resource_prefix* - Prefix of every resource created at this deployment on Azure - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Azure - default: 0 -* *mgmt_subnet_cidr* - Management subnet CIDR - default: 10.10.1.0/24 -* *public_subnet_cidr* -Public subnet CIDR - default: 10.10.2.0/24 -* *wan_subnet_cidr* - WAN subnet CIDR - default: 10.10.3.0/24 -* *lan_subnet_cidr* - LAN subnet CIDR - default: 10.10.4.0/24 -* *network_api_version* - API Version for Network - default: "2015-06-15" -* *network_security_group_rules* - Security group rules for VNF's NICs - - default: - ```` - - name: all_tcp - properties: - description: All TCP - protocol: Tcp - sourcePortRange: '*' - destinationPortRange: '*' - sourceAddressPrefix: '*' - destinationAddressPrefix: '*' - priority: 100 - access: Allow - direction: Inbound - - name: all_ucp - properties: - description: All UDP - protocol: Udp - sourcePortRange: '*' - destinationPortRange: '*' - sourceAddressPrefix: '*' - destinationAddressPrefix: '*' - priority: 101 - access: Allow - direction: Inbound - ```` -### Installation - -Install using VNFM-Networking-Prov-Azure-networks.yaml blueprint: - -``cfy install VNFM-Networking-Prov-Azure-networks.yaml -b VNFM-Networking-Prov-Azure-networks`` - -**It should be installed only one time before start of provisioning services.** -It will be reused automatically by blueprints using the capabilities mechanism. - -###Uninstalling - -``cfy uninstall VNFM-Networking-Prov-Azure-networks`` diff --git a/azure_case/fortigate/README.md b/azure_case/fortigate/README.md index a663176..88dc483 100755 --- a/azure_case/fortigate/README.md +++ b/azure_case/fortigate/README.md @@ -1,80 +1,66 @@ -# FortiGate NGFW Single VM on Azure +# FortiGate Firewall -## Prerequisites: +This blueprint installs the NGFW Single VM on Azure. -### Common resource creation -Prior to any deployment You have to upload plugins, create secrets and create common environment - [instructions](../common/README.md) +### Prerequisites -### Secrets +First make sure that you have satisfied the global requirements in the [main README](../README.md). -Create the below secrets in the secret store management: -* **fortigate_username** - Username for Fortigate VM, it is set during provisioning and used during configuration, -* **fortigate_password** - Password for Fortigate VM, it is set during provisioning and used during configuration. -* **fortigate_license** - Content of license file, its used during provisioning to license Fortigate - -You can create those with the following cfy commands:\ -``cfy secrets create fortigate_username -s ``\ -``cfy secrets create fortigate_password -s ``\ -``cfy secrets create fortigate_license -f `` +* These additional secrets should exist on your manager: + * `fortigate_username`: Username for Fortigate VM. It is set during provisioning and used during configuration, "admin" is not allowed. You can set this up via the CLI: `cfy secrets create fortigate_username -s [secret value]`. + * `fortigate_password`: Password for Fortigate VM. It is set during provisioning and used during configuration. The supplied password must be between 6-72 characters long and must satisfy at least 3 of password complexity requirements from the following: Contains an uppercase character, Contains a lowercase character, Contains a numeric digit, Contains a special character. Control characters are not allowed. . You can set this up via the CLI: `cfy secrets create fortigate_password -s [secret value]`. + * `fortigate_license`: Content of license file, its used during provisioning to license Fortigate. You can set this up via the CLI: `cfy secrets create fortigate_license -s [secret value]`. ## Provisioning -``VNFM-Fortigate-Prov-Azure-vm.yaml`` is responsible for FortiGate NGFW Single VM provisioning. VM is connected to 3 networks: -* Management, -* WAN, -* LAN. - -Network's NICs are connected to the security group created in the network deployment. -Networks and security group names are fetched from network deployment using `get_capability` intrinsic function. - -### Inputs - -* *retry_after* - The number of seconds for each task retry interval (in the - case of iteratively checking the status of an asynchronous operation) - default: 5 -* *resource_prefix* - Prefix of every resource created at this deployment on Azure - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Azure - default: 0 -* *azure_network_deployment_name* - Name of deployment responsible for creation resource group, security group and networks - - default: VNFM-Networking-Prov-Azure-networks -* *vm_size* - Name of Virtual Machine Size in Azure - default: Standard_B2s -* *vm_os_family* - default: linux -* *vm_image_publisher* - Name of the organization that created the image - default: fortinet -* *vm_image_offer* - The name of a group of related images created by a publisher - default: fortinet_fortigate-vm_v5 -* *vm_image_sku* - An instance of an offer, such as a major release of a distribution - fortinet_fg-vm -* *vm_image_version* - Version of the image - default: 6.0.3 -* *vnf_vm_name* - Name of VM - default: fortigate -* *fortigate_license_filename* - Name of the Fortigate license file (It will be uploaded to Fortigate VM with this name). It should have .lic file extension. - default: FGVM02TM19000054.lic +* Blueprint: The `infrastructure.yaml` blueprint is responsible for FortiGate NGFW Single VM provisioning. This VM is connected to 3 networks: + * Management + * WAN + * LAN -### Installation +The networks' NICs are connected to the security group created in the network deployment. The networks and security group names are fetched from network deployment using `get_capability` intrinsic function. + +* Inputs: + * `fortigate_license_filename`: This is the name of the Fortigate license file. It will be uploaded to Fortigate VM with this name. It should have .lic file extension. Default: `FGVM02TM19000054.lic`. + * `vm_size`: Name of Virtual Machine Size in Azure. Default: `Standard_B2s`. + * `vm_os_family`: Default: `linux`. + * `vm_image_publisher`: Name of the organization that created the image. Default: `fortinet`. + * `vm_image_offer`: The name of a group of related images created by a publisher. Default: `fortinet_fortigate-vm_v5` + * `vm_image_sku`: An instance of an offer, such as a major release of a distribution. Default: `fortinet_fg-vm` + * `vm_image_version`: Version of the image. Default: `6.0.3`. + * `azure_network_deployment_name`: Name of deployment responsible for creation resource group, security group and networks. Default: `VNFM-Networking-Prov-Azure-networks`. -Resources created in Prerequesites subsection are fetched using capabilities exposed by *azure-networks* deployment and ``VNFM-Fortigate-Prov-Azure-vm.yaml`` is using it. -To provision FortiGate NGFW Single VM: +### Installation -``cfy install VNFM-Fortigate-Prov-Azure-vm.yaml -b VNFM-Fortigate-Prov-Azure-vm`` +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: -### Uninstalling -To delete Fortigate execute: +```bash +cfy install infrastructure.yaml -b \ + VNFM-Fortigate-Prov-Azure-vm +``` -``cfy uninstall VNFM-Fortigate-Prov-Azure-vm`` +###Uninstalling -## Configuration +Uninstall the **VNFM-Fortigate-Prov-Azure-vm** deployment: -The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name -is required as an input. Exposed IP addresses are fetched using *get_capability* function, ie:\ -``{ get_capability: [ { get_input: fortigate_vm_deployment_name }, vm_public_ip_address] }`` +``` +cfy uninstall VNFM-Fortigate-Prov-Azure-vm +``` -``VNFM-Fortigate-Conf.yaml`` is responsible for applying base configuration for the newly created FortiGate VM. It configures all of the interfaces. -It consists of one node: -1. *fortigate_vnf_config* - Applies base configuration for Fortigate (VNF name change and basic configuration to interfaces) using [fortigate-baseline.txt](Resources/templates/fortigate-baseline.txt) file. +## Configuration +The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name is required as an input. Exposed IP addresses are fetched using `get_capability` function: `{ get_capability: [ {get_input: prov_deployment_name}, wan_ip ] }`. -### Inputs +* Blueprint: The `application.yaml` blueprint is responsible for applying base configuration for the newly created FortiGate VM. It configures all of the interfaces. It consists of one node: + * `fortigate_vnf_config`: Applies base configuration for Fortigate (VNF name change and basic configuration to interfaces) using [fortigate-baseline.txt](Resources/templates/fortigate-baseline.txt) file. -* *fortigate_vm_deployment_name* - Name of Fortigate Provisioning deployment - default: VNFM-Fortigate-Prov-Azure-vm +* Inputs: + * `fortigate_vm_deployment_name`: Name of Fortigate Provisioning deployment. Default: `VNFM-Fortigate-Prov-Azure-vm`. ### Install -``cfy install VNFM-Fortigate-Conf.yaml -b VNFM-Fortigate-Conf`` +`cfy install application.yaml -b VNFM-Fortigate-Conf` ### Uninstall -``cfy uninstall VNFM-Fortigate-Conf`` +`cfy uninstall VNFM-Fortigate-Conf` diff --git a/azure_case/fortigate/Resources/templates/fortigate-baseline.txt b/azure_case/fortigate/Resources/templates/fortigate-baseline.txt old mode 100644 new mode 100755 diff --git a/azure_case/fortigate/VNFM-Fortigate-Conf.yaml b/azure_case/fortigate/application.yaml old mode 100644 new mode 100755 similarity index 95% rename from azure_case/fortigate/VNFM-Fortigate-Conf.yaml rename to azure_case/fortigate/application.yaml index a6e31ce..11fbf01 --- a/azure_case/fortigate/VNFM-Fortigate-Conf.yaml +++ b/azure_case/fortigate/application.yaml @@ -4,7 +4,7 @@ description: > Applies base configuration for newly created FortiGate VM. imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-utilities-plugin inputs: diff --git a/azure_case/fortigate/VNFM-Fortigate-Prov-Azure-vm.yaml b/azure_case/fortigate/infrastructure.yaml old mode 100644 new mode 100755 similarity index 99% rename from azure_case/fortigate/VNFM-Fortigate-Prov-Azure-vm.yaml rename to azure_case/fortigate/infrastructure.yaml index 9b4e607..df521f6 --- a/azure_case/fortigate/VNFM-Fortigate-Prov-Azure-vm.yaml +++ b/azure_case/fortigate/infrastructure.yaml @@ -1,7 +1,7 @@ tosca_definitions_version: cloudify_dsl_1_3 imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-azure-plugin - plugin:cloudify-utilities-plugin diff --git a/azure_case/httpd/README.md b/azure_case/httpd/README.md index 6e26784..8d7233f 100755 --- a/azure_case/httpd/README.md +++ b/azure_case/httpd/README.md @@ -1,73 +1,56 @@ -# HTTPD on Azure +# HTTPD Webserver -## Prerequisites: +This blueprint installs HTTPD webserver on an Azure VM. -### Common resource creation -Prior to any deployment You have to upload plugins, create secrets and create common environment - [instructions](../common/README.md) +### Prerequisites -### Secrets +First make sure that you have satisfied the global requirements in the [main README](../README.md). -Create the below secrets in the secret store management: -* **httpd_username** - Username for HTTPD VM, it is set during provisioning and used during configuration, -* **httpd_password** - Password for HTTPD VM, it is set during provisioning and used during configuration, -* **httpd_website** - Content of website file for HTTPD VM, it is set during provisioning and served after configuration. Exemplary website can be found under ``Resources/website/index.html``. - -You can create those with the following cfy commands:\ -``cfy secrets create httpd_username -s ``\ -``cfy secrets create httpd_password -s ``\ -``cfy secrets create httpd_website -s `` +* These additional secrets should exist on your manager: + * `httpd_username`: Username for HTTPD VM. It is set during provisioning and used during configuration, "admin" is not allowed. You can set this up via the CLI: `cfy secrets create httpd_username -s [secret value]`. + * `httpd_password`: Password for HTTPD VM. It is set during provisioning and used during configuration. The supplied password must be between 6-72 characters long and must satisfy at least 3 of password complexity requirements from the following: Contains an uppercase character, Contains a lowercase character, Contains a numeric digit, Contains a special character. Control characters are not allowed. You can set this up via the CLI: `cfy secrets create httpd_password -s [secret value]`. + * `httpd_website`: Content of website file for HTTPD VM, it is set during provisioning and served after configuration. Exemplary website can be found under `Resources/website/index.html`. ## Provisioning -VNFM-HTTPD-Prov-Azure-vm.yaml is responsible for the creation of an Ubuntu VM connected to 2 networks: -* Management, -* LAN. - -For each network NIC, special security group is created (lan_security_group and mgmt_security_group). -Network names are fetched from network deployment using `get_capability` intrinsic function. - -### Inputs -* *image* - Image information - default: - publisher: Canonical \ - offer: UbuntuServer \ - sku: 18.04-LTS \ - version: latest -* *size* - Name of Virtual Machine Size in Azure - default: Basic_A0 -* *retry_after* - The number of seconds for each task retry interval (in the - case of iteratively checking the status of an asynchronous operation) - default: 5 -* *resource_prefix* - Prefix of every resource created at this deployment on Azure - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Azure - default: 0 -* *network_deployment_name* - Name of deployment responsible for creation resource group, security group and networks - - default: VNFM-Networking-Prov-Azure-networks +* Blueprint: The `infrastructure.yaml` blueprint is responsible for the creation of an Ubuntu VM. It is connected to 2 networks: + * Management + * LAN + +The networks' NICs are connected to the security group created in the network deployment. The networks and security group names are fetched from network deployment using `get_capability` intrinsic function. + +* Inputs: + * `image`: Image information. Default: `{'publisher': 'Canonical', 'offer': 'UbuntuServer', 'sku': '18.04-LTS', 'version': 'latest}'`. + * `network_deployment_name`: Name of deployment responsible for creation resource group, security group and networks. Default: `VNFM-Networking-Prov-Azure-networks`. ### Installation -Resources created in Prerequesites subsection are fetched using the capabilities mechanism. -To provision HTTPD: +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: -``cfy install VNFM-HTTPD-Prov-Azure-vm.yaml -b VNFM-HTTPD-Prov-Azure-vm`` +```bash +cfy install infrastructure.yaml -b \ + VNFM-HTTPD-Prov-Azure-vm +``` -### Uninstalling +###Uninstalling -To delete VM execute: +Uninstall the **VNFM-HTTPD-Prov-Azure-vm** deployment: -``cfy uninstall VNFM-HTTPD-Prov-Azure-vm`` +``` +cfy uninstall VNFM-HTTPD-Prov-Azure-vm +``` ## Configuration -VNFM-HTTPD-Conf.yaml is responsible for starting HTTPD process on the target VM, -*web_server* node is responsible for creating such server using the following command:\ -``screen -dmS -X python3 -m http.server 8080``\ -The IP address of the target VM is fetched from VNFM-HTTPD-Prov-Azure-vm deployment using capabilities. - -### Inputs +* Blueprint: The `application.yaml` blueprint is responsible for starting HTTPD process on the target VM, `web_server` node is responsible for creating such server using the following command: `screen -dmS -X python3 -m http.server 8080`. The IP address of the target VM is fetched from VNFM-HTTPD-Prov-Azure-vm deployment using capabilities. -* *httpd_vm_deployment_name* - Name of HTTPD Provisioning deployment +* Inputs: + * `httpd_vm_deployment_name`: Name of HTTPD Provisioning deployment. Default: `VNFM-HTTPD-Prov-Azure-vm`. ### Install -``cfy install VNFM-HTTPD-Conf.yaml -b VNFM-HTTPD-Conf`` +`cfy install application.yaml -b VNFM-HTTPD-Conf` ### Uninstall -``cfy uninstall VNFM-HTTPD-Conf`` +`cfy uninstall VNFM-HTTPD-Conf` diff --git a/azure_case/httpd/VNFM-HTTPD-Conf.yaml b/azure_case/httpd/application.yaml similarity index 92% rename from azure_case/httpd/VNFM-HTTPD-Conf.yaml rename to azure_case/httpd/application.yaml index d3fdaad..3c902ba 100755 --- a/azure_case/httpd/VNFM-HTTPD-Conf.yaml +++ b/azure_case/httpd/application.yaml @@ -3,7 +3,7 @@ description: > Starts HTTPD process on VM. imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-utilities-plugin inputs: diff --git a/azure_case/httpd/VNFM-HTTPD-Prov-Azure-vm.yaml b/azure_case/httpd/infrastructure.yaml similarity index 99% rename from azure_case/httpd/VNFM-HTTPD-Prov-Azure-vm.yaml rename to azure_case/httpd/infrastructure.yaml index 7fb11ec..599c3f0 100755 --- a/azure_case/httpd/VNFM-HTTPD-Prov-Azure-vm.yaml +++ b/azure_case/httpd/infrastructure.yaml @@ -1,7 +1,7 @@ tosca_definitions_version: cloudify_dsl_1_3 imports: - - http://www.getcloudify.org/spec/cloudify/4.3/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-azure-plugin - plugin:cloudify-utilities-plugin diff --git a/azure_case/network-topology/README.md b/azure_case/network-topology/README.md new file mode 100755 index 0000000..1a28bf4 --- /dev/null +++ b/azure_case/network-topology/README.md @@ -0,0 +1,31 @@ +# Network Topology + +This blueprint installs the common infrastructure for the commercial VNF use case. + +The following resources will be created: + + * `Resource group`: Group that is required to create any other resource in Azure. + * `Management Network`: This network connects the Cloudify manager to all managed components. + * `LAN network`: This network connects the firewall to the web server. + * `WAN network`: This network connects the load balancer to the web server. + * `Public network`: This is the public network accessible to the user. BIG IP exposes the web server on the Public network interface. + * `Security group`: Security group for VNF NICs, defined by *network_security_group_rules* input, + +### Installation + +**Note: Only install this deployment once.** Other blueprints will reuse the existing deployment. + +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: + +```bash +cfy install infrastructure.yaml -b \ + VNFM-Networking-Prov-Azure-networks +``` + +###Uninstalling + +Uninstall the **VNFM-Networking-Prov-Azure-networks** deployment: + +``` +cfy uninstall VNFM-Networking-Prov-Azure-networks +``` diff --git a/azure_case/common/VNFM-Networking-Prov-Azure-networks.yaml b/azure_case/network-topology/infrastructure.yaml old mode 100644 new mode 100755 similarity index 98% rename from azure_case/common/VNFM-Networking-Prov-Azure-networks.yaml rename to azure_case/network-topology/infrastructure.yaml index 80b7bb2..67d9463 --- a/azure_case/common/VNFM-Networking-Prov-Azure-networks.yaml +++ b/azure_case/network-topology/infrastructure.yaml @@ -3,8 +3,16 @@ tosca_definitions_version: cloudify_dsl_1_3 description: > Create an Example Azure Network. +dsl_definitions: + + client_config: &client_config + subscription_id: { get_secret: azure_subscription_id } + tenant_id: { get_secret: azure_tenant_id } + client_id: { get_secret: azure_client_id } + client_secret: { get_secret: azure_client_secret } + imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-azure-plugin inputs: @@ -66,15 +74,6 @@ inputs: access: Allow direction: Inbound -dsl_definitions: - - client_config: &client_config - subscription_id: { get_secret: azure_subscription_id } - tenant_id: { get_secret: azure_tenant_id } - client_id: { get_secret: azure_client_id } - client_secret: { get_secret: azure_client_secret } - - node_templates: resource_group: diff --git a/azure_case/service/README.md b/azure_case/service/README.md index b688edc..e664a2e 100755 --- a/azure_case/service/README.md +++ b/azure_case/service/README.md @@ -1,40 +1,39 @@ # Network Service -Creates a service chain by creating forwarding rules on the VNFs (Fortigate and BIG IP). +This blueprint installs a service chain by creating forwarding rules on the VNFs (Fortigate and BIG IP). ## Prerequisites: -* **BIG IP Provisioning & Configuration** - [Instructions](../bigip/README.md) -* **Fortigate Provisioning & Configuration** - [Instructions](../fortigate/README.md) -* **HTTPD Provisioning & Configuration** - [Instructions](../httpd/README.md) +First make sure that you have satisfied the global requirements in the [main README](../README.md) as well as installed the following deployments: -## Service creation + * *BIG IP Provisioning & Configuration*: See [instructions](../bigip/README.md). + * *Fortigate Provisioning & Configuration*: See [instructions](../fortigate/README.md). + * *HTTPD Provisioning & Configuration*: See [instructions](../httpd/README.md). -NS-LB-Firewall-F5-Fortigate-HTTPD.yaml consists of 2 nodes: -1. *fg_port_forwarding* - prepares NAT rules and policies, which are required to perform the service chain. [fortigate-portforward-start.txt](Resources/templates/fortigate-portforward-start.txt) file is used to apply configuration during installation and [fortigate-portforward-stop.txt](Resources/templates/fortigate-portforward-stop.txt) to delete it during uninstall. -2. *ltm_config* - creates load balancing rule responsible for passing traffic from app (exposed on WAN fortigate interface) -to BIG-IP Public interface using [ltm_config.txt](Resources/templates/ltm_config.txt) file to apply configuration and [ltm_config_stop.txt](Resources/templates/ltm_config_stop.txt) to delete it during uninstall +## Service creation -IP addresses are fetched using *get_capability* function. +IP addresses are fetched using `get_capability` function. -### Inputs +* Blueprint: The `service.yaml` blueprint is responsible for orchestrating the service chaining. It consists of two nodes: + * `fg_port_forwarding`: Prepares NAT rules and policies, which are required to perform the service chain. [fortigate-portforward-start.txt](Resources/templates/fortigate-portforward-start.txt) file is used to apply configuration during installation and [fortigate-portforward-stop.txt](Resources/templates/fortigate-portforward-stop.txt) to delete it during uninstall. + * `ltm_config`: Creates load balancing rule responsible for passing traffic from app (exposed on WAN fortigate interface) to BIG-IP Public interface using [ltm_config.txt](Resources/templates/ltm_config.txt) file to apply configuration and [ltm_config_stop.txt](Resources/templates/ltm_config_stop.txt) to delete it during uninstall. -* *f5_prov_deployment_name* - The name of the BIG IP Provisioning deployment, used to get management and Public IPs from BIG IP VE - default: VNFM-F5-Prov-Azure-vm -* *fg_prov_deployment_name* - The name of the Fortigate Provisioning deployment, used to get management and WAN IPs from Fortigate VM - default: VNFM-Fortigate-Conf -* *httpd_prov_deployment_name* - The name of the HTTPD Provisioning deployment, used to fetch HTTPD LAN interface IP - default: VNFM-HTTPD-Prov-Azure-vm -* *lb_public_port* - Load balancer public network port on which the service is exposed - default: 8080 -* *wan_port* - Fortigate WAN port on which the service is going to be exposed - default: '8080' +* Inputs: + * `f5_prov_deployment_name`: The name of the BIG IP Provisioning deployment, used to get management and Public IPs from BIG IP VE. Default: `VNFM-F5-Prov-Azure-vm`. + * `fg_prov_deployment_name`: The name of the Fortigate Provisioning deployment, used to get management and WAN IPs from Fortigate VM. Default: `VNFM-Fortigate-Conf`. + * `httpd_prov_deployment_name`: The name of the HTTPD Provisioning deployment, used to fetch HTTPD LAN interface IP. Default: `VNFM-HTTPD-Prov-Azure-vm`. + * `lb_public_port`: Load balancer public network port on which the service is exposed. Default: `8080`. + * `wan_port`: Fortigate WAN port on which the service is going to be exposed. Default: `8080'`. ### Installation To apply service configuration execute: -``cfy install NS-LB-Firewall-F5-Fortigate-HTTPD.yaml -b NS-LB-Firewall-F5-Fortigate-HTTPD`` +``cfy install service.yaml -b NS-LB-Firewall-F5-Fortigate-HTTPD`` ### Service validation -After service creation You should be able to display web server exposed on Public interface of BIG-IP. -The URL is available on *web_server* deployment output. +After service creation You should be able to display web server exposed on Public interface of BIG-IP. The URL is available on *web_server* deployment output. ### Uninstalling diff --git a/azure_case/service/Resources/templates/fortigate-portforward-start.txt b/azure_case/service/Resources/templates/fortigate-portforward-start.txt old mode 100644 new mode 100755 diff --git a/azure_case/service/Resources/templates/fortigate-portforward-stop.txt b/azure_case/service/Resources/templates/fortigate-portforward-stop.txt old mode 100644 new mode 100755 diff --git a/azure_case/service/Resources/templates/ltm_config.txt b/azure_case/service/Resources/templates/ltm_config.txt old mode 100644 new mode 100755 diff --git a/azure_case/service/Resources/templates/ltm_config_stop.txt b/azure_case/service/Resources/templates/ltm_config_stop.txt old mode 100644 new mode 100755 diff --git a/azure_case/service/NS-LB-Firewall-F5-Fortigate-HTTPD.yaml b/azure_case/service/service.yaml old mode 100644 new mode 100755 similarity index 98% rename from azure_case/service/NS-LB-Firewall-F5-Fortigate-HTTPD.yaml rename to azure_case/service/service.yaml index e457fa8..53adb21 --- a/azure_case/service/NS-LB-Firewall-F5-Fortigate-HTTPD.yaml +++ b/azure_case/service/service.yaml @@ -4,7 +4,7 @@ description: > Creates port forwading on Fortigate and load balancing rule on BIG-IP LTM to allow traffic forwarding imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - http://cloudify.co/spec/cloudify/4.5.5/types.yaml - plugin:cloudify-utilities-plugin inputs: diff --git a/azure_case_e2e/README.md b/azure_case_e2e/README.md index 9a7e875..c031cf4 100755 --- a/azure_case_e2e/README.md +++ b/azure_case_e2e/README.md @@ -33,7 +33,7 @@ Create the below secrets in the secret store management: * *azure_location* - Specifies the supported Azure location for the resource * *bigip_username* - Username for BIG IP VE, it is set during provisioning and used during configuration, "admin" is not allowed * *bigip_password* - Password for BIG IP VE, it is set during provisioning and used during configuration. The supplied password must be between 6-72 characters long and must satisfy at least 3 of password complexity requirements from the following: Contains an uppercase character, Contains a lowercase character, Contains a numeric digit, Contains a special character. Control characters are not allowed - * *bigip_license_key* - License key for BIG IP VE, it is being applied during configuration + * *bigip_license* - License key for BIG IP VE, it is being applied during configuration * *fortigate_username* - Username for Fortigate VM, it is set during provisioning and used during configuration * *fortigate_password* - Password for Fortigate VM, it is set during provisioning and used during configuration * *fortigate_license* - Content of license file, its used during provisioning to license Fortigate @@ -49,7 +49,7 @@ You can create those with the following cfy commands:\ ``cfy secrets create azure_location -s ``\ ``cfy secrets create bigip_username -s ``\ ``cfy secrets create bigip_password -s ``\ -``cfy secrets create bigip_license_key -s ``\ +``cfy secrets create bigip_license -s ``\ ``cfy secrets create fortigate_username -s ``\ ``cfy secrets create fortigate_password -s ``\ ``cfy secrets create fortigate_license -f ``\ @@ -59,21 +59,21 @@ You can create those with the following cfy commands:\ ### Inputs -* *common_prov_name* - The name of the Common resources provisioning deployment - default: VNFM-Networking-Prov-Azure-networks +* *network_prov_name* - The name of the common network resources provisioning deployment - default: VNFM-Networking-Prov-Azure-networks * *f5_prov_name* - The name of the BIG IP Provisioning deployment - default: VNFM-F5-Prov-Azure-vm * *f5_conf_name* - The name of the BIG IP Configuration deployment - default: VNFM-F5-Conf * *fg_prov_name* - The name of the Fortigate Provisioning deployment - default: VNFM-Fortigate-Prov-Azure-vm * *fg_conf_name* - The name of the Fortigate Configuration deployment - default: VNFM-Fortigate-Conf * *httpd_prov_name* - The name of the HTTPD Provisioning deployment - default: VNFM-HTTPD-Prov-Azure-vm * *httpd_conf_name* - The name of the HTTPD Configuration deployment - default: VNFM-HTTPD-Conf -* *service_prov_name* - The name of the Common resources provisioning deployment - default: NS-LB-Firewall-F5-Fortigate-HTTPD +* *service_prov_name* - The name of the service provisioning deployment - default: NS-LB-Firewall-F5-Fortigate-HTTPD ### Installation To apply the service configuration execute: -``cfy install VNFM-E2E-F5-Fortigate-HTTPD.yaml -b VNFM-E2E-F5-Fortigate-HTTPD`` +``cfy install e2e.yaml -b VNFM-E2E-F5-Fortigate-HTTPD`` ### Service validation diff --git a/azure_case_e2e/Resources/service.zip b/azure_case_e2e/Resources/service.zip index 765350712a5d28949c97e77c5ec5fa396d21788f..64963a379b64bea436fe3b893416bea9f44023c9 100755 GIT binary patch delta 1192 zcmV;Z1XugeAjcq(FbyYPO-}S3pbrrQ006L&JvV<_i_|a_e($dcDhlGvC@M%FgwfsA zfpxa5g9;)c)25wZnuH{sI*R|@lk}3g)g5nOp4yz-mvg>z5-Uwga7J?`m}OEJyr$Z~ zM~qS~tBmCvoEeTE;m1*wQIl$>tQS9z5PGR8vD6?XwMDtqHOZJLkQC?wc31&IL_~(T zBpH8N5>7?UHLv9q8o01BP1t}?rVC`gL4%$O_@`=Na9u2B}iu!dK=tqAw zYHX08wwC&{=dL4Ty<&jLP`ze=gBe7>C<%DI567d}!z`%YMfmLDvxg2%O+UJ1Y z4GqH3Y5FiQbe6bk1oiiRukAkA#ldu&0R4FCsxa21cJe^^4s*~AqA_PVO*elj_dVCD zxtZ(!`_<2^ejTy^VD4;fDGyO1?+&|5i?9MghD|$-9n;h4a(uKQ;LExUY{4YUG&Sba zUX(-ngcXQ%xO-=BH;}7eLp0l#rf{S6M!|%n%@CkpnC*qe5^aC6sQ34adP?-J17dVd zjjS}VY|`$*S6{f1BX!H^kq3V_wqF9=Kmbij7v*3jSJ#V+tLyjE>oYt{PN=oNZwAW^ zvl|Kx1->Da`;K=U_k;PU?fHkr`SpByc^bx_@UiXzhLTG4|5j8gS5Q9%+vmoySDGJ# zdt)zL)>gKr?E@x=n)eg8B~GQt*}tBNztuf|Inm*;zt}0$B*F8mvvYs^XqbdIbFiUc zdv*Ra$}jiG+47pzPX&8rXY8ZvlUa} zd9vRMJ6dB%92J?tQuH8z;E;&;$a5o#B3aq)yfs~7_l~6c$b0xbU7|*az`v5vRNd?ZVqh% z*a?$R4mOh$4^#qr3X@O{9+SNa4wID+P6B}olTZ#Glf4QGlgTlOhl(1`G@U G0002^xj|O| delta 1200 zcmV;h1W)_NAkZL?Fb&&lMox1$HQE{k006F$JvV=CtJ5$P{@z~^R2+!i6cwZ&gz3Fk z2iM&)hYBJgYtt^6CLu{zr}*DJ>09>NXkTxq(E1&!*UQJB2vU9 zNzs3ba3T^X*CnS;>G|wsIE&Hs@-?y&5zb|WtR`8;lE#~M?t*|7E`W(3Vu;q(s%SE) zs%o55+kqTQollIS$)wwvJRU!p*sY>wyd?#%Z51zbCZbLyEG^@3Y-++r0-=N|n@HIc zthC%fZWNc>f(nZTDJY0w?PX#P+el{aI0%1^6N43VDRf8m*7s3qXzC6Muu(w-$!Q^M zou9Z|ah8CwL7A3C>#2>Dk&@d8y`5jZ4zHes&V4xjQfeA*iogNQ&jfnHUtgvpw{@P= zGd=eyc(q){7eCKH28CO<%Gc95V!~3Lk%XQ;b**@ekgu?+6Neo=8dQfAt=F}uAJu=T zu|a~`O6pHFcO4n4H3LkB>J0-N%pm$%Nr$&~;)oR0ICHA^AwGTZ^nrs@5zzwi2F7a0 z!7#FTD0nWx&ZTNaJ0SZ}M=tCr2%tH4+c$DZAejXdgkw_Lb%gHj{nu_v2o<5Pj*8gO zL{sp%VmVXTNrbEBw^~sVV<1iGY2|-T+A1^EsU<{_mFul-gg&6JZmaIBXsE5e-A6@U z*sh>Vp^qH`Xb5n)rpc!!v#yaxw@3c_PV-H*mfCooTQ6i$xbDgb zWSj81>smE8b=`lz`l;2gV-f(&y{#SPAx31~VfR_#m*>Z@X{WJg`a`xLPnV(LhJY`d z!m|aFG}Y9Yj|WkX>Eo9t((&${gI!OqehtxVSDL_`)*E>fk~C9*erC288cVeO#iHIj zEb2MYyAFuZf*M(BVA-VIgRg(SaG@i0%jvKNH@2TWTu%T^3K!*Q#W#!P)y?AFba8=a z@fo$QZ=At$!}NwiLxF!1%6&(Bj{C`c()RNG@^UesUZ02Y2Yjr0fWD+s{l68J$`!Pp zg6)Ij)H|&ng9l^JU)NT)rtK5Pi`@Ne3!F%iv41@ff2(!=a+dvJf3bf}rg4ntHy4-q zAu#Za`|~sb8~(NT<`1L%a)Vr4zFE%Z)8*`DejdWX8-C|<|7oOSln3v^S05CHPw&uOsB2G|`%qx-#s<8psue* diff --git a/azure_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml b/azure_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml deleted file mode 100755 index abd735b..0000000 --- a/azure_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml +++ /dev/null @@ -1,176 +0,0 @@ -tosca_definitions_version: cloudify_dsl_1_3 - -description: > - Master blueprint, which provisions all atomic components, configures them and - chains together. In partilucar: - * prepares the environment, including networks, subnets, security groups etc. - * provisions F5 BIG-IP VM - * provisions Fortigate VM - * provisions HTTPD VM - * configures F5 BIG-IP - * configures Fortigate - * configures HTTPD - * creates a service chain to allow traffic forwarding - -imports: - - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml - - plugin:cloudify-utilities-plugin - -inputs: - common_prov_name: - description: Name of common resources provisioning blueprint/deployment - default: VNFM-Networking-Prov-Azure-networks - - f5_prov_name: - description: Name of BIG IP Provisioning blueprint/deployment - default: VNFM-F5-Prov-Azure-vm - - f5_conf_name: - description: Name of BIG IP Configuration blueprint/deployment - default: VNFM-F5-Conf - - fg_prov_name: - description: Name of Fortigate Provisioning blueprint/deployment - default: VNFM-Fortigate-Prov-Azure-vm - - fg_conf_name: - description: Name of Fortigate Configuration blueprint/deployment - default: VNFM-Fortigate-Conf - - httpd_prov_name: - description: Name of HTTPD Provisioning blueprint/deployment - default: VNFM-HTTPD-Prov-Azure-vm - - httpd_conf_name: - description: Name of HTTPD Configuration blueprint/deployment - default: VNFM-HTTPD-Conf - - service_prov_name: - description: Name of service chain Provisioning blueprint/deployment - default: NS-LB-Firewall-F5-Fortigate-HTTPD - -node_templates: - - # Common - common_prov: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: common_prov_name } - blueprint_archive: Resources/common.zip - main_file_name: VNFM-Networking-Prov-Azure-networks.yaml - deployment: - id: { get_input: common_prov_name } - - # Provisioning - f5_prov: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: f5_prov_name } - blueprint_archive: Resources/bigip.zip - main_file_name: VNFM-F5-Prov-Azure-vm.yaml - deployment: - id: { get_input: f5_prov_name } - relationships: - - type: cloudify.relationships.depends_on - target: common_prov - - fg_prov: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: fg_prov_name } - blueprint_archive: Resources/fortigate.zip - main_file_name: VNFM-Fortigate-Prov-Azure-vm.yaml - deployment: - id: { get_input: fg_prov_name } - relationships: - - type: cloudify.relationships.depends_on - target: common_prov - - httpd_prov: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: httpd_prov_name } - blueprint_archive: Resources/httpd.zip - main_file_name: VNFM-HTTPD-Prov-Azure-vm.yaml - deployment: - id: { get_input: httpd_prov_name } - relationships: - - type: cloudify.relationships.depends_on - target: common_prov - - # Configuration - f5_conf: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: f5_conf_name } - blueprint_archive: Resources/bigip.zip - main_file_name: VNFM-F5-Conf.yaml - deployment: - id: { get_input: f5_conf_name } - relationships: - - type: cloudify.relationships.depends_on - target: f5_prov - - fg_conf: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: fg_conf_name } - blueprint_archive: Resources/fortigate.zip - main_file_name: VNFM-Fortigate-Conf.yaml - deployment: - id: { get_input: fg_conf_name } - relationships: - - type: cloudify.relationships.depends_on - target: fg_prov - - httpd_conf: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: httpd_conf_name } - blueprint_archive: Resources/httpd.zip - main_file_name: VNFM-HTTPD-Conf.yaml - deployment: - id: { get_input: httpd_conf_name } - relationships: - - type: cloudify.relationships.depends_on - target: httpd_prov - - # Service Chain - service_prov: - type: cloudify.nodes.DeploymentProxy - properties: - resource_config: - blueprint: - id: { get_input: service_prov_name } - blueprint_archive: Resources/service.zip - main_file_name: NS-LB-Firewall-F5-Fortigate-HTTPD.yaml - deployment: - id: { get_input: service_prov_name } - outputs: - web_server: web_server_value - relationships: - - type: cloudify.relationships.depends_on - target: f5_conf - - type: cloudify.relationships.depends_on - target: fg_conf - - type: cloudify.relationships.depends_on - target: httpd_conf - -outputs: - web_server: - description: Web server endpoint exposed on BIG IP Public interface - value: { get_attribute: [service_prov, deployment, outputs, web_server_value] } diff --git a/azure_case_e2e/e2e.yaml b/azure_case_e2e/e2e.yaml new file mode 100755 index 0000000..fff2216 --- /dev/null +++ b/azure_case_e2e/e2e.yaml @@ -0,0 +1,272 @@ +tosca_definitions_version: cloudify_dsl_1_3 + +description: > + This is the master blueprint for the Cloudify VNF example. It provisions all the atomic components, + configures, and then chains them together. In partilucar: + * prepares the environment, including networks, subnets, security groups etc. + * provisions F5 BIG-IP VM + * provisions Fortigate VM + * provisions HTTPD VM + * configures F5 BIG-IP + * configures Fortigate + * configures HTTPD + * creates a service chain to allow traffic forwarding + +# In this section, we import the basic node types, which will be later used in the +# node_templates section to define particular elements of the chain and the +# relationships between them. This section also imports the cloudify-utilities-plugin +# to allow using the Deployment Proxy mechanism. + +imports: + - http://www.getcloudify.org/spec/cloudify/4.5/types.yaml + - plugin:cloudify-utilities-plugin + +# The inputs section includes the names of the particular blueprints and +# deployments which this blueprint will leverage. +inputs: + network_prov_name: + description: Name of network resources provisioning blueprint/deployment + default: VNFM-Networking-Prov-Azure-networks + + f5_prov_name: + description: Name of BIG IP Provisioning blueprint/deployment + default: VNFM-F5-Prov-Azure-vm + + f5_conf_name: + description: Name of BIG IP Configuration blueprint/deployment + default: VNFM-F5-Conf + + fg_prov_name: + description: Name of Fortigate Provisioning blueprint/deployment + default: VNFM-Fortigate-Prov-Azure-vm + + fg_conf_name: + description: Name of Fortigate Configuration blueprint/deployment + default: VNFM-Fortigate-Conf + + httpd_prov_name: + description: Name of HTTPD Provisioning blueprint/deployment + default: VNFM-HTTPD-Prov-Azure-vm + + httpd_conf_name: + description: Name of HTTPD Configuration blueprint/deployment + default: VNFM-HTTPD-Conf + + service_prov_name: + description: Name of service chain Provisioning blueprint/deployment + default: NS-LB-Firewall-F5-Fortigate-HTTPD + +# In the node_templates section, we define the nodes that will be instanciated. +# We use DeploymentProxy nodes to deploy other blueprints representing the example +# building blocks. +node_templates: + + # Network-topology: + # This blueprint is responsible for creating all of the common resources, + # which are later used in other blueprints. Especially: resource_group, + # networks, subnets and security groups. + # DeploymentProxy is being used for the blueprint uploading and the + # deployment creation. + # There's no relationships defined under this node, which means that during + # install it will be instantiated at first. + network_prov: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: network_prov_name } + blueprint_archive: Resources/network-topology.zip + main_file_name: VNFM-Networking-Prov-Azure-networks.yaml + deployment: + id: { get_input: network_prov_name } + + + ### PROVISIONING ### + + # F5 Provisioning: + # This blueprint is responsible for provisioning the F5 BIG-IP VM in Azure + # infrastructure, including the necessary storage account and network + # interfaces. + # DeploymentProxy is used for the blueprint uploading and the + # deployment creation. + # A "depends_on" relationship which targets the "network_prov" node is defined. + # It means, that during the install workflow, "f5_prov" node will be instantiated + # after "network_prov" node will. That will alllow the "f5_prov" node to create network + # interfaces in the networks created by "network_prov" blueprint. + f5_prov: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: f5_prov_name } + blueprint_archive: Resources/bigip.zip + main_file_name: VNFM-F5-Prov-Azure-vm.yaml + deployment: + id: { get_input: f5_prov_name } + relationships: + - type: cloudify.relationships.depends_on + target: network_prov + + # FortiGate Provisioning: + # This blueprint is responsible for provisioning the FortiGate VM in Azure + # infrastructure, including the necessary storage account and network + # interfaces. + # DeploymentProxy is used for the blueprint uploading and the + # deployment creation. + # A "depends_on" relationship which targets the "network_prov" node is defined. + # It means, that during the install workflow, "fg_prov" node will be instantiated + # after "network_prov" node will. That will alllow the "fg_prov" node to create network + # interfaces in the networks created by "network_prov" blueprint. + fg_prov: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: fg_prov_name } + blueprint_archive: Resources/fortigate.zip + main_file_name: VNFM-Fortigate-Prov-Azure-vm.yaml + deployment: + id: { get_input: fg_prov_name } + relationships: + - type: cloudify.relationships.depends_on + target: network_prov + + # HTTPD Provisioning: + # This blueprint is responsible for provisioning the HTTPD VM in Azure + # infrastructure, including the necessary storage account and network + # interfaces. + # DeploymentProxy is used for the blueprint uploading and the + # deployment creation. + # A "depends_on" relationship which targets the "network_prov" node is defined. + # It means, that during the install workflow, "httpd_prov" node will be instantiated + # after "network_prov" node will. That will alllow the "httpd_prov" node to create network + # interfaces in the networks created by "network_prov" blueprint. + httpd_prov: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: httpd_prov_name } + blueprint_archive: Resources/httpd.zip + main_file_name: VNFM-HTTPD-Prov-Azure-vm.yaml + deployment: + id: { get_input: httpd_prov_name } + relationships: + - type: cloudify.relationships.depends_on + target: network_prov + + ### CONFIGURATION ### + + # F5 Configuration: + # This blueprint is responsible for configuration of the F5 BIG-IP VM + # created by the "f5_prov" node. + # DeploymentProxy is being used for the blueprint uploading and the + # deployment creation. + # In relationships section, there's a "depends_on" relationship defined, + # which targets the "f5_prov" node. It means, that during install + # workflow, "f5_conf" node will be instantiated after "f5_prov". + # It prevents the situation, when Cloudify Manager starts to configure + # F5 BIG-IP VM before it gets instantiated by "f5_prov" node. + f5_conf: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: f5_conf_name } + blueprint_archive: Resources/bigip.zip + main_file_name: VNFM-F5-Conf.yaml + deployment: + id: { get_input: f5_conf_name } + relationships: + - type: cloudify.relationships.depends_on + target: f5_prov + + # FortiGate Configuration: + # This blueprint is responsible for configuration of the FortiGate VM + # created by the "fg_prov" node. + # DeploymentProxy is being used for the blueprint uploading and the + # deployment creation. + # In relationships section, there's a "depends_on" relationship defined, + # which targets the "fg_prov" node. It means, that during install + # workflow, "fg_conf" node will be instantiated after "fg_prov". + # It prevents the situation, when Cloudify Manager starts to configure + # FortiGate VM before it gets instantiated by "fg_prov" node. + fg_conf: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: fg_conf_name } + blueprint_archive: Resources/fortigate.zip + main_file_name: VNFM-Fortigate-Conf.yaml + deployment: + id: { get_input: fg_conf_name } + relationships: + - type: cloudify.relationships.depends_on + target: fg_prov + + # HTTPD Configuration: + # This blueprint is responsible for configuration of the HTTPD VM + # created by the "httpd_prov" node. + # DeploymentProxy is being used for the blueprint uploading and the + # deployment creation. + # In relationships section, there's a "depends_on" relationship defined, + # which targets the "httpd_prov" node. It means, that during install + # workflow, "httpd_conf" node will be instantiated after "httpd_prov". + # It prevents the situation, when Cloudify Manager starts to configure + # HTTPD VM before it gets instantiated by "httpd_prov" node. + httpd_conf: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: httpd_conf_name } + blueprint_archive: Resources/httpd.zip + main_file_name: VNFM-HTTPD-Conf.yaml + deployment: + id: { get_input: httpd_conf_name } + relationships: + - type: cloudify.relationships.depends_on + target: httpd_prov + + # Service Chain: + # This blueprint is responsible for creating a service chain between the + # nodes created in previous steps. It applies the load balancing rules to + # the F5 BIG-IP VM and sets a port-forwarding policy on FortiGate VM to + # expose a website served by HTTPD VM on the public interface of the F5 + # BIG-IP VM. + # DeploymentProxy is being used for the blueprint uploading and the + # deployment creation. + # In the relationships section, there are several "depends_on" + # relationships defined. As a result, Cloudify Manager will be waiting + # with the service chain creation until all of the particular VNFs, which are + # going to be a part of this chain, are properly provisioned & configured + service_prov: + type: cloudify.nodes.DeploymentProxy + properties: + resource_config: + blueprint: + id: { get_input: service_prov_name } + blueprint_archive: Resources/service.zip + main_file_name: NS-LB-Firewall-F5-Fortigate-HTTPD.yaml + deployment: + id: { get_input: service_prov_name } + outputs: + web_server: web_server_value + relationships: + - type: cloudify.relationships.depends_on + target: f5_conf + - type: cloudify.relationships.depends_on + target: fg_conf + - type: cloudify.relationships.depends_on + target: httpd_conf + +# In the outputs section we can expose values, which will appear in GUI after +# the successful deployment installation. Here, a webserver endpoint is being +# printed. "get_attribute" function gets this value from the "service_prov" +# deployment outputs. Once the "install" workflow is finished, user can use this +# endpoint to check if the service is working fine. +outputs: + web_server: + description: Web server endpoint exposed on BIG IP Public interface + value: { get_attribute: [service_prov, deployment, outputs, web_server_value] } From 87bf1422a081224be11753413a3862f3bb73cd03 Mon Sep 17 00:00:00 2001 From: jrzeszutek Date: Fri, 8 Mar 2019 11:40:01 +0100 Subject: [PATCH 4/6] updated zip archives in azure_case_e2e --- azure_case_e2e/Resources/bigip.zip | Bin 7444 -> 7248 bytes azure_case_e2e/Resources/common.zip | Bin 2983 -> 0 bytes azure_case_e2e/Resources/fortigate.zip | Bin 4978 -> 4905 bytes azure_case_e2e/Resources/httpd.zip | Bin 4952 -> 4914 bytes azure_case_e2e/Resources/network-topology.zip | Bin 0 -> 2037 bytes azure_case_e2e/Resources/service.zip | Bin 4167 -> 4227 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 azure_case_e2e/Resources/common.zip create mode 100755 azure_case_e2e/Resources/network-topology.zip diff --git a/azure_case_e2e/Resources/bigip.zip b/azure_case_e2e/Resources/bigip.zip index f559c9eade38d7eaa7fc7b3ecaf0fe3145b78e95..a26399cd58db2645b9b2d7b3845317ee05c302ff 100755 GIT binary patch delta 4935 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 VV_{#?0YH~;?Pad-f7KfU{0}MBu{Qt! delta 4950 zcmZ`-1yIyq*Iv4%W9gP$N{|#-xEr>{` zH25NZ?>GPVd*{0|cb@y3bIyJ4@64QgpE(24$+Ad*j1j>|10=g@>fdE_%>TaJ<&ep;fkTqiw!5rqZ5+U;v^=)4tW`sQ$J%c71SbgA_ZMbyr{b|D9O(RW&K{e zjY(^Cu7*=$wrz%pK;425HD*)a=c0|mP7--ZCkURY-5p1_BkI)(7}qIopVtd=(1fDy z1b0@+0Jr7++RRPe%4JwF15VF*mJ(7T9llWxcW8s1Fp!QKf1MxCyN@-kOc`v9APeL& zHiI6^mW1Sa$SorBtXGMk42yhRjc5S7DJ3`C0Y#Bdd{AV9kAJ|95 zQahc~c<8z6R?wK_HAj?`CYai+LjlO0 zXXx^pyYw{B&Xw4uS|0lQtxh`n8e+cAY5O<%SO3)aZ#?J|pixb=7!{GL0nCQh2 zU<_oJ);A^A8r)nt@E*~%=ct0Q>d#efoFCxPDi6?_Ail)s7{3P3jtuTHmkdGu!LSQy zmtP@e(_>H~BEuNiB=c#(?L$`&A(IwI-Wlm7$?R?_OWsF;_~`ftB8({~A;e)pMQfie z1ZLF;2kMBi7_Cn38g9PEVcM*xZaJC&Zq|nJ!XWf`-rBbvw^`&Dc-gY$cSDNBdKC-Y zgmounSvDm!OvCWsLYR#Gb02v;Mh1slfAdzJ_006>ldgevd~}a0Vs9gQGO$8t^h)Y` z1pU6g4=NY`?t#x~OX?JQ7!BE;@leyNv0G{LN9`#Te0?E!GEC1(SLeRJ9oV!3NWrXv z2o@GHpX^zea59slA8YsyIUEne@nmck2f9bXZ}fz0@=uKjeQAWT6uirTQV{ZKkcscc z^Vl)@&De^IM5-z|KK7U+yZx}uRMCP|Ar_ajGKMdWbTrc@S3O+yC3Jk^71S$DAahB7 z9CPn^OQ?p;r^K!ycnib0I?dh`FdugL^dK(gk=`c4M5qquHD*?SumP>p`{A)&CMRd3 z_p{%TuB+IaR0A+|gyWgWNj&U)>wzZxe*_f3QjLQnPGU?&}dJjqPfP16<_fKgd|+ zzRj@OK~azYeE2BdDjG(w+oL|B-ZltL<)m7CMuH~94c!rc3LSdPt@u+KQo2pW z&Lyr-iVW)MS{UI#uloPqa->?^Gg9LL9lnuy)$>%8e}hwMb63T3^7$4BtJJSj<}PL_ z746K;@OmYv+B_~A?lb1>49ss#8-F2>aKRj#zQzDrbvNb$${gG`Os4U#i89afj0U#GVa^WpH0QS-44rZYWz_a&{$ z2A{f}YGMo8{iXbh0774cieu~^sn5F)iA8Ya=2)ZSFz=P2l7q}q^j5maCxxAE*-h58=bYdrEhH%~$e!qR^`L`FnPlqk) zo)hawC%uOUjLdnAi~%`Zy1pD1u!_=i28y=n0ofa+rv}|ileDqaGeLymXwJU+T7s_6 zFVw>fmIEIBnD%Af^lpdrjCDrkWlB}8<12VmPkY_X8;+27P9o3n_4qI{mlO7rJ9){@;J{ucm3 z8j<;sO}ne>+dslY9%6$)2FQLgS-{F*`s(@FF0XindGa)`0*gHORXfQrt7#6$uDD)m zCMs`?YI-jwN$>oKMJ|muN6<+nL+LxZw10E|C~K+CG$VPC)E82>Y|IdXGqsQworm@Z z_q%7LC$SEbS6kroj#^LJT}pF($M&e_g!RNP=W2GEi4LvOXy%~rK518418&s@99ccG z(Yc5cMIfjj%uvzm%4hCsYkBHL@^e*HneyzPgfu0P^v>tTp&>uim1Vb0f85+%of#w6 zwXQBAtt|4#qt{xYs?63`87X-H&Owz&mNAx;@%IS3lsro`NTz@Y(Y*OYoYZFRO6?1e zreuM4(`-w-acY#H?nm&B1Mw-}jge~9lKMeAmp_kh$;v)YFdz?Gdz1vn6E{Sc2vVdH zo3^HMl34SK-()hFNi-^8y`M_4_KxvYp!z3>RwR|DJ$0gytq7!9RXF0_?fQ{DURm;J zI3;1Th*HXDNc}AKkvN0Aozmjkom?y;uzl(T?d?w&?0bf8k^EoRjR3u+y-mq->&ttR zM&XKBnP690KH(2(d?}nO6Q|x9AH(tI=M^}+tE103CkAL}Tefs8M{nwXFI!coAVpsA z7l?V!gm1EJ&4u+h`Aty{2|t+7?d%;dz4!DW-H{LaGw&PCF9{~!jyogmvy(erp#%@n zXl&15P5Rdh^LJ0ZpsqmBxhA_~qO{X9;ozrVQ7^r}^0r0aY#?|x!=hgS95qJgC%ZCa zZsz%q&CP<}z@9&hv*YpfAZH3YEab zmq)ZHZWHu|T4Jg=w+a)yv^h&))_SqLrnvAOaQz*$d{a-3iA1p`*W!ay*Ra{9##C)d zW7w~8-9~N2q`A9$djWu-WW5XdrIP>c9ffT@8#AGde#oYx?ORr_xB14QXYafA5fOWk z`IFq=WQIC8xHKRF5Qq?TRTb5^l(%qjt`1XG{C-%y+pL>i_QF+x%IBa=qZuz^5x4JQppY6RYJsRA`k#6ZsyPcOps9`PU@cJbeYb!jUR){XJ?@4PAqW0yOU4=N^v7w?)kkFg*#K7r^;eMT(t0 zEVj-dB6t!8IbO*m6cl^vC@vMAFC)D6TYy@WSDGOtO#T_rivJ7t;f(Xb1f z2AKR5UZHiXC9?B*IkG!r6y2(mJ-!Ysa~ad2-`2}g%cHH4{WhxJ@hhv?L;H~UW=>=% za`!Cai0m_;gGOdnT9Htbw(n;(3^lH?lM+j^r6_?-hN@tF^PT3kxA)$1I3eruc`P-oz8Q=>xkP2nRm{K$L3H zx;E=kq3EVMN|@X)*!yJ}1Fouvk8Txl(w&{j$izP+S_}2F53)L=dyUd>Oiqi`s+Yq4 zjbl>&vN+l6<>eQ*q5WmTG&_5P8Utiff+1`~y+ z)g<1yLg7wGVCkeP1FfTTVUmJ6u)z=}1CG_8ux?%SJPW{~Wt-i5Vn2rsb-TQeb6Hl2 zEk9QYSf%k$)6QfZjAbu){l+nj6)~bzC`t^imW%Ntds=={-ttpCAYapTib6jpc}lZryVj7i2c9n$opEag0>_)jRW0- zI$kUh>D0Ud1*%Qx6yyO%_^tGNGh%`-48G@6Ltk6ncuj4n%D18{rth!!x+y|3youWq z(NS)9;vr61IylxK^GvrZbj!cuMFW95xULc!e56G5!`aG(M_iDaQ$+ke@j8y?6!tV> zM#AJMj$inmaF5z@ZbMB+$1R9Yz6g~NtZ%^@;%y{ZD=8fn)l0yZps$|K}$ zo;wp8>$AxgUideS?#=l$=$h+%lbU%AoAKWHB=rVp7m1^31R0oXho=;1jmPmnJ7b%Q z2)s$E^hBdo@r|Xfrq72;S%z~)9E2gVVm;p68&P<)tZ5j%nk)8{R$(NpOp+JR?6r8Q z+hA|kY}UNiTaxuTs6dg-i5}xt;gSpfqEd-?{TJ0sZliwMH&qVMbomO64eAXxH^Q zQHp6+_AA;^u^YDJQfzDzP5h27an+8YTe&%TmBhW-Jc(KIorhuyu#hN;BLeegOg&u^ zd9-xYQp+8XoHdr2kiV^!D%)UcNl5=7UzvH%jIHCMa$^68XuGrYtKw?M2GouG`2nCX zAlzWsi<=a!wb>vjd9U8@`9*ce?vG_Pfr@fDKEoPlxc`j$P{i)iE!x;vs6w(;q@VP0 zv5(B%0t-m|!L69vZON`;EZMShCzcu}KmLFHD{+E%L}5%XhctIP*DPA?81?Ho3HRtjsKb zIXy)l$UJibSS|j93E7`f;7BzZ&NtqV59|&w4$3vthxbH3eq8f1*O7CjVFV${Wl-ys zi#TReir+Si3HB5-s@sB*j<)P2G~j|yTe0tablF|hF*BggBhY%B&;-LBc&5XJipJaB zU!475SRlql8y6XLLmR$l{iY<4bp2d&j(OLO`8PJwi-8%5qT{|{q}HD%)I5Uq7mE*G@@R8CCcGxrc$V@U8WG#az`+tbp ztKN#(Rn*_{X9rq>Ye#M{Cw>gk&tCdwq%N5C`X%=SGhtg2Ut2{fiI5dwGQ7}hhc>W0 zwgp)dqwckv0V5MO;_8bT8OO+mFW!0WQp)&ukG?A-^^HHqpEOj+Oh!_CRsPjKB!WzT z9dwzPu;G6kl9)-5FPSLtBLlAO@0eJx4}P+vm7;oeOy8?1`X2{3BEOE}1X^4FM2ujW zycoJp-oMdM2Mb#f^#3W5f97E6Dl2~*PXDD#h_BNO0%3s|K(nquTK>loti0I1Yofmh zj9~qf=})%*^N#)}lQ8xFWxBqx|9xR!OQC;KIz3vu{ra42&zS*$N^Ssv>t~Urk->R0BSnAr7j~2BBT8H` zgSPk?h8rd=EsoYF!7}{TjF%WVpip0@ULR13fAsh z!M3cahc%3WAh@FDAq5kygZi>K3c#Oa*`<%v0wjEuOp!rP0x-d^v#k5IPE^&0u1c|a zHd@AMco&qMy+)YSLO>VsiF{1=17f!NTl5stIeok~{1;2FrpHXkbj0eK$6drLa7+eG;Tu zy`^8qg}=;mJTGT>@lgd4Xacff>?w<&4^b^G#R~-!nVoeandfAdFjpIlWZjPrIy3;e zJ+)L?^$3->!O485Q;JLv@d4{LlK1xTI;e_vHLg@vmoo*y1ItHM+ULhZa-Uw0u^v{c ztK%}^HeNDRJbG?~nJBOI!BZSJ(-*{M9v^?=cSUnpg+3*~X@ zOz?XQ?Ct}VgJgN~ZOf`2RAelyTIXI}x?{{VKnKH?2=F-1PV9rS1W*%OdzkFq8rdl! z|7g$p--MHp5@fG*78pttV6j2D8E6bepU(>aOurJFXg5D3*tRrxqP_=m0KD8sFVtg zH3e_CYL#2>!_$-+g@}JraeVxv)i<&u_eVC<)a3-*>4M8BIi2}4#-s#!tv(58t#@YS z?wYgI!%=rh{`I$WZx32!zw@r36~rGL=4S-cDy#aD?BP6{<+FLYw_z$En9%uVSD6|OC*_fYD_d+myKfs-*UNGniK~aJt z*{0CWm=eF0>(YkD{I#?$p%LoiBymS@xNL{D+_V;NtV;^(v1i%bsmaE4FSg7vL&qXC zsdo)lv}bN=%DL=)9q0V;7-v}Lt{mfr^;=Uv*Xy~LpM!Q!A7nyreA;4hrwxjeC_L18 zU4Nr`bD_PAntx43d|rwWaE`k6poL~Dso@-XP{vv7kBo|~p|t~h_?`j-9pBs9oO!?h zqPf=j)R?M*%%I_8NPSx{OL?7i4aD%`MdL4lp(^KE-r2h%shvE+k2-n1M7ncsIO#oX z)Wy?Y5C>wmaY$mI<{O#|I2A&0?pD}pz}_nF?%XhSY}O^EP{wnCtJIZe`gcWn>-?_l9j%X=+oggyd8ZE-XSmUY zf%ii6rV^@3YwtdGxcDNbxM<1F9LYoOc|j_Bl~k33%j7Z4(@nh)k^VtV`SfqkPf)DJ z4t9(FOweBG&3l#c5Yp62$0=y1ITWO1he{k8ti9goUElA|a0@Fq6eDXNY>h=QXjnJL zF~G8xDt%@$VrFUk%~Oujk4|b8oN^HHSgXlb%Xg8SG_jq7+kGlw9w5u+sDJ4cjkg_( z>z-B%vUI2-CD>ASY(c6WiX7t&kGlLnlR5;E!TH&IJy?mrG>F*2Z%@k#!7>)^FDOIi z%FQP+d9t+Jd|Z!$T0p|w1o@QauESl}zJCrIwstxXj}`lH$a6;MUuJ-s#NS`s zi8o)+LcHv#KQ%cXV6d<4rhP|?-E5q>a`du~!ya95@G~BwZpm}ERLu<|D3ypHRSs{S zG{z37c#Lbn)Gr?IpYI2k5oBxxH23{5&qIvJL^h7?4=gnth@tLJmKNLTgtSZ3#r@c7 zj!JwwgN~7H5AS=whH<~*y99z>mTch)Cd+wY$&aNb6=? z9#xJIkNmRR?a^1CdtnDc7!=hdQ;eGC@OUnWh&O)Q!mzpB75jdxyG6OV7bGH97Nv^# zR7&J=e!{M3XC)N#1h;r~yFa7Y^nNn{x*CZVr)gj^$e`F(&YuV}A#o^J=Y%l|=vkvTM{S9-DWX*hTQI^vJw zuH^m8Rqm&UufNWYD`?4pB!zrZKF~uoQk~YNcKp0Aa<(z?JgbOby(QrmfnR5xRw%5d zNyV|l-L{$9uV3LXu#n+xY?Kz^+FdaP@d@AX*N@copYI#h zO4{NS&g@@L-+)iZ^@@7Gs}wrh&^NLArWVuYE87CmP7ci4Eh@aU!0RUs%0JSHZM(!k z9Z_Bvjd`2%DKC;?701 z_-ePtc%s8L#5?}=WxYH)Iog?NR587xG`Ul!#kxzMsqj=qaNUY*-G$tgZa%nejDFSCJ-S0 zSIPho02IuR+>xh^GW>{7zYPDC{{;STR`dt(Hyp{Y>pSp2#`ISPws&M}Lfa^VYVhAo zKjNSxQ$V zrR;grBqI*SU&3tIk$bMLL2zrr56i~^>R`K+{3oovw}}C5e)?3v`IvC_T9?Ybu0f)4 za|$5#HQ^Rmtp?%|T57Nbq6jbnr}%%QGXKg4VJWezo+-7^>Ley#-!<>9_k5jWvdi}3 zHG?G?Z$(E2X-?XZP+D;oG5>%jwP@WiGhg?|V~?~AxjgIL^gYS!L3rYLR-C5)@wf(ROSmZM1b2U7Bw62jXrO&(Ul=Bm) zA+_Z_@j)=kj0el%+XxpbbULK5Opv$vn!LLSk#Y5b!}EG_K@e!@l{{>yEj%sf!6WI$ zkMZN;=Rt>L2avISwD|~&ruCc$t(JaLe8(AMZ|g9B_l%Zf{IQ%I$$D*9nDEdu60K>+7_>c$SwMJ>Fg+l^a~(9#)1CA7srCF9l1n=r2<(vAP2x zu1X1q2JvE6s@=#;MVQE0R7}f|KH5q-z+3-LR;C%v)c01_ z$#`AOlS2?5jbC9?!DCpurQdt!f+NZ>N%{N9JWZXV+2fe~LCgbZGh3sc$C{zEizK%! zE#wo+KUn@~Y9KrREKF4*x*Dg(=V0HS1!3#Lku@Ta<=J$&OC+N;sHxIwAdwC3AD2<4 z`zEPhDBrx90+%Mh&6^{zlUOFA6sdY*d{0>>pPDutK4{7MaVv$AP}{lonz{n+DVc94;dPZxy zF28T}aMBhop)%fB3D8qRC)t6$L#t+z6tkwU3#Q%WawzWG)m%7Yb8t~MB#v)5j;UR#LHm@p#W|cROTB)N?FsU)_6U^Or2;hzRO!5^&)c zoKfkG+pg0Y;g3(D5?0k|Hlx|ee2HUhwg#+NPXj?ShKP03`j~$I#?6QmOAy9|bwVs| z%6$)zo2&3fsHSvjaQ5Bu*HpgIJDqOK*FTbV%1Vu%aVp6K_cGH}sBPeek;oTB?MZxb zV)L9u-5S9a*ZUpO}Q*AdYn(KIU0YyHNJJ1cu5) zWINhLwAbOIb0~eJPnoD4W~RjfE(93n@0)qCG)9!*xnm#+z{Y6Ud_I0wTi>3K^^v)w4K}{v+jVjb9Ram)7JzB+;D@y% z466AVLCnO@$xUXjmJJQrt!C+qrnnI0m8>V42>w~TjI;A$*(KSRx5VG4p(8jD8+pe7 zFwM_eCuQGAXO1?eYGE3i`^On*MNsn6kUn?L@aLBNiBp0)YhmK=J{4Z3qHXKs2tysx zWC1VjBUZOXP%pFoSgtDETjguec)&_%H4W6eJu(9-`^wm?DNk6}x+^TuW@^Ogy_WKi zVD(Z9OEOVp3FC1-q^wYtvpP^mqj4ELA-t1row=Kb$5eSVcRxsBZ!6-g>sWBwI=Yvl zt$Wy>VQ5z?3PQgc8~0+&(Aq!w;pnpwsp6mK3$FtXj7IpIYC>GaIh7vZz3Tw&k`x_N zGhyrqV>*5?KYke>_(Tck?^9<~@t8X4=HAjpp89|V?r}3zD1YTY^^T-KPrnGDyaGlQ zX~D8>NQ*=zJ-;>s2gu(})v^DQ3&@=FcTkCRah*E9TwL%?4rNKIA=$14Q75G%+=~2Y z^8}GE+w1JN(uoQaD9*pAnrll32A>cq^1d0T##GplbzOpGm^3E#7Ft)QwRliwL)Gk| zv>c^y3d0yEwLCLNIH;kK?%oIDr?G`0b@u&e5|0fPJdc3~#4eEgRfRRml)^?l-l(UawVl}O(v5yvO1@+7W%#AxUEJzC)IjclSSt`#>hy=K#f4mPEpwXNRnR19OpdCFO zgzT;szl}tqe_3%Kd1jOyhIv@Mu*jE6zP>-qxS+fzq@!0W_?SmMS|Lm4lERITOr8a< z1jpZcB%KP}l6M{+Y=MlDjWGQvE<-aU_k3q#47#VC=s}j_(fbWUZ!D=B>l)vqw=$m1 zp7I_<&WMCn9X4U*nHd55?cPhq(J=mKT|wh{%cC+~X%Fe&>MP5rK5cthwP%-G?QDm zS?$##hw>97aIz?o7bZq4oJ@LDCTTq?d9lX{H5+-G#>Kp59TH!l>2V$#Ou!5u{#kB^K&jl0%f2< z$1vm^XOD)@AeVx^{Fz1T1)DyzHEw7i4ayh`PsS6p?w zX&4{d#eti{k_zK#R5a3HEQ7ggDELA%JIp4&esw|KY4?q?u-YhX5bP0LoR{SSGY}H> z(8~FObyOCZFfq67(zG@QuO8pgFTTho?xl?zhX;5lwVnU8%XJX(AEC^B2tt=w+bU?AbOq_Z}vNkG7FW}HKC zMd2>eFH}Pgq4oZ=-o6Mt{|`jT)_JKlI+hi2nE1+lZC2i;&SKy+F=0u4LL;AEyJ@Z) zJf#-4Ksbt7rvpCM8SN$q$qxJhdb+};HMwe8XeCIRm!JVoZna+*MsMRvPT?uv_cY1;A}M`w*xFMNiV+al}_D@f&>C4#jQdl1Vd zCq`ZHF=z@if);3vcS8vXKVTmj4z3d5{~;7%MJY+%pM&wvn3=};zlbQLr2hvn<@}AU zH^zSByf^;8F_rkwe*gd+03!g_%qsRfwY}2cqoK}UW&9JqaKdi{ejEFZyWX(zzs3H6 zX8u#}-Y51y^$7NE|1JKv-oFPI06+uy&$Hbox{*VCqPzv23t18A2LCKvLo{#Lyjrbc4hYGlGKD&=S(p-8G1yNOui_G)RNe z@Z&w#d!KK;wZ2o^_4Mm!%Xf}JAc;x^A05A~%Kn4H+ z>|8y(9G+Qv+45^E$|-0lf}Cy2A%?DGg2cg#=7OX|b>Lc*iY`tu`Rh0pJur@Zi0Dv- znBdM_RP0E|+5W)HS01iU7(rXTS!u41jtAW_h7uc=fwlBQ<{9nbYWMXiBF^t6!VvqK z$860|cMOp5^i?UDl7UOiAkZ(eH$i4-HcE)Vi0SZt5F+^(vyM52Cj5(${Nz#wCE=^wClYv$Hq&tw?#x5}A) zzW+EzJgePsFr~-h;1BO&lOUMdN$*b3-!{gEK44?$&9*2Tqkqmm`#^rc$G+z>Y4509SBQ`S;!#56ZLGwUFtl(={35}^5&L=)tc4z?8-M%a$dofB!`DgU zGQrAHaRd+7-;Ti}+9Ds{@Y}Rt7{1C-BV+V0$uD?UO8P-iMqfAMK;6-uX{ZF!aw?=6 z2}P4Y#5MM5`Q2*Fhy-hs^QcGrR-i80^2XQCtZNLGXSJ~ zx4*hxfeMbw_!@m!c{y9pA9B+{fSvxDVp5q$ZvObVcD4?GGO?nlkZefO6ma$o!EA&*>BP#aNDsrVZ=1`&2mt*5(f3nX%ooz#I zr!e$5rN|&XJ@#JxWH?)uv4O){I&}ui6a-&*6X@VLnQ~DfY0C#lLajRr>ps^rx5heG z_A)GM8uXZ|DtJHg1>L=zlDdHYDTn9q!3d$*mtIRT<`!$pAEMR;Yw7kkFR#3QBtRW) zBqj3W0%SgBtfi{kb%f~4t-P61QYNzAR@6)Ox9WzzL1=ms(PV@0tPMHveNINE)337E@ZmgiyI+I?N>q8k02&J(X z9|~1`@sK^S&w!_n7Of{WZWd@@SD|vXHfFpz4QEC8Fy|jp=cMz;2>ij;`^Cb>gRyyk zp$jEZ#`m&5hV`^|Y!yf(0#k+y81$-bWJ@yuDu^90!|xS9l(jr>RRPo38hvPZke@$<0(c|jw=}EdO2pL`Od-WWLr>K-JvP1R5=S@OppZ&gabWw(TaD}? zeB*wX^;M9zdN0CnY!GU0Le;#u8jLhprIwKuXU(_lv-IAJ!8`NE^xM7!XT4&N>Ie+W zCLff34tBb&dQ@Fl+_3sHAuaR$co538LvJ3`A$`97uw+2=ESqKpzQzt%a7nE}@!5RUTw+>&+c^zGa)2KBoUjT8H;>LiuI9p6as8@_ zjRRP=2xeE~QO2|)&!OM%#~$Y7xJO%(Zy!%&vabAxD0Gl(k?QRwma^z~FlBcPvJ`Qd z+H7>PiE|Yuti3IGi0yGwML*fx**R>H?7v7i{fHp*A?V$QA?6|8`E^BVoIt6w-qSb^ zUkmPa0=CLG#$4hQ$u))Uo7boP+?iliyND}n3H-J4wqW<`)YG+Qs?3K&k9*yI^l|oh zVepaFv_K{Mmejuh>*T4krzn{eQp5Xw&nxqSf;?{N&i&!Ifr_rVYEclTz^%Hv_JK}( zE@8;G`{at%(NEQ-N+l_#aMgtZ*jZ)1I|UTpw$6P_JG%vFsr}wk>uuZ?P%Ho-iU$C= zTffJ#td%Ju`mL*VNIP_--t*>n74ep^C~3V#gy3 zdX;>PQLLX8)fcr_2HChe(h1m%rNiYzM( z!>;J-)k!`9wk$;YepM0`k-Mg{p;6g&A+?3`}2!Kw+w z4u&M=T?*D&7HJB@jKT@9*V-mpqKoqMd2JWlt0U;oi08L6z|bVJW_TU>SVmZ8mTY{X z6mHZ`#65Wlth90EEVm!cbMjuwK3MXtq;Dm^%5SeMnH`LLS#}WSoBEOhcScSJzoLGF ztIzh7i?zS!-uETGku>fR3AsvI)z7N(N~A48WuwtTFNbhTm@D1U*K!miu68hSyv(Sg zM*}%zk@+6rYE0;w-%~9Bi=+E$Dc0<}HhrZ^v+PV%z`@Px4I;ozT2hEUZxrXCDk}9` z?vz!RPC9(k?zEJmxa1fPCjnMMm1z_-NZvbZ>5iX9j>OIxE{Rv@3r+U(`44b5hoE?g zKGWsm8>GKQiY~JVzKBW)Ez;Y}F=kiP^T}(ozXvg}@Pq0d48?bfP9!%a=CX}32M(fq zw-!Rx;t3pU*Qis@P$!Z8kuog-4T>wFIQ6)36e^wnZZUX zIu7D7iakFHAW|0=+P6@n+Fd6ZRCM*;+XYvT-VtLLY?tmv!V7xms2X|(eE~E{X8x2S zmD=sk*U)5?&RB);#G7S!vs-HiN@I3xKqWZvB2k1}Gja%cMd>GqJ@3#qEQuh%i z`h=xjH;E&iwbYVYO+Hpl>|O(1KgmC>N?ef}@kq6;&VZPu*zgwF{t(4~gftCZYun3| z!Xjh&mJ-ZFeQ|&Hv_>OwH%@}io+fnydgq36+$GX34G*MRPm|dAW|}N37kM3S#r7?a z_paDI9ef7kNqE~xErbVew&O|4EBtzi8LqZhoGYfr7Ay&0vB z{U(59y~t96)@*C)g{kc4fIX@n+c;qio?Wfh9On!ZtISJ(zb*k(p>4n`8ZlK~_(;zA z3g3qzypqIBu{`6`n3xzB|L^Q_IQtrI5ntqaPw(QGMB_7=uP0vG@JVY zCAiwU;vd(;5avLMx0YS&fJsxRFUV`(NDNT+GcM}WN+#6d5RW+TN5QDb((~b1uQ3Pr zpSBd|VMxK|ICi}*qLTS5~4?;1Xun$YEq2;ol7!QZ7V~)zZJ%pIEBVAS* zLW77ITaz-?MN{e>rSrbyo3xve53Ff^E37jxqnyZ&p&@7wX)9BdPpAZkUP<0^C$jG7phxA`x z^*fRn_J1YuA4UAfW#RqxDgXctKn>_u*uMjrK&vPJRpsCD_v+@McV_P2%KJO$OWgkl p^j|Xkm&f}ZU9j;N`kBQq^uME)8t_i!0RZf~Nr-WGXcGUK{ttH-s*3;s diff --git a/azure_case_e2e/Resources/httpd.zip b/azure_case_e2e/Resources/httpd.zip index 23fab8aa34c043e616fdcd13f031d900e8b5dd7b..cccaed415966a36c9fceadea6c24e1dedc501d9c 100755 GIT binary patch delta 3797 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 INPeyU2TU*fy#N3J delta 3855 zcmZu!1yG#H)*ak3Ft`MQ4U)iw;2wf&&{^EwAq2NC2^QSlf)gYJcMlGOP0(P$7k3GS zpUwXJ-oDzsU0tWEy1LJ;bE~dYG0!lARTa_DNkD&?J0KGarUy`s)lTND&k(ORA&;t@rTgNhSK-C-g00&XRn5D}>_uaeg=VZ|Oz_Xc355`M zWrjGI>u=+XK!B!CJVQQaP`s{mvWzX7a)2t>TsyhxqpIL#t|*CVNZB!zloDC6q+k)P zXNDer+M`o7?5#EzEM6NgQ@YF=Tw%Tzp(2=d>kshx%sltGTp8KkIpME<;xoqFXipRR5cB!wtGa=Ij*(>=x3I&AHP2 zaP@yM@wUczKw~2ku2&qnD6eQU5v@w*H6X%oPChcqnaC zZ508~Y(>Ci<7gRFItWdbCUnsFtn{PPHryFzAZ|3PBQJ>`wE1#|esBoUE-f$d&i}IY z$h8fk=gCRhsuU-z)aL~*%-d2aH1KL&XQl7P_c8Ox+nVf|KM@#au#~2LMs-l4!&nlx z(dAi&L*g`K=k8rIQ{7@+XB*N3o*TcZU%%bPIJ<#e zNyd`hN;U}SQ3sTBCg!dkThr>J>E-#oYz%DJz43pHY|^R-5ZaZmE&m3)3ea&K7u@V6 zCZ#ArGtiC6{ZPc>SZcidb!1ppOApJmC z*xFaIRSt7;Sm~T$4+%Yao9k=Pdpcj+_QwUVv0)Q>l1OMlQ@fi&=4Sp@Q?ogCinvw9 z4fP|@>`al!rHZ70l&nMZO;z>mvek&P8%m<455IdEX6L`k%FWPNDv;2Qdt@$)_#xj$ z1mC_s4a^)%OSPmq>}%7kK^xS1$g>8-Zsy}Wh`E?_?J^X9wvwdwon+sCD4g&?Hhd-q zQqFAV6=H$LlXx2Dy`)}DjF@-q3v__%Ld@*QzRq;rb^3RWN)*x{rfWO(7t!1BmSzal zfiykxV6PrE5t|GC7qonVv0|adev8uD*EiWx*sc5LuSDAnCO4EV1xg&dU%vr1VkE<} zRtaCC>0^3I44Y9-VrPuy28UFtJZP0~zu?KMvLAKjQQcLogWnePId6AfgV#GpSp-h& zvadk=@)c}Kcscpymg5T1S~;RLC&gysv&<+S+&V2+djU|J(yL-2Eu{!*&Tb+au8I|~ z+vo~p@N91~_MCyqh$*aL|6$5;AC8+A9v zZ}F$s#=eusD}Wu*NDXAGo59Jbz@Nzq8`NYVt6a{M6r6q)g9#>+?%TEpZ>I z5xX4aQ$Zol&gZS=PpO*zq^GDoFc+h%WH0`HFi1W1i3&$lk~?m%3Yh_!vMw~@`vUHC z0;X67a!CpRkS7~+dnR_zYr$11-#Ty4me@3RX7xw?#S-7|TBrA3J(8Ar7%?oTQ0(+2 zQ;uR_EXa4!wmQ)&LQ~krGr_E%H56=_n!bM>u7rED9472LGFbtdW^fNsgD^`$z}uK5R<3S<7Fz*jR?bcj-7T}OcPAdb^4gIK&7&8 z>>feH<-HwD6Sh%W4!uWIy6U1L;4LTiI!Q$0@W-m#F5-I8YvVIs|)(7h4IgDv9qc~lLO&!!<;y*Szd>6~u%8SSBI zI_tW|Z>*|^XS&dS)ZveO$vJpP-=IJpyzYf=2GwM2$lz^ha~KyR6A&uZ(!L$ktL@Nt=j5_^baj+)eX>>WjJ84q5Ti{}sNwi~2nkvTw1gXKZ}i*k zY{+ls{hUi_{Gc)NKpF#yE}!z|g;$Rz%;7P$dUvS6+qZ*v7hNm$+-C8>9T{%^YQhmw z{i&Mr@V88)id^V*O>Y}_+E7H)epx`;(V1gMOz_~eKMMyl(Y1pBKcy2FdLCC{?L)fp z@ktgHD%C~^+@a!l-&@)z&FXcS#E8d4Lg?Y-h}djzFJ$OJSVR(|%FL&^mG&&drlzo3 zg_dCWjQVPVc?6mVLh1-`7;URk)M|V-vN=XdCZ(p`Y5!>&v}4yC%eUtu?9fxYJGX;0 zfr%A-mee4uZ}2o8k^UVY^A*Z)b@G>(xD<-K84^>x=eDQs{8vZP4Mgc_6AT=LyF|Rs z_T83xKFG_&MTADv8|Cd)&yGiiP90h(Hf->#1u&zm{OFu&#C_Y}eD$(kkFou8dQy}S zjLNK=PP^1fd&f%vFg)@0oZ`q}cG}~StvwguEsw2SBNPfh!TiF;AKW~r!C*;u@iX9u z!+9_cc`Rv}Y_w1VHA^V!z|Y)0b>*EDm|H5`@yg2+2_dl$ALHC~8DB$?M0PuTN|88X z3E6Q3ap3t(+X@rLh&&G6#=D$Z9Hy%>;tiD~BZkVzAdi~>{xQuH2>?28EZTy*v?8YzexH1xr}UjVA9QsqhRd0cn_x11ITsM|Zk)K!=GE1kb7YqbaC7FE=KGE#mW*(G}4ASk$$gJzx z8Kw7WrGIEfR5*;QdLAj6$AZe*orrT zaN_S5%_Ot8AyNLs_$&w+-9HB~=zR_R!|3ie6ck@XNP|hw^>rnqJ${f-1hp1D9-GJ* zbrn6{mPmo_zEe{E==d_%6cq%zysx1Q_b>jmKVDN}#1Dd@@s~sofHVB^xbb`Dsn)q) z9{h#>_441ktiONOjP=)K_-{QI?k{&iAQTV<=nhh%FmcbNwLSfd>mGq$hrg5kv-1C) vEEeZq$o|;|{GHW(nf%GhJ!_HPpBn##s)`txAi{e!u@O?jHqfVB`s4-k%lTM+LE!WW$dA~H0V%TO3)A*YpEln#=cZ(s0yai ziBzq{6UI_w4{C{qGzQZW+OgL%^v!$I^V&J@-gEEw-gAHFe$Kt;{C;0s3o!o?V7~=9 zd0T&6{52ikQ-81E&;Y#e>EM9C0Kb6iL{;0r!i4}N*4w&qu@lV!1ArGC0OY?E?&E(A z?;aG4CtM9C;Js9c?l`|!PORiX6f|ZzCP`cNXW$!o{b78#J`#Vt)R!}! zrdp4M?)HxM7F!!)LkyIX9L8Vj2DRsFac|zBAT+ytn)%f&g~_g%Vvf;Wp?l}9w;{UD z_FWs}4j@Z&kq(l2+kSEVLB>xDg$^vg7c9519@q$_BEw93sxD57p+KzDtHJyZaq3Ez zCKTkTlJQ#6q8xupbyvH6`}-r?`loKFStUF|7>{aoqGgu{^CXo}soT9s%bLL1@UJGU z)~3#SlfKgtx+YhxQmlp+h&}UMqr~!L2D%!O26MGzidg2$|KX{7CNKSs=be!WY}N!V z$IQ2XG+dH|36wSWHS}&S9`~$8T`Z1jhKBoTDf>&8R8`*Xe{wN3BM(TZc)kQPllUPP zdM-)egzm6bi{O2WlIF5${ImFX-tEed5=$aJX zO{0!AX5*O68l@0cn5^znG2=34pRejxWaBO&ZZ|wEV?PX})r{j7OT_=J{_toIH)mYLpQYgv5J%up=NQk1=^qQ=)V)Tz76@ zJ|nqitPZUr=BU0gJDl|Obz) zl~2Q0CpQ~OyN4jO&`@one{vqe#43Ghbqo$8ESff9dKNSWAFpAQ@AvwJQ_-%&aoglL z{}zX26RkjkuIm_M#@bMwo>FvJM9-^v3AQIEnu8}XhZ=@PUK8OvBjvQv1}@f0Jq-L# zoc=_9*r8osKd&FarCYGfRLA;!?jFC)vCiKRvgMxnqm zo^$Xm_c6)pagQB=ze~h^MUfHbu%UbaK;{Pk$uE@%J7a?jR>mqg&!mh#e-=uleKAUy zuMYB^v}_HHaTmZz`YnVUOMRh67P6PO$$Ue!(KFwvnMSq3jl?#%roVIfLXKXZjc&>F zeQ>jshGh5VKGZlYRgMF2ie^`ZT8Gmcuv{0f>JW~V z!W)c>eobA1<$JaKA|p{N{aBUxE6lAw{%HVWHVW4?E%C%yeA8bhDKU%oZSAynLD{=Y zB3()=EX^*BTqSM2c?LU%<{a6jY%)VgRDfWZqtdzlGF(8*^0Kwyk)53_tvhWGu`z;8sSwQ z!fOoEqTC_J9&n4)6N*g95qN^dN=O9z{q3()I_#Krwks2zJ^Hk7iD&3apeV{Io6wC4 zNs&JKFuOkGQvQ#_frXj$jo0i2;5Wvj90%vy(9qPl_0mDNfR~b{L$B~Ve6|)KK0V-{ zylLNV_8auy^0`w91F|2FK)_MpM=u4n?BOBM|LWg}FZtPj5c~J2?v2mP@C)wtDHRbY spn3oQP(M$RPpNi$N%I-?zX|gxYk`OOhZhP6?tcS#uN#8^Aot_$Pmwiu*8l(j literal 0 HcmV?d00001 diff --git a/azure_case_e2e/Resources/service.zip b/azure_case_e2e/Resources/service.zip index 64963a379b64bea436fe3b893416bea9f44023c9..29c814ba66fe3daf2ab4578bf4f7462227ae67db 100755 GIT binary patch delta 2693 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 Date: Fri, 8 Mar 2019 12:32:29 +0100 Subject: [PATCH 5/6] fixed wrong naming in e2e.yaml --- azure_case/README.md | 4 ++-- azure_case_e2e/e2e.yaml | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/azure_case/README.md b/azure_case/README.md index a92dcd6..ffca79c 100755 --- a/azure_case/README.md +++ b/azure_case/README.md @@ -4,10 +4,10 @@ Upon completion of this example we will have a complete running network service. ![ns](https://user-images.githubusercontent.com/30900001/52050834-12889e00-2552-11e9-9a68-452e92cc7014.png) -This series of blueprints demonstrates how to install a simple network service consisting of a load balancer and a firewall. To make it a tad more interesting we will be deploying a simple web service to allow for complete user experience. All of the examples are currently implemented only for Azure. +This series of blueprints demonstrates how to install a simple network service consisting of a load balancer and a firewall. To make it a tad more interesting we will be deploying a simple web service to allow for complete user experience. **Note!** -The infrastructure used in this example is Microsoft Azure, and the demonstrated VNFs are: +The infrastructure used in this example is OpenStack, and the demonstrated VNFs are: * F5 BIG-IP VE (Load balancer) * Fortigate (Firewall) * Httpd (Web Server) diff --git a/azure_case_e2e/e2e.yaml b/azure_case_e2e/e2e.yaml index fff2216..3414db7 100755 --- a/azure_case_e2e/e2e.yaml +++ b/azure_case_e2e/e2e.yaml @@ -76,7 +76,7 @@ node_templates: blueprint: id: { get_input: network_prov_name } blueprint_archive: Resources/network-topology.zip - main_file_name: VNFM-Networking-Prov-Azure-networks.yaml + main_file_name: infrastructure.yaml deployment: id: { get_input: network_prov_name } @@ -100,7 +100,7 @@ node_templates: blueprint: id: { get_input: f5_prov_name } blueprint_archive: Resources/bigip.zip - main_file_name: VNFM-F5-Prov-Azure-vm.yaml + main_file_name: infrastructure.yaml deployment: id: { get_input: f5_prov_name } relationships: @@ -124,7 +124,7 @@ node_templates: blueprint: id: { get_input: fg_prov_name } blueprint_archive: Resources/fortigate.zip - main_file_name: VNFM-Fortigate-Prov-Azure-vm.yaml + main_file_name: infrastructure.yaml deployment: id: { get_input: fg_prov_name } relationships: @@ -148,7 +148,7 @@ node_templates: blueprint: id: { get_input: httpd_prov_name } blueprint_archive: Resources/httpd.zip - main_file_name: VNFM-HTTPD-Prov-Azure-vm.yaml + main_file_name: infrastructure.yaml deployment: id: { get_input: httpd_prov_name } relationships: @@ -174,7 +174,7 @@ node_templates: blueprint: id: { get_input: f5_conf_name } blueprint_archive: Resources/bigip.zip - main_file_name: VNFM-F5-Conf.yaml + main_file_name: application.yaml deployment: id: { get_input: f5_conf_name } relationships: @@ -198,7 +198,7 @@ node_templates: blueprint: id: { get_input: fg_conf_name } blueprint_archive: Resources/fortigate.zip - main_file_name: VNFM-Fortigate-Conf.yaml + main_file_name: application.yaml deployment: id: { get_input: fg_conf_name } relationships: @@ -222,7 +222,7 @@ node_templates: blueprint: id: { get_input: httpd_conf_name } blueprint_archive: Resources/httpd.zip - main_file_name: VNFM-HTTPD-Conf.yaml + main_file_name: application.yaml deployment: id: { get_input: httpd_conf_name } relationships: @@ -248,7 +248,7 @@ node_templates: blueprint: id: { get_input: service_prov_name } blueprint_archive: Resources/service.zip - main_file_name: NS-LB-Firewall-F5-Fortigate-HTTPD.yaml + main_file_name: service.yaml deployment: id: { get_input: service_prov_name } outputs: From 1a9c09d081f1a5a39d8f26c4e4f3228b55e3b405 Mon Sep 17 00:00:00 2001 From: jrzeszutek Date: Fri, 8 Mar 2019 16:32:41 +0100 Subject: [PATCH 6/6] added updated openstack commercial case: updated READMEs and naming convention --- openstack_commercial_case/README.md | 98 ++++++++-------- openstack_commercial_case/bigip/README.md | 79 +++++++------ .../{VNFM-F5-Conf.yaml => application.yaml} | 2 +- ...-Openstack-vm.yaml => infrastructure.yaml} | 0 openstack_commercial_case/common/README.md | 106 ------------------ openstack_commercial_case/fortigate/README.md | 80 ++++++------- ...M-Fortigate-Conf.yaml => application.yaml} | 0 ...-Openstack-vm.yaml => infrastructure.yaml} | 0 openstack_commercial_case/httpd/README.md | 68 +++++------ ...{VNFM-HTTPD-Conf.yaml => application.yaml} | 0 ...-Openstack-vm.yaml => infrastructure.yaml} | 0 .../network-topology/README.md | 31 +++++ .../infrastructure.yaml} | 0 openstack_commercial_case/service/README.md | 37 +++--- ...l-F5-Fortigate-HTTPD.yaml => service.yaml} | 0 openstack_commercial_case_e2e/README.md | 8 +- .../Resources/bigip.zip | Bin 5888 -> 5882 bytes .../Resources/common.zip | Bin 3066 -> 0 bytes .../Resources/fortigate.zip | Bin 4459 -> 4302 bytes .../Resources/httpd.zip | Bin 4704 -> 4557 bytes .../Resources/network-topology.zip | Bin 0 -> 2137 bytes .../Resources/service.zip | Bin 4717 -> 4770 bytes ...M-E2E-F5-Fortigate-HTTPD.yaml => e2e.yaml} | 52 ++++----- 23 files changed, 232 insertions(+), 329 deletions(-) rename openstack_commercial_case/bigip/{VNFM-F5-Conf.yaml => application.yaml} (98%) rename openstack_commercial_case/bigip/{VNFM-F5-Prov-Openstack-vm.yaml => infrastructure.yaml} (100%) delete mode 100755 openstack_commercial_case/common/README.md rename openstack_commercial_case/fortigate/{VNFM-Fortigate-Conf.yaml => application.yaml} (100%) rename openstack_commercial_case/fortigate/{VNFM-Fortigate-Prov-Openstack-vm.yaml => infrastructure.yaml} (100%) rename openstack_commercial_case/httpd/{VNFM-HTTPD-Conf.yaml => application.yaml} (100%) rename openstack_commercial_case/httpd/{VNFM-HTTPD-Prov-Openstack-vm.yaml => infrastructure.yaml} (100%) create mode 100755 openstack_commercial_case/network-topology/README.md rename openstack_commercial_case/{common/VNFM-Networking-Prov-Openstack-networks.yaml => network-topology/infrastructure.yaml} (100%) rename openstack_commercial_case/service/{NS-LB-Firewall-F5-Fortigate-HTTPD.yaml => service.yaml} (100%) delete mode 100755 openstack_commercial_case_e2e/Resources/common.zip create mode 100755 openstack_commercial_case_e2e/Resources/network-topology.zip rename openstack_commercial_case_e2e/{VNFM-E2E-F5-Fortigate-HTTPD.yaml => e2e.yaml} (87%) diff --git a/openstack_commercial_case/README.md b/openstack_commercial_case/README.md index d1a2bf3..48a7951 100755 --- a/openstack_commercial_case/README.md +++ b/openstack_commercial_case/README.md @@ -1,55 +1,51 @@ -# Network Service - Commercial VNFs - -In this examples we demonstrate how to construct a simple network service consisting of a load balancer and a firewall. To make it a tad more interesting we will be deploying a simple web service to allow for complete user experience: - -![ns](https://user-images.githubusercontent.com/30900001/52050834-12889e00-2552-11e9-9a68-452e92cc7014.png) - -If we break it down to how we would typically build such a service the basic steps would probably be: - -1. Provision a firewall and configure it’s network interfaces and the network settings - -2. Provision a load balancer and setup basic settings - -3. Provision a web server instance, configure it, and setup basic web content - -4. Compose the service flow by setting the load balancer to accept traffic on a certain port, direct it to the firewall, configure the firewall to allow web traffic to the web server, etc. - -This example contains blueprints implementing each of these steps. These can be easily modified for other VNFs or different infrastructure. +# Commercial VNF Use Case Upon completion of this example we will have a complete running network service. -Note! The infrastructure used in this example is OpenStack, and the demonstrated VNFs are: -* F5 BIG-IP VE (Load balancer) -* Fortigate (Firewall) -* Httpd (Web Server) - -## Cloudify Manager - -Before we get started, please make sure you have a Cloudify manager deployed. - -The cloudify manager is available in multiple formats ranging from Docker to RPM. In this tutorial we will be using the docker option and assume that it is deployed on your local computer. It can be of course deployed using any other method and on any given platform. - -To learn more about Cloudify manager deployment go to: [Cloudify-Getting-Started](https://cloudify.co/download/) - -## Example overview - -Creation of the whole service consists of the following steps. Each step is available as a blueprint (yaml file) in this example folder. - -1. *Environment preparation* -Create networks, subnets, a router and a security group. For more details check [common/README](common/README.md) -2. *Provisioning of the VNFs* -Create the virtual machines in Openstack and connect those to the proper networks. -Each VNF is created using a blueprint named ``VNFM--Prov-Openstack-vm.yaml``: -* **bigip/VNFM-F5-Prov-Openstack-vm.yaml** - [BIG IP Provisioning instruction](bigip/README.md##Provisioning) -* **fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml** - [Fortigate Provisioning instruction](fortigate/README.md##Provisioning) -* **httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml** - [HTTPD Provisioning instruction](httpd/README.md##Provisioning) -3. *Configure the VNFs* -Apply basic configuration of the VNFs. This is done using blueprints named ``VNFM--Conf.yaml``: -* **bigip/VNFM-F5-Conf.yaml** (licensing and VLAN configuration) - [BIG IP Configuration instruction](bigip/README.md##Configuration) -* **fortigate/VNFM-Fortigate-Conf.yaml** (Setting firewall rules and port forwarding) - [Fortigate Configuration instruction](fortigate/README.md##Configuration) -* **httpd/VNFM-HTTPD-Conf.yaml** (Creation of Web Server) - [HTTPD Configuration instruction](httpd/README.md##Configuration) -4. *Service chaining* -The last step creates a service chain of connected network services (Load Balancer, Firewall and Web Server). In this case service chaining consists of port forwarding rule on Fortigate and load balancing rule on BIG IP in order to pass traffic through. -Use the ``service/NS-LB-Firewall-F5-Fortigate-HTTPD.yaml`` - [Service creation instruction](service/README.md) +![ns](https://user-images.githubusercontent.com/30900001/52050834-12889e00-2552-11e9-9a68-452e92cc7014.png) -Once all steps had been performed, you should be able to access the web page displayed by the web service by accessing the ip of the load balancer (This IP will be the output of the service deployment flow, and will be titled web_server). +This series of blueprints demonstrates how to install a simple network service consisting of a load balancer and a firewall. To make it a tad more interesting we will be deploying a simple web service to allow for complete user experience. All of the examples are currently implemented only for Azure. + +**Note!** +The infrastructure used in this example is Microsoft Azure, and the demonstrated VNFs are: + * F5 BIG-IP VE (Load balancer) + * Fortigate (Firewall) + * Httpd (Web Server) + +## Common Prerequisites: + +* Cloudify Manager 4.5.5, for more info: [Cloudify-Getting-Started](https://cloudify.co/download/). + +* These plugins should exist on your manager. (E.g. You can just run `cfy plugins bundle-upload`, which will satisfy all plugin requirements.): + * [cloudify-openstack-plugin](https://github.com/cloudify-cosmo/cloudify-openstack-plugin/releases), version 2.14.7 or higher. + * [cloudify-utilities-plugin](https://github.com/cloudify-incubator/cloudify-utilities-plugin/releases), version 1.12.5 or higher. + +* These secrets should exist on your manager: +* **Openstack secrets:** + * *keystone_username* - Username used for authentication in Keystone service + * *keystone_password* - Password used for authentication in Keystone service + * *keystone_tenant_name* - Name of the tenant in OpenStack + * *keystone_url* - URL used for authentication in Keystone service + * *keystone_region* - Name of the region in OpenStack + +You can create those with the following cfy commands:\ +``cfy secrets create keystone_username -s ``\ +``cfy secrets create keystone_password -s ``\ +``cfy secrets create keystone_tenant_name -s ``\ +``cfy secrets create keystone_url -s ``\ +``cfy secrets create keystone_region -s `` + +## Installation + +The installation is broken into a few basic steps. Go to the relevant README and progress through these steps in the correct order. + +1. [Prepare the environment](network-topology/README.md##Installation): Create networks, subnets, router and a security group. +1. Provisioning of the VNFs: + 1. [Provision the load balancer](bigip/README.md##Provisioning) and setup basic settings. + 1. [Provision the firewall](fortigate/README.md##Provisioning) and configure its network interfaces and the network settings. + 1. [Provision the web server](httpd/README.md##Provisioning) instance, configure it, and setup basic web content. +1. Compose the service flow by: + 1. [Configuration the load balancer](bigip/README.md##Configuration) and setup basic settings. + 1. [Configuration the firewall](fortigate/README.md##Configuration) and configure its network interfaces and the network settings. + 1. [Configuration the web server](httpd/README.md##Configuration) instance, configure it, and setup basic web content. +1. [Create service](service/README.md) The last step creates a service chain of connected network services (Load Balancer, Firewall and Web Server). In this case service chaining consists of port forwarding rule on Fortigate and load balancing rule on BIG IP in order to pass traffic through. diff --git a/openstack_commercial_case/bigip/README.md b/openstack_commercial_case/bigip/README.md index dc098f1..c27fcd0 100755 --- a/openstack_commercial_case/bigip/README.md +++ b/openstack_commercial_case/bigip/README.md @@ -1,71 +1,68 @@ -# F5 Big-IP on OpenStack +# BIG-IP Load Balancer -## Prerequisites: +This blueprint installs the BIG-IP load balancer on Openstack. -### Common resource creation -Prior to any deployment You have to upload plugins, create secrets and create common environment - [instructions](../common/README.md) +### Prerequisites -### Secrets +First make sure that you have satisfied the global requirements in the [main README](../README.md). -Create the below secrets in the secret store management: -* **bigip_license_key** - License key for BIG IP VE, it is being applied during configuration. - -You can create those with the following cfy commands:\ -``cfy secrets create bigip_license_key -s `` +* These additional secrets should exist on your manager: + * `bigip_license`: License key for BIG IP VE. It is being applied during configuration. . You can set this up via the CLI: `cfy secrets create bigip_license -s [secret value]`. ## Provisioning -VNFM-F5-Prov-Openstack-vm.yaml is responsible for creation BIG-IP Virtual Machine connected to 3 networks: -* Management, -* WAN, -* Public. +* Blueprint: The `infrastructure.yaml` blueprint is responsible for creation BIG-IP Virtual Machine. This VM is connected to 3 networks: + * Management + * WAN + * Public Network's NICs are connected to security group created in network deployment. Networks and security group names are fetched from network deployment using `get_capability` intrinsic function. -### Inputs -* *flavor_id* - ID of the flavor in OpenStack - default: f7cfaaa8-e2db-4f9b-a65b-6a407f340960 -* *vnf_vm_name* - Name of Virtual Machine - default: bigip -* *image_id* - ID of the image in OpenStack - default: 6d8ff903-f35b-43df-b7c2-e219929924b9 -* *resource_prefix* - Prefix of every resource created at this deployment on Openstack - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Openstack - default: 0 -* *openstack_network_deployment_name* - Name of the deployment responsible for router, security group and networks creation - - default: VNFM-Networking-Prov-Openstack-networks +* Inputs: + * *flavor_id* - ID of the flavor in OpenStack - default: f7cfaaa8-e2db-4f9b-a65b-6a407f340960 + * *vnf_vm_name* - Name of Virtual Machine - default: bigip + * *image_id* - ID of the image in OpenStack - default: 6d8ff903-f35b-43df-b7c2-e219929924b9 + * *openstack_network_deployment_name* - Name of the deployment responsible for router, security group and networks creation - + default: VNFM-Networking-Prov-Openstack-networks ### Installation -To provision BIG-IP execute: +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: -``cfy install VNFM-F5-Prov-Openstack-vm.yaml -b VNFM-F5-Prov-Openstack-vm`` +```bash +cfy install infrastructure.yaml -b \ + VNFM-F5-Prov-Openstack-vm +``` -### Uninstalling +###Uninstalling -To delete BIG IP execute: +Uninstall the **VNFM-F5-Prov-Openstack-vm** deployment: -``cfy uninstall VNFM-F5-Prov-Openstack-vm`` +``` +cfy uninstall VNFM-F5-Prov-Openstack-vm +``` ## Configuration -The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name -is required as an input. Exposed IP addresses are fetched using *get_capability* function, ie:\ -``{ get_capability: [ {get_input: prov_deployment_name}, wan_ip ] }`` - -VNFM-F5-Conf.yaml is responsible for licensing BIG IP with the provided registration key and applying VLAN configuration necessary for further LTM configuration. -It consists of 2 nodes: -1. *license* - Applies license using [install_license.txt](Resources/templates/install_license.txt) file and revokes it using [revoke_license.txt](Resources/templates/revoke_license.txt). -2. *vlan_configuration* - Creates VLAN configuration on WAN and Public interfaces - using [vlan_config.txt](Resources/templates/vlan_config.txt) to apply it during install and [vlan_config_delete.txt](Resources/templates/vlan_config_delete.txt) to tear it down during uninstall. +The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name is required as an input. Exposed IP addresses are fetched using `get_capability` function: `{ get_capability: [ {get_input: prov_deployment_name}, wan_ip ] }`. +* Blueprint: The `application.yaml` blueprint is responsible for licensing BIG IP with the provided registration key and applying VLAN configuration necessary for further LTM configuration. It consists of three nodes: + * `check_mcpd_status`: Checks if the MCPD services is already started, because it's necessary for applying the license succesfully. + Uses [check_mcpd_status.txt](Resources/templates/check_mcpd_status.txt) file. + * `license`: Applies license using [install_license.txt](Resources/templates/install_license.txt) file and revokes it using [revoke_license.txt](Resources/templates/revoke_license.txt). + * `vlan_configuration`: Creates VLAN configuration on WAN and Public interfaces - using [vlan_config.txt](Resources/templates/vlan_config.txt) to apply it during install and [vlan_config_delete.txt](Resources/templates/vlan_config_delete.txt) to tear it down during uninstall. -### Inputs +* Inputs: + * `prov_deployment_name`: Name of BIG IP Provisioning deployment created in previous section. Default: `VNFM-F5-Prov-Openstack-vm`. -* *prov_deployment_name* - Name of BIG IP Provisioning deployment created in previous section ### Install -``cfy install VNFM-F5-Conf.yaml -b VNFM-F5-Conf`` +`cfy install application.yaml -b VNFM-F5-Conf` ### Uninstall -During uninstall the license is revoked so it can be used on different BIG IP VE or on the same one again. -Also VLAN configuration is deleted. -``cfy uninstall VNFM-F5-Conf`` +During uninstall the license is revoked so it can be used on different BIG IP VE or on the same one again. Also VLAN configuration is deleted. + +`cfy uninstall VNFM-F5-Conf` diff --git a/openstack_commercial_case/bigip/VNFM-F5-Conf.yaml b/openstack_commercial_case/bigip/application.yaml similarity index 98% rename from openstack_commercial_case/bigip/VNFM-F5-Conf.yaml rename to openstack_commercial_case/bigip/application.yaml index 032f506..4ee8bb9 100755 --- a/openstack_commercial_case/bigip/VNFM-F5-Conf.yaml +++ b/openstack_commercial_case/bigip/application.yaml @@ -47,7 +47,7 @@ node_templates: calls: - template: Resources/templates/install_license.txt params: - REG_KEY: { get_secret: bigip_license_key } + REG_KEY: { get_secret: bigip_license } delete: inputs: terminal_auth: *terminal_auth diff --git a/openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml b/openstack_commercial_case/bigip/infrastructure.yaml similarity index 100% rename from openstack_commercial_case/bigip/VNFM-F5-Prov-Openstack-vm.yaml rename to openstack_commercial_case/bigip/infrastructure.yaml diff --git a/openstack_commercial_case/common/README.md b/openstack_commercial_case/common/README.md deleted file mode 100755 index 0a42b38..0000000 --- a/openstack_commercial_case/common/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# Common resources - -Before installation of any service, suitable networks, subnets, router and security group must be created. - -The following resources are created in OpenStack using the ``VNFM-Networking-Prov-Openstack-networks.yaml`` blueprint: -* **Management Network** - This network connects the Cloudify manager to all managed components. -* **LAN network** - This network connects the firewall to the web server. -* **WAN network** - This network connects the load balancer to the web server. -* **Public network** - This is the public network accessible to the user. BIG IP exposes the web server on the Public network interface. -* **Security group** - Security group for VNF NICs, defined by *network_security_group_rules* input, -* **Router** - Router, which allows to reach the management and public networks from the external network. - -Those resources are fetched by all other provisioning deployments. - -## Prerequisites: - -Prior to installation you have to upload plugins and create secrets. - -### Plugins - -Upload: -* **cloudify-openstack-plugin** - Tested for version 2.14.7 -* **cloudify-utilities-plugin** - Tested for version 1.12.5 - -This can be applied through the Cloudify manager user interface or using the CLI. -* To upload plugins using the Cloudify manager: - * Browse to the *Cloudify Catalog* page and scroll to the *Plugins Catalog* widget. Select the relevant plugins and click *Upload*. -* To upload plugins using the CLI, run the following commands: -``cfy plugins upload https://github.com/cloudify-incubator/cloudify-utilities-plugin/releases/download/1.12.5/cloudify_utilities_plugin-1.12.5-py27-none-linux_x86_64-centos-Core.wgn -y https://github.com/cloudify-incubator/cloudify-utilities-plugin/releases/download/1.12.5/plugin.yaml`` - -``cfy plugins upload https://github.com/cloudify-cosmo/cloudify-openstack-plugin/releases/download/2.14.7/cloudify_openstack_plugin-2.14.7-py27-none-linux_x86_64-centos-Core.wgn -y https://github.com/cloudify-cosmo/cloudify-openstack-plugin/releases/download/2.14.7/plugin.yaml`` - -### Secrets - -Create the below secrets in the secret store management: -* **Openstack secrets:** - * *keystone_username* - Keystone username - * *keystone_password* - Keystone password - * *keystone_tenant_name* - Keystone tenant name - * *keystone_url* - Keystone URL - * *keystone_region* - Keystone region - -You can create those with the following cfy commands:\ -``cfy secrets create keystone_username -s ``\ -``cfy secrets create keystone_password -s ``\ -``cfy secrets create keystone_tenant_name -s ``\ -``cfy secrets create keystone_url -s ``\ -``cfy secrets create keystone_region -s `` - -## Environment creation - -### Inputs -* *resource_prefix* - Prefix of every resource created at this deployment on Openstack - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Openstack - default: 0 -* *external_network_name* - Name of the external network - default: ext-net -* *nameservers* - List of DNS nameservers - default: [8.8.4.4, 8.8.8.8] -* *mgmt_subnet_cidr* - Management subnet CIDR - default: 10.10.1.0/24 -* *mgmt_subnet_allocation_pools* - Management subnet allocation pools - - default: - ```` - - start: 10.10.1.2 - end: 10.10.1.254 - ```` -* *public_subnet_cidr* -Public subnet CIDR - default: 10.10.2.0/24 -* *public_subnet_allocation_pools* - Public subnet allocation pools - - default: - ```` - - start: 10.10.2.2 - end: 10.10.2.254 - ```` -* *wan_subnet_cidr* - WAN subnet CIDR - default: 10.10.3.0/24 -* *wan_subnet_allocation_pools* - WAN subnet allocation pools - - default: - ```` - - start: 10.10.3.2 - end: 10.10.3.254 - ```` -* *lan_subnet_cidr* - LAN subnet CIDR - default: 10.10.4.0/24 -* *lan_subnet_allocation_pools* - LAN subnet allocation pools - - default: - ```` - - start: 10.10.4.2 - end: 10.10.4.254 - ```` -* *network_security_group_rules* - Security group rules for VNF's NICs - - default: - ```` - - port_range_min: 1 - port_range_max: 65535 - protocol: tcp - - port_range_min: 1 - port_range_max: 65535 - protocol: udp - ```` -### Installation - -Install using VNFM-Networking-Prov-Openstack-networks.yaml blueprint: - -``cfy install VNFM-Networking-Prov-Openstack-networks.yaml -b VNFM-Networking-Prov-Openstack-networks`` - -**It should be installed only one time before start of provisioning services.** -It will be reused automatically by blueprints using the capabilities mechanism. - -### Uninstalling - -``cfy uninstall VNFM-Networking-Prov-Openstack-networks`` diff --git a/openstack_commercial_case/fortigate/README.md b/openstack_commercial_case/fortigate/README.md index 8192495..9a4be7b 100755 --- a/openstack_commercial_case/fortigate/README.md +++ b/openstack_commercial_case/fortigate/README.md @@ -1,70 +1,62 @@ -# FortiGate NGFW Single VM on Openstack +# FortiGate Firewall -## Prerequisites: +This blueprint installs the NGFW Single VM on Openstack. -### Common resource creation -Prior to any deployment You have to upload plugins, create secrets and create common environment - [instructions](../common/README.md) +### Prerequisites -### Secrets +First make sure that you have satisfied the global requirements in the [main README](../README.md). -Create the below secrets in the secret store management: -* **fortigate_license** - Content of license file, its used during provisioning to license Fortigate - -You can create those with the following cfy commands:\ -``cfy secrets create fortigate_license -f `` +* These additional secrets should exist on your manager: + * `fortigate_license`: Content of license file, its used during provisioning to license Fortigate. You can set this up via the CLI: `cfy secrets create fortigate_license -s [secret value]`. ## Provisioning -``VNFM-Fortigate-Prov-Openstack-vm.yaml`` is responsible for FortiGate NGFW Single VM provisioning. VM is connected to 3 networks: -* Management, -* WAN, -* LAN. - -Network's NICs are connected to the security group created in the network deployment. -Networks and security group names are fetched from network deployment using `get_capability` intrinsic function. +* Blueprint: The `infrastructure.yaml` blueprint is responsible for FortiGate NGFW Single VM provisioning. This VM is connected to 3 networks: + * Management + * WAN + * LAN -### Inputs +The networks' NICs are connected to the security group created in the network deployment. The networks and security group names are fetched from network deployment using `get_capability` intrinsic function. -* *resource_prefix* - Prefix of every resource created at this deployment on Openstack - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Openstack - default: 0 -* *openstack_network_deployment_name* - Name of deployment responsible for router, security group and networks creation - - default: VNFM-Networking-Prov-Openstack-networks -* *flavor_id* - ID of the flavor in OpenStack - default: 5aaa5054-f7a4-4bbe-8b47-69da2308ecb2 -* *image_id* - ID of the image in OpenStack - default: 20acb407-2a20-405e-9e19-360c0a705368 -* *vnf_vm_name* - Name of VM - default: fortigate -* *fortigate_license_filename* - Name of the Fortigate license file (It will be uploaded to Fortigate VM with this name). It should have .lic file extension. - default: FGVM02TM19000054.lic +* Inputs: + * *openstack_network_deployment_name* - Name of deployment responsible for router, security group and networks creation - + default: VNFM-Networking-Prov-Openstack-networks + * *flavor_id* - ID of the flavor in OpenStack - default: 5aaa5054-f7a4-4bbe-8b47-69da2308ecb2 + * *image_id* - ID of the image in OpenStack - default: 20acb407-2a20-405e-9e19-360c0a705368 + * *vnf_vm_name* - Name of VM - default: fortigate + * *fortigate_license_filename* - Name of the Fortigate license file (It will be uploaded to Fortigate VM with this name). It should have .lic file extension. - default: FGVM02TM19000054.lic ### Installation -Resources created in Prerequesites subsection are fetched using capabilities exposed by *common* deployment and ``VNFM-Fortigate-Prov-Openstack-vm.yaml`` is using it. -To provision FortiGate NGFW Single VM: +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: -``cfy install VNFM-Fortigate-Prov-Openstack-vm.yaml -b VNFM-Fortigate-Prov-Openstack-vm`` +```bash +cfy install infrastructure.yaml -b \ + VNFM-Fortigate-Prov-Openstack-vm +``` -### Uninstalling -To delete Fortigate execute: +###Uninstalling -``cfy uninstall VNFM-Fortigate-Prov-Openstack-vm`` +Uninstall the **VNFM-Fortigate-Prov-Openstack-vm** deployment: -## Configuration +``` +cfy uninstall VNFM-Fortigate-Prov-Openstack-vm +``` -The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name -is required as an input. Exposed IP addresses are fetched using *get_capability* function, ie:\ -``{ get_capability: [ { get_input: fortigate_vm_deployment_name }, vm_public_ip_address] }`` - -``VNFM-Fortigate-Conf.yaml`` is responsible for applying base configuration for the newly created FortiGate VM. It configures all of the interfaces. -It consists of one node: -1. *fortigate_vnf_config* - Applies base configuration for Fortigate (VNF name change and basic configuration to interfaces) using [fortigate-baseline.txt](Resources/templates/fortigate-baseline.txt) file. +## Configuration +The configuration requires the IP addresses of the VM created during provisioning, therefore the provisioning deployment name is required as an input. Exposed IP addresses are fetched using `get_capability` function: `{ get_capability: [ {get_input: prov_deployment_name}, wan_ip ] }`. -### Inputs +* Blueprint: The `application.yaml` blueprint is responsible for applying base configuration for the newly created FortiGate VM. It configures all of the interfaces. It consists of one node: + * `fortigate_vnf_config`: Applies base configuration for Fortigate (VNF name change and basic configuration to interfaces) using [fortigate-baseline.txt](Resources/templates/fortigate-baseline.txt) file. -* *fortigate_vm_deployment_name* - Name of Fortigate Provisioning deployment - default: VNFM-Fortigate-Prov-Openstack-vm +* Inputs: + * `fortigate_vm_deployment_name`: Name of Fortigate Provisioning deployment. Default: `VNFM-Fortigate-Prov-Openstack-vm`. ### Install -``cfy install VNFM-Fortigate-Conf.yaml -b VNFM-Fortigate-Conf`` +`cfy install application.yaml -b VNFM-Fortigate-Conf` ### Uninstall -``cfy uninstall VNFM-Fortigate-Conf`` +`cfy uninstall VNFM-Fortigate-Conf` diff --git a/openstack_commercial_case/fortigate/VNFM-Fortigate-Conf.yaml b/openstack_commercial_case/fortigate/application.yaml similarity index 100% rename from openstack_commercial_case/fortigate/VNFM-Fortigate-Conf.yaml rename to openstack_commercial_case/fortigate/application.yaml diff --git a/openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml b/openstack_commercial_case/fortigate/infrastructure.yaml similarity index 100% rename from openstack_commercial_case/fortigate/VNFM-Fortigate-Prov-Openstack-vm.yaml rename to openstack_commercial_case/fortigate/infrastructure.yaml diff --git a/openstack_commercial_case/httpd/README.md b/openstack_commercial_case/httpd/README.md index 1a091af..308b98d 100755 --- a/openstack_commercial_case/httpd/README.md +++ b/openstack_commercial_case/httpd/README.md @@ -1,63 +1,57 @@ -# HTTPD on Openstack +# HTTPD Webserver -## Prerequisites: +This blueprint installs HTTPD webserver on an Openstack VM. -### Common resource creation -Prior to any deployment You have to upload plugins, create secrets and create common environment - [instructions](../common/README.md) +### Prerequisites -### Secrets +First make sure that you have satisfied the global requirements in the [main README](../README.md). -Create the below secrets in the secret store management: -* **httpd_website** - Content of website file for HTTPD VM, it is set during provisioning and served after configuration. Exemplary website can be found under ``Resources/website/index.html``. - -You can create those with the following cfy commands:\ -``cfy secrets create httpd_website -f `` +* These additional secrets should exist on your manager: + * `httpd_website`: Content of website file for HTTPD VM, it is set during provisioning and served after configuration. Exemplary website can be found under `Resources/website/index.html`. ## Provisioning -VNFM-HTTPD-Prov-Openstack-vm.yaml is responsible for the creation of an Ubuntu VM connected to 2 networks: -* Management, -* LAN. +* Blueprint: The `infrastructure.yaml` blueprint is responsible for the creation of an Ubuntu VM. It is connected to 2 networks: + * Management + * LAN -Network names are fetched from network deployment using `get_capability` intrinsic function. +The networks' NICs are connected to the security group created in the network deployment. The networks and security group names are fetched from network deployment using `get_capability` intrinsic function. -### Inputs -* *vnf_vm_name* - Name of VM - default: httpd -* *flavor_id* - ID of the flavor in OpenStack - default: 6e2d4276-0390-4a24-b6ab-40f388edcc87 -* *image_id* - ID of the image in OpenStack - default: ee6a6582-1351-4f8b-b132-a90b7db88171 -* *resource_prefix* - Prefix of every resource created at this deployment on Openstack - default: cfy -* *resource_suffix* - Suffix of every resource created at this deployment on Openstack - default: 0 -* *openstack_network_deployment_name* - Name of deployment responsible for router, security group and networks creation - - default: VNFM-Networking-Prov-Openstack-networks +* Inputs: + * *vnf_vm_name* - Name of the VM - default: httpd + * *flavor_id* - ID of the flavor in OpenStack - default: 6e2d4276-0390-4a24-b6ab-40f388edcc87 + * *image_id* - ID of the image in OpenStack - default: ee6a6582-1351-4f8b-b132-a90b7db88171 + * *openstack_network_deployment_name* - Name of deployment responsible for router, security group and networks creation - + default: VNFM-Networking-Prov-Openstack-networks ### Installation -Resources created in Prerequesites subsection are fetched using the capabilities mechanism. -To provision HTTPD: +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: -``cfy install VNFM-HTTPD-Prov-Openstack-vm.yaml -b VNFM-HTTPD-Prov-Openstack-vm`` +```bash +cfy install infrastructure.yaml -b \ + VNFM-HTTPD-Prov-Openstack-vm +``` -### Uninstalling +###Uninstalling -To delete VM execute: +Uninstall the **VNFM-HTTPD-Prov-Openstack-vm** deployment: -``cfy uninstall VNFM-HTTPD-Prov-Openstack-vm`` +``` +cfy uninstall VNFM-HTTPD-Prov-Openstack-vm +``` ## Configuration -VNFM-HTTPD-Conf.yaml is responsible for starting HTTPD process on the target VM, -*web_server* node is responsible for creating such server using the following command:\ -``screen -dmS -X python3 -m http.server 8080``\ -The IP address of the target VM is fetched from VNFM-HTTPD-Prov-Openstack-vm deployment using capabilities. - -### Inputs +* Blueprint: The `application.yaml` blueprint is responsible for starting HTTPD process on the target VM, `web_server` node is responsible for creating such server using the following command: `screen -dmS -X python3 -m http.server 8080`. The IP address of the target VM is fetched from VNFM-HTTPD-Prov-Openstack-vm deployment using capabilities. -* *httpd_vm_deployment_name* - Name of HTTPD Provisioning deployment +* Inputs: + * `httpd_vm_deployment_name`: Name of HTTPD Provisioning deployment. Default: `VNFM-HTTPD-Prov-Openstack-vm`. ### Install -``cfy install VNFM-HTTPD-Conf.yaml -b VNFM-HTTPD-Conf`` +`cfy install application.yaml -b VNFM-HTTPD-Conf` ### Uninstall -``cfy uninstall VNFM-HTTPD-Conf`` +`cfy uninstall VNFM-HTTPD-Conf` diff --git a/openstack_commercial_case/httpd/VNFM-HTTPD-Conf.yaml b/openstack_commercial_case/httpd/application.yaml similarity index 100% rename from openstack_commercial_case/httpd/VNFM-HTTPD-Conf.yaml rename to openstack_commercial_case/httpd/application.yaml diff --git a/openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml b/openstack_commercial_case/httpd/infrastructure.yaml similarity index 100% rename from openstack_commercial_case/httpd/VNFM-HTTPD-Prov-Openstack-vm.yaml rename to openstack_commercial_case/httpd/infrastructure.yaml diff --git a/openstack_commercial_case/network-topology/README.md b/openstack_commercial_case/network-topology/README.md new file mode 100755 index 0000000..92724c1 --- /dev/null +++ b/openstack_commercial_case/network-topology/README.md @@ -0,0 +1,31 @@ +# Network Topology + +This blueprint installs the common infrastructure for the commercial VNF use case. + +The following resources will be created: + +* **Management Network** - This network connects the Cloudify manager to all managed components. +* **LAN network** - This network connects the firewall to the web server. +* **WAN network** - This network connects the load balancer to the web server. +* **Public network** - This is the public network accessible to the user. BIG IP exposes the web server on the Public network interface. +* **Security group** - Security group for VNF NICs, defined by *network_security_group_rules* input, +* **Router** - Router, which allows to reach the management and public networks from the external network. + +### Installation + +**Note: Only install this deployment once.** Other blueprints will reuse the existing deployment. + +Upload the blueprint, create the deployment and execute install workflow in one command using the CLI: + +```bash +cfy install infrastructure.yaml -b \ + VNFM-Networking-Prov-Openstack-networks +``` + +###Uninstalling + +Uninstall the **VNFM-Networking-Prov-Openstack-networks** deployment: + +``` +cfy uninstall VNFM-Networking-Prov-Openstack-networks +``` diff --git a/openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml b/openstack_commercial_case/network-topology/infrastructure.yaml similarity index 100% rename from openstack_commercial_case/common/VNFM-Networking-Prov-Openstack-networks.yaml rename to openstack_commercial_case/network-topology/infrastructure.yaml diff --git a/openstack_commercial_case/service/README.md b/openstack_commercial_case/service/README.md index 60494ba..74a1c92 100755 --- a/openstack_commercial_case/service/README.md +++ b/openstack_commercial_case/service/README.md @@ -1,40 +1,39 @@ # Network Service -Creates a service chain by creating forwarding rules on the VNFs (Fortigate and BIG IP). +This blueprint installs a service chain by creating forwarding rules on the VNFs (Fortigate and BIG IP). ## Prerequisites: -* **BIG IP Provisioning & Configuration** - [Instructions](../bigip/README.md) -* **Fortigate Provisioning & Configuration** - [Instructions](../fortigate/README.md) -* **HTTPD Provisioning & Configuration** - [Instructions](../httpd/README.md) +First make sure that you have satisfied the global requirements in the [main README](../README.md) as well as installed the following deployments: -## Service creation + * *BIG IP Provisioning & Configuration*: See [instructions](../bigip/README.md). + * *Fortigate Provisioning & Configuration*: See [instructions](../fortigate/README.md). + * *HTTPD Provisioning & Configuration*: See [instructions](../httpd/README.md). -NS-LB-Firewall-F5-Fortigate-HTTPD.yaml consists of 2 nodes: -1. *fg_port_forwarding* - prepares NAT rules and policies, which are required to perform the service chain. [fortigate-portforward-start.txt](Resources/templates/fortigate-portforward-start.txt) file is used to apply configuration during installation and [fortigate-portforward-stop.txt](Resources/templates/fortigate-portforward-stop.txt) to delete it during uninstall. -2. *ltm_config* - creates load balancing rule responsible for passing traffic from app (exposed on WAN fortigate interface) -to BIG-IP Public interface using [ltm_config.txt](Resources/templates/ltm_config.txt) file to apply configuration and [ltm_config_stop.txt](Resources/templates/ltm_config_stop.txt) to delete it during uninstall +## Service creation -IP addresses are fetched using *get_capability* function. +IP addresses are fetched using `get_capability` function. -### Inputs +* Blueprint: The `service.yaml` blueprint is responsible for orchestrating the service chaining. It consists of two nodes: + * `fg_port_forwarding`: Prepares NAT rules and policies, which are required to perform the service chain. [fortigate-portforward-start.txt](Resources/templates/fortigate-portforward-start.txt) file is used to apply configuration during installation and [fortigate-portforward-stop.txt](Resources/templates/fortigate-portforward-stop.txt) to delete it during uninstall. + * `ltm_config`: Creates load balancing rule responsible for passing traffic from app (exposed on WAN fortigate interface) to BIG-IP Public interface using [ltm_config.txt](Resources/templates/ltm_config.txt) file to apply configuration and [ltm_config_stop.txt](Resources/templates/ltm_config_stop.txt) to delete it during uninstall. -* *f5_prov_deployment_name* - The name of the BIG IP Provisioning deployment, used to get management and Public IPs from BIG IP VE - default: VNFM-F5-Prov-Openstack-vm -* *fg_prov_deployment_name* - The name of the Fortigate Provisioning deployment, used to get management and WAN IPs from Fortigate VM - default: VNFM-Fortigate-Conf -* *httpd_prov_deployment_name* - The name of the HTTPD Provisioning deployment, used to fetch HTTPD LAN interface IP - default: VNFM-HTTPD-Prov-Openstack-vm -* *lb_public_port* - Load balancer public network port on which the service is exposed - default: 8080 -* *wan_port* - Fortigate WAN port on which the service is going to be exposed - default: '8080' +* Inputs: + * `f5_prov_deployment_name`: The name of the BIG IP Provisioning deployment, used to get management and Public IPs from BIG IP VE. Default: `VNFM-F5-Prov-Openstack-vm`. + * `fg_prov_deployment_name`: The name of the Fortigate Provisioning deployment, used to get management and WAN IPs from Fortigate VM. Default: `VNFM-Fortigate-Prov-Openstack-vm`. + * `httpd_prov_deployment_name`: The name of the HTTPD Provisioning deployment, used to fetch HTTPD LAN interface IP. Default: `VNFM-HTTPD-Prov-Openstack-vm`. + * `lb_public_port`: Load balancer public network port on which the service is exposed. Default: `8080`. + * `wan_port`: Fortigate WAN port on which the service is going to be exposed. Default: `8080'`. ### Installation To apply service configuration execute: -``cfy install NS-LB-Firewall-F5-Fortigate-HTTPD.yaml -b NS-LB-Firewall-F5-Fortigate-HTTPD`` +``cfy install service.yaml -b NS-LB-Firewall-F5-Fortigate-HTTPD`` ### Service validation -After service creation You should be able to display web server exposed on Public interface of BIG-IP. -The URL is available on *web_server* deployment output. +After service creation You should be able to display web server exposed on Public interface of BIG-IP. The URL is available on *web_server* deployment output. ### Uninstalling diff --git a/openstack_commercial_case/service/NS-LB-Firewall-F5-Fortigate-HTTPD.yaml b/openstack_commercial_case/service/service.yaml similarity index 100% rename from openstack_commercial_case/service/NS-LB-Firewall-F5-Fortigate-HTTPD.yaml rename to openstack_commercial_case/service/service.yaml diff --git a/openstack_commercial_case_e2e/README.md b/openstack_commercial_case_e2e/README.md index e6e9b17..e60c9b6 100755 --- a/openstack_commercial_case_e2e/README.md +++ b/openstack_commercial_case_e2e/README.md @@ -31,7 +31,7 @@ Create the below secrets in the secret store management: * *keystone_tenant_name* - Keystone tenant name * *keystone_url* - Keystone URL * *keystone_region* - Keystone region - * *bigip_license_key* - License key for BIG IP VE, it is being applied during configuration + * *bigip_license* - License key for BIG IP VE, it is being applied during configuration * *fortigate_license* - Content of license file, its used during provisioning to license Fortigate * *httpd_website* - Content of website file for HTTPD VM, it is set during provisioning and served after configuration @@ -41,13 +41,13 @@ You can create those with the following cfy commands:\ ``cfy secrets create keystone_tenant_name -s ``\ ``cfy secrets create keystone_url -s ``\ ``cfy secrets create keystone_region -s ``\ -``cfy secrets create bigip_license_key -s ``\ +``cfy secrets create bigip_license -s ``\ ``cfy secrets create fortigate_license -f ``\ ``cfy secrets create httpd_website -f `` ### Inputs -* *common_prov_name* - The name of the Common resources provisioning deployment - default: VNFM-Networking-Prov-Openstack-networks +* *network_prov_name* - The name of the Common resources provisioning deployment - default: VNFM-Networking-Prov-Openstack-networks * *f5_prov_name* - The name of the BIG IP Provisioning deployment - default: VNFM-F5-Prov-Openstack-vm * *f5_conf_name* - The name of the BIG IP Configuration deployment - default: VNFM-F5-Conf * *fg_prov_name* - The name of the Fortigate Provisioning deployment - default: VNFM-Fortigate-Prov-Openstack-vm @@ -61,7 +61,7 @@ You can create those with the following cfy commands:\ To apply the service configuration execute: -``cfy install VNFM-E2E-F5-Fortigate-HTTPD.yaml -b VNFM-E2E-F5-Fortigate-HTTPD`` +``cfy install e2e.yaml -b VNFM-E2E-F5-Fortigate-HTTPD`` ### Service validation diff --git a/openstack_commercial_case_e2e/Resources/bigip.zip b/openstack_commercial_case_e2e/Resources/bigip.zip index a510506763f21afd020b027df994d250af6e4859..2f7059c750ac4f629ba9543f31d1b78ac358b1f3 100755 GIT binary patch delta 4144 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 delta 4214 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 E2VOt6hyVZp diff --git a/openstack_commercial_case_e2e/Resources/common.zip b/openstack_commercial_case_e2e/Resources/common.zip deleted file mode 100755 index c00e42d8de6d4601fa2a10763e2a07aeabb32e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3066 zcmb7GS5y;P7EORqf<8d1bO9kDRFy7-l2D`@dhZ}5gn(2jqV!$`q=-_a8hU>yEi~!U ziy+c5s30H+qi^&**P5A+Id|QA&RO@Yz0cQPTSuLkgbwf{NHw*!{wjVxWZ$!`yPKOk zT3F}j5IMjHZJ>3MrxT9@0RYfT008wrL${F%2u-Arn_ZpJX8gDa^;upqQxu0Pjaq)H z61`$5_W4r*nAR2flI`XSqzxH|*XJ*>yR4e1bdcaeT2`#1-0-f4`%4XmFuErh=?1z* z&o-cQs@)-!ZmPMoogT*MkVx$XMZsD6UJ?0Lv#(1=X~PFME6Pk~Dg@7M z^UcWyffBQ_VaL}!%4e&1VKv!X<+=NoJ};DTu|CS(S(gK4uaI zz%)e>=h`Jqx_ZmnV=$O6ih-G8{o5#aWP8DChwmhydB!*U-ydaC03p>B~=vV%(BI?+$^J^$Q`omIAxtiLdC{a zSnkv1jxB+eqB5(lq=Jx(2Vc3%@tgg(B` z_D;D_tl^Z`Jy6>4j&6q2(T9D(*#gXQz$*A6%T-EzgaLOVr(ew~ z>hd>CY6pwMh7e?@1E#B|5Ot?t%z%DPAWLtpnqP4eA%T9`WE1@j*K3uLt32AYGKQ?S zOh~K6al->uT{oXuta-=W)FL!{i7*^dhp=I-BA-%OaOwdoQlyjI7D%2XGHBR>zCx^Y z>gN2i7c&c}zE)4}WwQ+JbJ!6Ie0nz9AfINGqcCkDsrExj!#g5Da|?a9K3|@?O2uh6 zMdlFGG*EPik9RT-_Z=tSqwPe6QH&Jbov(gP?r(y&g(S(`xK@f&ugk83$@Iutx@W41 z26~nwhYR*T^3fD=FliJMs3XX`f+qq*@!rl#(7SHQHUr8cgYoZ^(WT0`S2LGUTboX` z?;RWsq1c33RS$*TXr>b7_KS%|HHbsQMBfGNG_Q90M7?uuJkFxwbc4W#C=^JY|?+MjLK(da#mupU6j)V?ww6YXP?ODH9c6CWYQ`^oFT*JWYFq&v8yGBE*(Y{FL_-WP!N%0pM7CZ& z`swi4*E6IG{&=z-k6|<1D%vVNaOv&o(Tv-BsgmgAd*g|mg^)1W#{3$PbOHvL$aPJV zv}ksxKMqkOOw58&0&jcb`CkG*)|~4(o}DbZjsHp%w6Uf zE8aQ0$8sno7RmawQA~nFMu3l*_xdh1gBeT2-p&pis{k7~*e^p)gKu+{;q8NylQm4V zn{~Cwreo@hG-4U1f==+@+VCQ~%|cU7^ZEW4r<+pB9w?@Rq`_NI&p_s?cSQKGtY)m6 z&z`XQX(Jhld_?JkK)k9q2k#_VS3ruvAe7#rjr(24sehBXt-B$aN2WcHAYIO!SM7Wg z=d9i3(Yhz@(WKzR@<4hsUrcQ5ZU*)+73xD)w5o(+2)<@NmX&OY?qBiO$jrWGkG1RP z5EAY*O)Qr1$$vb%5H2*{za7>LOM!CL3&0xX&9~?`DiUL$^X)!_4{d0DHSUtZVk;-V zI45uO`dgE-EiEGm-ERik?ZKXP@Yd-ml?yLko&CXQY;OFLP1WNj{;W1d98YO+5

U zYd8$sqb0{Hw|#;aAKmbfZSeW#5~MQ<9ny%bUzf^yw|1dyA<8;VU<6L*0c%Bgr?W3! zfgoX%~DEg$3EoPw=)e^d7-x9qem!dgspNC1F1769P-Kk9Cv zrK~BaW$)$Vj&-?%b`;dXx_b+1W9-qMUe>lQg6Mz$cnbMhySXkHnU>LtQU@(r(ooZN zq3alv0;v&Qe8SH;xh}1sXK6K35;b>>yUsuG%$#@!OtM#u<$fOdaPRZ$!G@Yl*VsW+ z==Emn(968Y_;yrI=OdCrv)NcTaQ1svc*g*w-znF*C{_XY&~UBHS5_kI zsh?RQ+u@(lbAq&Lpv*r0X#pe7RGmpAkz|{=9%V-rd6bocHyt)ayEvZLRtZE?Q9qv=Udc*fgoJI+Fq#zif4v9SX}y2G|B3?{vl_49hJ~Spi~-nrfvBjqd1tm9`r- z91mXf2PCr~mX+!1_-?gLT;?Lpgrz@dSgD@YRW$-zb_EzB=3jF!(B&L8EwCn>FQU)v zP9vxnwjZH(nPHn*aClT+SDEht;1%QHVfV7nT+V%s_Rv;I`^*ngvi?jh=SR!;sk-^f%eV*dVupt2Ed zRiQ7QL?oSIqAGElMAqWPqwSv3!laT_ifbibAGnIMIMSwnrs)`yT(#ZQLh7y>>^hiJ zx!CkyrpF8vOyk@_KX?ZP@KaKiT0%ytNVaRn^-+zCOHN5FP)H?UqZkiMUdIqu>)r#A zA7SIVRh0BHc)?X`VAI!lv+Rn8&dp(1mHV$QOsn<|hJ}`Zwr7`Y-F@fRVans_q==e_H6||bon(c{G|XG_VWMf? zw2wnd?uJMie6uJJNOkYXyxx!R{0xJD%Zvm_(s{TODP*AUa${Cx&ZA436OApy|KJZd z18G_hT61sv;+Pb0`9p7Zq=Fkx*>cKEg48$tSIwir`B^Bh5RU*Tmprr>@={m@7?ed+ z(YC<@S`64Yhsf*q5u&NB>PX&4l&rO3^(_xf@qa8^5tjO44<3zAmLZ0#?C%`!H#}B( zdXOK1@2$OJLryD#cpF!HT~YcSmrk67YNkN|Pueq_3bT+n?4$j@<@5I(URLDy{$#)K zacCy&%8KQV5);Rx(TBx@uT1MX9^SMh#N|=fs@3m>*7AWI_**^Cj^kb3a!%z|Zhu`* zHSZEUiO8!7J_;U#SH!I!<&V@_@S9smC!ALmHjCwq7%w}OKalm0UK6i}>aN1xVUoS} z3sz;8>*Xe|^f-Na!`!&%7ZR*vNl{F1IlE3Tk(l;8oQQ-p)c;&otXSMze$utLXbiLu zv6f;it_JQy=<~F?RZ7AM0w^BJ5$kf zbs!NO@V{It&riSl!;1chpPm&A;QXrv0+;{^sMl2B?g`+ptTq*LLh-%-2l&4^+h4#x zaISv8KY{=DxxX_=etczK(LVwFh5Rf3&hVe=`a1(L>E8_hkJkRagh{sSHQTZOwgl)q RH~>KW{m26WfCBK3?q8^+ZiWB= diff --git a/openstack_commercial_case_e2e/Resources/fortigate.zip b/openstack_commercial_case_e2e/Resources/fortigate.zip index 654f90ea018a3d185e7d0859b341093a0f19559c..7f70ec1cb67cdebd7d6423b934df249b66e6763d 100755 GIT binary patch delta 2943 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 S{V&rDCu8r#bO+n7-M;~(@KLP* delta 3101 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 Rpan3}0@$el01f7!@Lw%9gIWLp diff --git a/openstack_commercial_case_e2e/Resources/httpd.zip b/openstack_commercial_case_e2e/Resources/httpd.zip index 1db6bb00ad5de515ee1f52c07bb8fd17f3cf89cb..7378d66019ff50d0a4897319a5ddf241b340e0dc 100755 GIT binary patch delta 2865 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 Lj>cKx{8jx66{Ij| delta 3077 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 E1N6#y3jhEB diff --git a/openstack_commercial_case_e2e/Resources/network-topology.zip b/openstack_commercial_case_e2e/Resources/network-topology.zip new file mode 100755 index 0000000000000000000000000000000000000000..40f6ec384441550e1f1e8c0b314c5c705f9bce01 GIT binary patch literal 2137 zcmZ{l2{aViAIE1TOqK@YuOiGNMV6kmOp;~rh$lu2*`6&LGmODg8B_U>Ebk#k_Kc-z zH1;JX4w6hXwz2PH$ta#MA(X%RKmXS`^}qMr`@Q$v-?^W2?>WEU*T(VyF9h(VrMq0S z{<`>k65Ug@H!ci=y{?MG1Y%Ga-*9!CzrzIpZ4tiKhtXR*`n&)@fD{0r@S|`)v=7!J z7>5n<#D!qJ)xtdjP~(nP39K{VhIxlgUa>qS?g6rNBG_mQ02DJ4Ku)|^a;mMF8^X!I zi1bCx!>n|1WZKBMu~cLD+K$G`SsjgEL7f~T$R`bQ?z3Tth?`gn)=#rWDKIs72cn*T zDnGm^T?4-fkLo^c6+^x!z}+G)LMWW#pQof3pOb7!$O!F~*#Zm!I@bmf(g2d^#2+eMMUk}|HA zla7<)6|Bh51zyMw*NPREFiFz`lWsE(zVx0VI-Lqt1|Q6i(-SM4XcrQ_`&zpL>J)@rJSA}ddE5@iWF1$KnU`$vG;`*o z!3cBm^)7G4%}8vK3tM5FUD`D>zoP7_Z~DIVQ$+CQc&P8i1&Pf#yVM2OZq~{2?SzM~ zC7)c#3RJV3eiTJYsn1m3NrTpA(pxJ}QLNzu^xE~YcGsZP31uI4s}_*bft0>q`FM6Q zrq;fr*N@sw5k$&}RnVf|gN&|JgYlBkC&orsNQrOROh12Z&4UyEei8$zENGZ}Se)>H z2})_=XJGuCz}xu5OkREG(g*K+5SH?Guf)A@5=V?5NvK$O0rfny+whe3vz3Da@}M~&2w6W8Kx@| za#J1J5Lv6s9vLbxGOnYvWd(ygPas&Tm%<=Nh(IY&dL5#h9Nl1!JOSb&Is2mf@L`xl-=MIOzy5K1oo(~Y3n1pm0r1Y4G|tTl2HB& zYjcVmmI-(EbV(x+_%H0Jb=2oKPD=Nbig2MK$-keyEr)wb2cKObMKTfkNytf}h%#UC zok!ho%927ZIL6Bjch47XWHmZ{{-dk^>Sx9ReaRG`8WMU zs@C(8r8ha`jUIx(Vx+$jq5oegvX3%0UfM_WV~)e3?lwePI`FAKEOv--b-!L9!J0(N zyc&p>LCdo;?m;hI6u+(8X)U-=6?akFRj!a0YN_n(k)U-Ib!EEaapRc>yEeC>Dif=*8>cI(Lsqx%SyCU` zg^GsJWbvI_?2Q7vlT_D=G1;#gL97oF-6$`h2kVh5p7%KN-{eA=0VumXhQv(ZeH^!7 zmY-d7VF3E_TBx`1)lI!7gObuHRxD;|E!LS~fiMR09WZRz%_*Y(aXe9bluE?`^(`FN zTd633zC|m=Zsl?j8`c5o;Njl$6n~{R^>d>lR-4g+wo;rni!qf+aW*&0BZBY;{wY5{ z1zxk><&%GWga-hq+bcoGepG&J;f5wwaJ2w0QZf@gdPb;i8GneU4iqGl`?R=;2nY~E zErlLUWN2gykl@C$A9mLBy`CX$A?6Vkr&ikx45|pi#GEm~^Owzte;QvtpIsH*ZnBtF z1FZUBcx(om1%_0sB5Sm*x2EzA^+2^|C(u1gs=_-Xx9)O=74%EQG{cV?H`JH~a+LJ` zEpsD42(kFahL5%!YeWDi^tQ{_FosWt8(jn;(~b*gbvPkBQbI7N2Ixm~nMpJvLHpM> zJDmBPX{{^bK8$yE+B<&FHUBkg_h|O-bP!%`x;NspnoDj?L0)X`4L3Jy~q+7uvUt zfGi(;m^`sw59u9nD1P64)<0R+fhl*Id8>8wsiTU!eo47dh6*Nq$fgN41%OEo~Dw5DkUwz#{lsE{O^mU zeQDtT%J*(~2q5?M2naX=SaoY&%k1w1?&~jugl$l3AMhWES-G|V literal 0 HcmV?d00001 diff --git a/openstack_commercial_case_e2e/Resources/service.zip b/openstack_commercial_case_e2e/Resources/service.zip index 6040c35dadce1ca3d47dcdbcb18c906bb91796cb..13d2ba04fcae79c1f1a2d75df1b431f6e2bd9f60 100755 GIT binary patch delta 1344 zcmaE>vPhLTz?+#xgaHH=#AZz7Rj!|zoZ-j0SrUT(_VFyH*k4g!0hhxdeV-r|tf^H{O{lVC>(lh#6x&=YaDlhdzmEx#G7{^Y*# z=53D`2uM|RrM^G2r}Fc&+;a(yb&KEH);R8-X6dJPdTPmpm14b9d)aSV=uat9I8a~e zt`N_8(_vfdokbrutz2-WOgZOZ|F+N<4(1QSIktDtZ2mlRTU^*7<&I?y*FS$Z_+KOF zua=(v;pU>F^VgPKTD*IXPue9b{;fOQ3)Z@NDcR(da%*o~79MhTs!;cYJwaB&TuytA zN=d)x$o)|gZhUBVd3e74zTbs%$ItIRzC%yXq2A)gf}k(fU#>k}tTyG6^t*))i@!`W zHd1TQ^s&Cu626{uP2P_i!WD~W2ZgN_ofqe;-|4dIY-H~2&)VW$>6<2{@jKmFdgtP& z9c!Kn)Xn&LxajB4w~sfi+hcxo#zyJO3Vd=E9P@oTxC2GR<}S|U_I|VQeE5-+*E?dO z7Wx+@x~NV4Qh!_I)Hcpgjr$^T{I7Pks0z;icBpInqOh0yzR3izI^RfHR^cGFWvNz+ z<%_=K-)m)@1)cCg|}DFBffF&mNi1ocT^W=T=o`QBpAXY7Jl0Au;Usx z?U~*s=My$h`q^dumi73eiwPHkX8jWI;3?nD=o+(bz1YM@Yx@7z>;HfJhiz_NZr{6| z$8TvoeEG6*0k_6dC$(jzvP_9Ri+u0M>xrygx{j@~z5LGELXTU2>=)@hYcdpBaY0zi zJ|u7UzOp-k>uTn*bohLg78CrqdW%MbS%k^Y1R3_nW`|g9FCI7@^eiAMw)k{G-~OI7 zt`%GJ!?|xPT(ZuV*Y%0Sf{XR{-1cnGb!(Q{|J7)(bfc_#f{n4?g9$%vryXx-$+S`} zE;5?G#qRU5Ep^MEP48Uj>hE^mODZt=)><+9HrWNw_eb84_?okP1=r0+=|EQhr_-u_ zY20e%RWJk9-_uXGx^|l|i7JYS2O1^d4mwE#y z+2Ff%HV(UgSICqY90@LDe_Sh3{NdEU4_~h)O;J5)cR->~_W1HmM_OL81S|Voe;lQ# z8(_Y3+5V?LdDi;8Pg|VL>isf2Oa9<$@%3>$Q_U8=%~kL?8kcA8 zNIjRZFFoRm`;z#Linr&lb~|a1Z+nS#?y}0A^|E*PzUd2h7)8`{u8Vg!E_%aTo7VX5 zLiwF#n&I;LJGTaGdSMtd)numK(~7?b%YV5)3fmRRx?OeCIRUPh85_5M`L4vRC}O$m z%0kwco6474ym;~Ytm$XfYff6{P8bGzO)XiuZ1JRyH`gY!epyp1d#162Z%w6$7}wrR zzm&Y^di+H!t|5QfCP-}#>cL50(QLCX*fcj9uJ>&9eg1FfZ_cAv7z4avYB?A%OB@wYc?1LsK&-|v z*@9o5%|EwMa?#bvvHUhnIxLen@Q6%a&+o?+17gZemKE@0ng(I&@JLKvED*}{oE0pi z1C%ur^keE|19EjHZvrx>u>+YJleL8OC-?D5DT**4+osNe;j_t)`Lsn?fj(zo-~>W$ L76yh!J`fK8R$fUK delta 1234 zcmZ3a`c`GK4vW-8DKXo3RiSAGbW zrIsh=bm6@m1L$TmZa)>goFgRY!2bjXA@&)5dmuAV9>4(^Yh}2Ov__tU~uM~ zXeUu0dOPomfk5r~@SYIPU4ovBoSYxG#c)kM)s(=vkZY;mqZD14+dnp){%31^FC{i( zq4#~ICj3qh6{Sr32S%(keu*RJ3E<^{*S=)9l(3UdyKoZqC= zZgW5OKzvp2^C-brwiOFQ)qf?-Jigebok{Q9l+R`+B@gz=PJimDTb1Z%w`bP=n%}Er zZbi1-PT$X+WX}4(^Ho9(w!M%z&Aa)={G&BHUx(y$UJNp6 z+ReTpvNMgff^~)NjJ>Su4;FM=FmL_xT~XuVqT81j)gzX7gofv?hHq*q3An@;vIyJ9R4K77o< zYo3?*W%Zm&-qL+`_5!>8O-zbbVoU1X@_tM+n<*sno@aT|?Dt2jI&6M7SH7G3z%Qh* zzE9{p%h#W8OIQ7#tB|Zb>Ea%~XOgwA%KA2Lef;$EPo-Y{OM8xK#_f)Dj0{)Xrf4NE zXyw2Ac;V?X+n~qH?$Zm_yPfvFCRUq%XZPxt^X+PWO}LaZW0sK0Pminh%HO13FE7fj z6aH1(wBO!0zi5k2bf2|FH{QhINkKD=O9EL}6JhSgf&>z6r^8DHIGS7ZjXuj&f=%M{=Z z$&L&RpM5r4uzX~m?7%NIc`l#Y6bglaqzC zfo5_jp=Wpo20;{4XR%FY=a*+wG}0{Gb!xH>zYUW)*W`k{$&~_rOrN;HG8b4RCjS=*VVc4N!j7I**v diff --git a/openstack_commercial_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml b/openstack_commercial_case_e2e/e2e.yaml similarity index 87% rename from openstack_commercial_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml rename to openstack_commercial_case_e2e/e2e.yaml index 6163dd0..9869d28 100755 --- a/openstack_commercial_case_e2e/VNFM-E2E-F5-Fortigate-HTTPD.yaml +++ b/openstack_commercial_case_e2e/e2e.yaml @@ -24,7 +24,7 @@ imports: # The inputs section includes the names of the particular blueprints and # deployments which this blueprint will leverage. inputs: - common_prov_name: + network_prov_name: description: Name of common resources provisioning blueprint/deployment default: VNFM-Networking-Prov-Openstack-networks @@ -61,7 +61,7 @@ inputs: # building blocks. node_templates: - # Common: + # Network-topology: # This blueprint is responsible for creating all of the common resources, # which are later used in other blueprints. Especially: router, # networks, subnets and security groups. @@ -69,16 +69,16 @@ node_templates: # deployment creation. # There's no relationships defined under this node, which means that during # install it will be instantiated at first. - common_prov: + network_prov: type: cloudify.nodes.DeploymentProxy properties: resource_config: blueprint: - id: { get_input: common_prov_name } - blueprint_archive: Resources/common.zip - main_file_name: VNFM-Networking-Prov-Openstack-networks.yaml + id: { get_input: network_prov_name } + blueprint_archive: Resources/network-topology.zip + main_file_name: infrastructure.yaml deployment: - id: { get_input: common_prov_name } + id: { get_input: network_prov_name } ### PROVISIONING ### @@ -88,10 +88,10 @@ node_templates: # infrastructure, including the necessary network interfaces. # DeploymentProxy is used for the blueprint uploading and the # deployment creation. - # A "depends_on" relationship which targets the "common_prov" node is defined. + # A "depends_on" relationship which targets the "network_prov" node is defined. # It means, that during the install workflow, "f5_prov" node will be instantiated - # after "common_prov" node will. That will alllow the "f5_prov" node to create network - # interfaces in the networks created by "common_prov" blueprint. + # after "network_prov" node will. That will alllow the "f5_prov" node to create network + # interfaces in the networks created by "network_prov" blueprint. f5_prov: type: cloudify.nodes.DeploymentProxy properties: @@ -99,22 +99,22 @@ node_templates: blueprint: id: { get_input: f5_prov_name } blueprint_archive: Resources/bigip.zip - main_file_name: VNFM-F5-Prov-Openstack-vm.yaml + main_file_name: infrastructure.yaml deployment: id: { get_input: f5_prov_name } relationships: - type: cloudify.relationships.depends_on - target: common_prov + target: network_prov # FortiGate Provisioning: # This blueprint is responsible for provisioning the FortiGate VM in OpenStack # infrastructure, including the necessary network interfaces. # DeploymentProxy is used for the blueprint uploading and the # deployment creation. - # A "depends_on" relationship which targets the "common_prov" node is defined. + # A "depends_on" relationship which targets the "network_prov" node is defined. # It means, that during the install workflow, "fg_prov" node will be instantiated - # after "common_prov" node will. That will alllow the "fg_prov" node to create network - # interfaces in the networks created by "common_prov" blueprint. + # after "network_prov" node will. That will alllow the "fg_prov" node to create network + # interfaces in the networks created by "network_prov" blueprint. fg_prov: type: cloudify.nodes.DeploymentProxy properties: @@ -122,22 +122,22 @@ node_templates: blueprint: id: { get_input: fg_prov_name } blueprint_archive: Resources/fortigate.zip - main_file_name: VNFM-Fortigate-Prov-Openstack-vm.yaml + main_file_name: infrastructure.yaml deployment: id: { get_input: fg_prov_name } relationships: - type: cloudify.relationships.depends_on - target: common_prov + target: network_prov # HTTPD Provisioning: # This blueprint is responsible for provisioning the HTTPD VM in OpenStack # infrastructure, including the necessary network interfaces. # DeploymentProxy is used for the blueprint uploading and the # deployment creation. - # A "depends_on" relationship which targets the "common_prov" node is defined. + # A "depends_on" relationship which targets the "network_prov" node is defined. # It means, that during the install workflow, "httpd_prov" node will be instantiated - # after "common_prov" node will. That will alllow the "httpd_prov" node to create network - # interfaces in the networks created by "common_prov" blueprint. + # after "network_prov" node will. That will alllow the "httpd_prov" node to create network + # interfaces in the networks created by "network_prov" blueprint. httpd_prov: type: cloudify.nodes.DeploymentProxy properties: @@ -145,12 +145,12 @@ node_templates: blueprint: id: { get_input: httpd_prov_name } blueprint_archive: Resources/httpd.zip - main_file_name: VNFM-HTTPD-Prov-Openstack-vm.yaml + main_file_name: infrastructure.yaml deployment: id: { get_input: httpd_prov_name } relationships: - type: cloudify.relationships.depends_on - target: common_prov + target: network_prov ### CONFIGURATION ### @@ -171,7 +171,7 @@ node_templates: blueprint: id: { get_input: f5_conf_name } blueprint_archive: Resources/bigip.zip - main_file_name: VNFM-F5-Conf.yaml + main_file_name: application.yaml deployment: id: { get_input: f5_conf_name } relationships: @@ -195,7 +195,7 @@ node_templates: blueprint: id: { get_input: fg_conf_name } blueprint_archive: Resources/fortigate.zip - main_file_name: VNFM-Fortigate-Conf.yaml + main_file_name: application.yaml deployment: id: { get_input: fg_conf_name } relationships: @@ -219,7 +219,7 @@ node_templates: blueprint: id: { get_input: httpd_conf_name } blueprint_archive: Resources/httpd.zip - main_file_name: VNFM-HTTPD-Conf.yaml + main_file_name: application.yaml deployment: id: { get_input: httpd_conf_name } relationships: @@ -245,7 +245,7 @@ node_templates: blueprint: id: { get_input: service_prov_name } blueprint_archive: Resources/service.zip - main_file_name: NS-LB-Firewall-F5-Fortigate-HTTPD.yaml + main_file_name: service.yaml deployment: {} # deployment: # id: { get_input: service_prov_name }