diff options
Diffstat (limited to 'adaptors')
-rw-r--r-- | adaptors/saltstack-adaptor/saltstack-directed-graphs-sample/reqExecCommand/APPC_saltstack-adaptor-1.0-exec-multi-sls.json | 804 |
1 files changed, 397 insertions, 407 deletions
diff --git a/adaptors/saltstack-adaptor/saltstack-directed-graphs-sample/reqExecCommand/APPC_saltstack-adaptor-1.0-exec-multi-sls.json b/adaptors/saltstack-adaptor/saltstack-directed-graphs-sample/reqExecCommand/APPC_saltstack-adaptor-1.0-exec-multi-sls.json index 274adee51..93fa6f3ac 100644 --- a/adaptors/saltstack-adaptor/saltstack-directed-graphs-sample/reqExecCommand/APPC_saltstack-adaptor-1.0-exec-multi-sls.json +++ b/adaptors/saltstack-adaptor/saltstack-directed-graphs-sample/reqExecCommand/APPC_saltstack-adaptor-1.0-exec-multi-sls.json @@ -1,409 +1,399 @@ [
- {
- "id":"65f5c0d6.9c4ce",
- "type":"method",
- "name":"saltstack-adaptor-1.0",
- "xml":"<method rpc='saltstack-adaptor-1.0-exec-multi-sls' mode='sync'>\n",
- "comments":"",
- "outputs":1,
- "x":615,
- "y":273,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "c332cb01.51a3e8"
- ]
- ]
- },
- {
- "id":"bf71bd6e.1be5b",
- "type":"service-logic",
- "name":"APPC 2.0.1",
- "module":"APPC",
- "version":"2.0.1",
- "comments":"",
- "xml":"<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='APPC' version='2.0.1'>",
- "outputs":1,
- "x":406,
- "y":351,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "65f5c0d6.9c4ce"
- ]
- ]
- },
- {
- "id":"40ce8a6.5f7d174",
- "type":"returnFailure",
- "name":"return failure",
- "xml":"<return status='failure'>\n<parameter name='error-code' value='200' />\n<parameter name='error-message' value='`$org.openecomp.appc.adaptor.saltstack.message`' />\n<parameter name='output.status.results' value='`$org.openecomp.appc.adaptor.saltstack.results`' />\n",
- "comments":"",
- "x":1325,
- "y":455,
- "z":"6df02477.0463cc",
- "wires":[
-
- ]
- },
- {
- "id":"c332cb01.51a3e8",
- "type":"execute",
- "name":"execute",
- "xml":"<execute plugin='org.openecomp.appc.adaptor.saltstack.SaltstackAdaptor' method='reqExecCommand' >\n <parameter name='HostName' value='`$AgentUrl`'/>\n <parameter name='Port' value='`$Port`'/>\n <parameter name='User' value='`$User`'/>\n <parameter name='Password' value='`$Password`'/>\n <parameter name='Id' value='test1'/>\n <parameter name='Cmd' value='salt '*' test.ping --out=json --static'/>\n <parameter name='SlsExec' value='false'/>\n <parameter name='Timeout' value='`$Timeout`'/>\n",
- "comments":"",
- "outputs":1,
- "x":824,
- "y":275,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "5b387684.e51be8",
- "4bb6b32e.adfc2c"
- ]
- ]
- },
- {
- "id":"16dfbd4f.b6da73",
- "type":"switchNode",
- "name":"switch",
- "xml":"<switch test=\"`$org.onap.appc.adaptor.saltstack.result.code`\">\n",
- "comments":"",
- "outputs":1,
- "x":607,
- "y":435,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "24d22f52.ef59a",
- "ac765880.a6c548"
- ]
- ]
- },
- {
- "id":"24d22f52.ef59a",
- "type":"other",
- "name":"other",
- "xml":"<outcome value='Other'>\n",
- "comments":"",
- "outputs":1,
- "x":798,
- "y":433,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "40ce8a6.5f7d174"
- ]
- ]
- },
- {
- "id":"5b387684.e51be8",
- "type":"failure",
- "name":"failure",
- "xml":"<outcome value='failure'>\n",
- "comments":"",
- "outputs":1,
- "x":1074,
- "y":272,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "40ce8a6.5f7d174"
- ]
- ]
- },
- {
- "id":"4bb6b32e.adfc2c",
- "type":"other",
- "name":"other",
- "xml":"<outcome value='Other'>\n",
- "comments":"",
- "outputs":1,
- "x":429,
- "y":433,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "16dfbd4f.b6da73"
- ]
- ]
- },
- {
- "id":"ac765880.a6c548",
- "type":"success",
- "name":"success",
- "xml":"<outcome value='200'>\n",
- "comments":"",
- "outputs":1,
- "x":414,
- "y":549,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "2dda30fc.8747"
- ]
- ]
- },
- {
- "id":"e45accfe.91615",
- "type":"returnSuccess",
- "name":"return success",
- "xml":"<return status='success'>\n<parameter name='output.status.code' value='`$org.openecomp.appc.adaptor.saltstack.result.code`' />\n<parameter name='output.status.message' value='`$org.openecomp.appc.adaptor.saltstack.message`'/>\n<parameter name='output.status.results' value = '`$org.openecomp.appc.adaptor.saltstack.results`'/>\n",
- "comments":"",
- "x":1345,
- "y":757,
- "z":"6df02477.0463cc",
- "wires":[
-
- ]
- },
- {
- "id":"11a891ad.55bc1e",
- "type":"dgstart",
- "name":"DGSTART",
- "outputs":1,
- "x":384,
- "y":251,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "bf71bd6e.1be5b"
- ]
- ]
- },
- {
- "id":"a56383b.496c48",
- "type":"comment",
- "name":"SaltStack Adaptor DG",
- "info":"",
- "comments":"",
- "x":756,
- "y":134,
- "z":"6df02477.0463cc",
- "wires":[
-
- ]
- },
- {
- "id":"cfda30b5.5e166",
- "type":"comment",
- "name":"request-method = reqExecCommand, req-action = \"execute multiple SLS commands\"",
- "info":"Here we basically test if minion1 is active by pinging to it, then install vim package to it. \n",
- "comments":"",
- "x":773,
- "y":217,
- "z":"6df02477.0463cc",
- "wires":[
-
- ]
- },
- {
- "id":"a8efb922.f23ce8",
- "type":"other",
- "name":"other",
- "xml":"<outcome value='Other'>\n",
- "comments":"",
- "outputs":1,
- "x":459,
- "y":751,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "3ff32215.20cd0e"
- ]
- ]
- },
- {
- "id":"df0c0907.d17838",
- "type":"execute",
- "name":"execute",
- "xml":"<execute plugin='org.openecomp.appc.adaptor.saltstack.SaltstackAdaptor' method='reqExecCommand' >\n <parameter name='HostName' value='`$AgentUrl`'/>\n <parameter name='Port' value='`$Port`'/>\n <parameter name='User' value='`$User`'/>\n <parameter name='Password' value='`$Password`'/>\n <parameter name='Id' value='test2'/>\n <parameter name='Cmd' value='salt 'minion1' pkg.install vim --out=json --static'/>\n <parameter name='SlsExec' value='false'/>\n <parameter name='Timeout' value='`$Timeout`'/>\n",
- "comments":"",
- "outputs":1,
- "x":836,
- "y":638,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "1e5bbe2e.9cbb82",
- "a8efb922.f23ce8"
- ]
- ]
- },
- {
- "id":"1e5bbe2e.9cbb82",
- "type":"failure",
- "name":"failure",
- "xml":"<outcome value='failure'>\n",
- "comments":"",
- "outputs":1,
- "x":1054,
- "y":644,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "40ce8a6.5f7d174"
- ]
- ]
- },
- {
- "id":"3ff32215.20cd0e",
- "type":"switchNode",
- "name":"switch",
- "xml":"<switch test=\"`$org.onap.appc.adaptor.saltstack.result.code`\">\n",
- "comments":"",
- "outputs":1,
- "x":647,
- "y":745,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "8e2c712b.784b4",
- "3d74cfe5.d41f5"
- ]
- ]
- },
- {
- "id":"8e2c712b.784b4",
- "type":"other",
- "name":"other",
- "xml":"<outcome value='Other'>\n",
- "comments":"",
- "outputs":1,
- "x":830,
- "y":823,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "40ce8a6.5f7d174"
- ]
- ]
- },
- {
- "id":"3d74cfe5.d41f5",
- "type":"success",
- "name":"success",
- "xml":"<outcome value='200'>\n",
- "comments":"",
- "outputs":1,
- "x":829,
- "y":758,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "8313564b.004798"
- ]
- ]
- },
- {
- "id":"2dda30fc.8747",
- "type":"switchNode",
- "name":"switch",
- "xml":"<switch test=\"`$test1.minion1`\">\n",
- "comments":"",
- "outputs":1,
- "x":586,
- "y":549,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "e0133af5.2ca028",
- "7f28f521.cf47cc"
- ]
- ]
- },
- {
- "id":"7f28f521.cf47cc",
- "type":"other",
- "name":"outcome",
- "xml":"<outcome value='true'>\n",
- "comments":"",
- "outputs":1,
- "x":656,
- "y":640,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "df0c0907.d17838"
- ]
- ]
- },
- {
- "id":"e0133af5.2ca028",
- "type":"other",
- "name":"other",
- "xml":"<outcome value='Other'>\n",
- "comments":"",
- "outputs":1,
- "x":780,
- "y":549,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "40ce8a6.5f7d174"
- ]
- ]
- },
- {
- "id":"8313564b.004798",
- "type":"switchNode",
- "name":"switch",
- "xml":"<switch test=\"`$test2.minion1.retcode`\">\n",
- "comments":"",
- "outputs":1,
- "x":986,
- "y":752,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "13d18d2d.71fbf3",
- "2e940add.522a36"
- ]
- ]
- },
- {
- "id":"13d18d2d.71fbf3",
- "type":"other",
- "name":"other",
- "xml":"<outcome value='Other'>\n",
- "comments":"",
- "outputs":1,
- "x":1165,
- "y":825,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "40ce8a6.5f7d174"
- ]
- ]
- },
- {
- "id":"2e940add.522a36",
- "type":"success",
- "name":"success",
- "xml":"<outcome value='0'>\n",
- "comments":"",
- "outputs":1,
- "x":1156,
- "y":754,
- "z":"6df02477.0463cc",
- "wires":[
- [
- "e45accfe.91615"
- ]
- ]
- },
- {
- "id":"6d6678d2.6a9bd8",
- "type":"comment",
- "name":"Assumptions for this DG (example-server)",
- "info":"Here we assume, the saltstack server is the example-vagrant based server. Where, the master saltstact controlls minion1 and minion2. ",
- "comments":"",
- "x":756,
- "y":173,
- "z":"6df02477.0463cc",
- "wires":[
-
- ]
- }
+ {
+ "id": "928e0dce.402f",
+ "type": "method",
+ "name": "saltstack-adaptor-1.0",
+ "xml": "<method rpc='saltstack-adaptor-1.0-exec-multi-sls' mode='sync'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 321,
+ "y": 7068.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "62d8cc0b.aa7dd4"
+ ]
+ ]
+ },
+ {
+ "id": "64557b1d.fb9fc4",
+ "type": "service-logic",
+ "name": "APPC 2.0.1",
+ "module": "APPC",
+ "version": "2.0.1",
+ "comments": "",
+ "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='APPC' version='2.0.1'>",
+ "outputs": 1,
+ "x": 112,
+ "y": 7146.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "928e0dce.402f"
+ ]
+ ]
+ },
+ {
+ "id": "30b2fec.9d39602",
+ "type": "returnFailure",
+ "name": "return failure",
+ "xml": "<return status='failure'>\n<parameter name='error-code' value='200' />\n<parameter name='error-message' value='`$org.openecomp.appc.adaptor.saltstack.message`' />\n<parameter name='output.status.results' value='`$org.openecomp.appc.adaptor.saltstack.results`' />\n",
+ "comments": "",
+ "x": 1031,
+ "y": 7250.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": []
+ },
+ {
+ "id": "62d8cc0b.aa7dd4",
+ "type": "execute",
+ "name": "execute",
+ "xml": "<execute plugin='org.openecomp.appc.adaptor.saltstack.SaltstackAdaptor' method='reqExecCommand' >\n <parameter name='HostName' value='`$AgentUrl`'/>\n <parameter name='Port' value='`$Port`'/>\n <parameter name='User' value='`$User`'/>\n <parameter name='Password' value='`$Password`'/>\n <parameter name='Id' value='test1'/>\n <parameter name='Cmd' value='salt '*' test.ping --out=json --static'/>\n <parameter name='SlsExec' value='false'/>\n <parameter name='Timeout' value='`$Timeout`'/>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 530,
+ "y": 7070.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "76a4f341.d89c9c",
+ "7cc55c8b.69d364"
+ ]
+ ]
+ },
+ {
+ "id": "9911c7f1.eb17f8",
+ "type": "switchNode",
+ "name": "switch",
+ "xml": "<switch test=\"`$org.onap.appc.adaptor.saltstack.result.code`\">\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 313,
+ "y": 7230.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "4f12ff6a.67ffa",
+ "6e81d4ca.527a7c"
+ ]
+ ]
+ },
+ {
+ "id": "4f12ff6a.67ffa",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 504,
+ "y": 7228.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "30b2fec.9d39602"
+ ]
+ ]
+ },
+ {
+ "id": "76a4f341.d89c9c",
+ "type": "failure",
+ "name": "failure",
+ "xml": "<outcome value='failure'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 780,
+ "y": 7067.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "30b2fec.9d39602"
+ ]
+ ]
+ },
+ {
+ "id": "7cc55c8b.69d364",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 135,
+ "y": 7228.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "9911c7f1.eb17f8"
+ ]
+ ]
+ },
+ {
+ "id": "6e81d4ca.527a7c",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='200'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 120,
+ "y": 7344.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "dc820ee4.c97b9"
+ ]
+ ]
+ },
+ {
+ "id": "9ff7171b.c735a8",
+ "type": "returnSuccess",
+ "name": "return success",
+ "xml": "<return status='success'>\n<parameter name='output.status.code' value='`$org.openecomp.appc.adaptor.saltstack.result.code`' />\n<parameter name='output.status.message' value='`$org.openecomp.appc.adaptor.saltstack.message`'/>\n<parameter name='output.status.results' value = '`$org.openecomp.appc.adaptor.saltstack.results`'/>\n",
+ "comments": "",
+ "x": 1051,
+ "y": 7552.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": []
+ },
+ {
+ "id": "c1232260.ea0f3",
+ "type": "dgstart",
+ "name": "DGSTART",
+ "outputs": 1,
+ "x": 90,
+ "y": 7046.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "64557b1d.fb9fc4"
+ ]
+ ]
+ },
+ {
+ "id": "fea43940.e1a288",
+ "type": "comment",
+ "name": "SaltStack Adaptor DG",
+ "info": "",
+ "comments": "",
+ "x": 462,
+ "y": 6929.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": []
+ },
+ {
+ "id": "6e590ea4.4dbbe",
+ "type": "comment",
+ "name": "request-method = reqExecCommand, req-action = \"execute multiple SLS commands\"",
+ "info": "Here we basically test if minion1 is active by pinging to it, then install vim package to it. \n",
+ "comments": "",
+ "x": 479,
+ "y": 7012.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": []
+ },
+ {
+ "id": "f81cd6d1.cb35c8",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 165,
+ "y": 7546.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "dfa8d33d.40cb1"
+ ]
+ ]
+ },
+ {
+ "id": "e0cb131.8437ff",
+ "type": "execute",
+ "name": "execute",
+ "xml": "<execute plugin='org.openecomp.appc.adaptor.saltstack.SaltstackAdaptor' method='reqExecCommand' >\n <parameter name='HostName' value='`$AgentUrl`'/>\n <parameter name='Port' value='`$Port`'/>\n <parameter name='User' value='`$User`'/>\n <parameter name='Password' value='`$Password`'/>\n <parameter name='Id' value='test2'/>\n <parameter name='Cmd' value='salt 'minion1' pkg.install vim --out=json --static'/>\n <parameter name='SlsExec' value='false'/>\n <parameter name='Timeout' value='`$Timeout`'/>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 542,
+ "y": 7433.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "4f347b72.f99ab4",
+ "f81cd6d1.cb35c8"
+ ]
+ ]
+ },
+ {
+ "id": "4f347b72.f99ab4",
+ "type": "failure",
+ "name": "failure",
+ "xml": "<outcome value='failure'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 760,
+ "y": 7439.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "30b2fec.9d39602"
+ ]
+ ]
+ },
+ {
+ "id": "dfa8d33d.40cb1",
+ "type": "switchNode",
+ "name": "switch",
+ "xml": "<switch test=\"`$org.onap.appc.adaptor.saltstack.result.code`\">\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 353,
+ "y": 7540.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "520ee985.d20478",
+ "fcde4ee2.f386e"
+ ]
+ ]
+ },
+ {
+ "id": "520ee985.d20478",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 536,
+ "y": 7618.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "30b2fec.9d39602"
+ ]
+ ]
+ },
+ {
+ "id": "fcde4ee2.f386e",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='200'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 535,
+ "y": 7553.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "f04ba6e5.9e7f18"
+ ]
+ ]
+ },
+ {
+ "id": "dc820ee4.c97b9",
+ "type": "switchNode",
+ "name": "switch",
+ "xml": "<switch test=\"`$test1.minion1`\">\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 292,
+ "y": 7344.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "8c2d58bc.919cc8",
+ "ea1da5e.ec72a58"
+ ]
+ ]
+ },
+ {
+ "id": "ea1da5e.ec72a58",
+ "type": "other",
+ "name": "outcome",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 362,
+ "y": 7435.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "e0cb131.8437ff"
+ ]
+ ]
+ },
+ {
+ "id": "8c2d58bc.919cc8",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 486,
+ "y": 7344.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "30b2fec.9d39602"
+ ]
+ ]
+ },
+ {
+ "id": "f04ba6e5.9e7f18",
+ "type": "switchNode",
+ "name": "switch",
+ "xml": "<switch test=\"`$test2.minion1.retcode`\">\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 692,
+ "y": 7547.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "de6d2144.3955",
+ "e878d18c.d4094"
+ ]
+ ]
+ },
+ {
+ "id": "de6d2144.3955",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 871,
+ "y": 7620.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "30b2fec.9d39602"
+ ]
+ ]
+ },
+ {
+ "id": "e878d18c.d4094",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='0'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 862,
+ "y": 7549.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": [
+ [
+ "9ff7171b.c735a8"
+ ]
+ ]
+ },
+ {
+ "id": "d76f2fc3.1e194",
+ "type": "comment",
+ "name": "Assumptions for this DG (example-server)",
+ "info": "Here we assume, the saltstack server is the example-vagrant based server. Where, the master saltstact controlls minion1 and minion2. ",
+ "comments": "",
+ "x": 462,
+ "y": 6968.2001953125,
+ "z": "c817b245.e1acf",
+ "wires": []
+ }
]
\ No newline at end of file |