{"action":"created","issue":{"url":"https://api.github.com/repos/ansible/ansible/issues/22192","repository_url":"https://api.github.com/repos/ansible/ansible","labels_url":"https://api.github.com/repos/ansible/ansible/issues/22192/labels{/name}","comments_url":"https://api.github.com/repos/ansible/ansible/issues/22192/comments","events_url":"https://api.github.com/repos/ansible/ansible/issues/22192/events","html_url":"https://github.com/ansible/ansible/issues/22192","id":211373911,"node_id":"MDU6SXNzdWUyMTEzNzM5MTE=","number":22192,"title":"netconf-config.py should provide control for deployment strategy","user":{"login":"wisotzky","id":10410757,"node_id":"MDQ6VXNlcjEwNDEwNzU3","avatar_url":"https://avatars3.githubusercontent.com/u/10410757?v=4","gravatar_id":"","url":"https://api.github.com/users/wisotzky","html_url":"https://github.com/wisotzky","followers_url":"https://api.github.com/users/wisotzky/followers","following_url":"https://api.github.com/users/wisotzky/following{/other_user}","gists_url":"https://api.github.com/users/wisotzky/gists{/gist_id}","starred_url":"https://api.github.com/users/wisotzky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wisotzky/subscriptions","organizations_url":"https://api.github.com/users/wisotzky/orgs","repos_url":"https://api.github.com/users/wisotzky/repos","events_url":"https://api.github.com/users/wisotzky/events{/privacy}","received_events_url":"https://api.github.com/users/wisotzky/received_events","type":"User","site_admin":false},"labels":[{"id":437720699,"node_id":"MDU6TGFiZWw0Mzc3MjA2OTk=","url":"https://api.github.com/repos/ansible/ansible/labels/affects_2.2","name":"affects_2.2","color":"5319e7","default":false},{"id":852590921,"node_id":"MDU6TGFiZWw4NTI1OTA5MjE=","url":"https://api.github.com/repos/ansible/ansible/labels/feature","name":"feature","color":"006b75","default":false},{"id":496359346,"node_id":"MDU6TGFiZWw0OTYzNTkzNDY=","url":"https://api.github.com/repos/ansible/ansible/labels/module","name":"module","color":"1d76db","default":false},{"id":339653091,"node_id":"MDU6TGFiZWwzMzk2NTMwOTE=","url":"https://api.github.com/repos/ansible/ansible/labels/networking","name":"networking","color":"c7def8","default":false},{"id":420038402,"node_id":"MDU6TGFiZWw0MjAwMzg0MDI=","url":"https://api.github.com/repos/ansible/ansible/labels/performance","name":"performance","color":"555555","default":false},{"id":636327968,"node_id":"MDU6TGFiZWw2MzYzMjc5Njg=","url":"https://api.github.com/repos/ansible/ansible/labels/support:community","name":"support:community","color":"ededed","default":false}],"state":"open","locked":false,"assignee":{"login":"privateip","id":414626,"node_id":"MDQ6VXNlcjQxNDYyNg==","avatar_url":"https://avatars1.githubusercontent.com/u/414626?v=4","gravatar_id":"","url":"https://api.github.com/users/privateip","html_url":"https://github.com/privateip","followers_url":"https://api.github.com/users/privateip/followers","following_url":"https://api.github.com/users/privateip/following{/other_user}","gists_url":"https://api.github.com/users/privateip/gists{/gist_id}","starred_url":"https://api.github.com/users/privateip/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privateip/subscriptions","organizations_url":"https://api.github.com/users/privateip/orgs","repos_url":"https://api.github.com/users/privateip/repos","events_url":"https://api.github.com/users/privateip/events{/privacy}","received_events_url":"https://api.github.com/users/privateip/received_events","type":"User","site_admin":false},"assignees":[{"login":"privateip","id":414626,"node_id":"MDQ6VXNlcjQxNDYyNg==","avatar_url":"https://avatars1.githubusercontent.com/u/414626?v=4","gravatar_id":"","url":"https://api.github.com/users/privateip","html_url":"https://github.com/privateip","followers_url":"https://api.github.com/users/privateip/followers","following_url":"https://api.github.com/users/privateip/following{/other_user}","gists_url":"https://api.github.com/users/privateip/gists{/gist_id}","starred_url":"https://api.github.com/users/privateip/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privateip/subscriptions","organizations_url":"https://api.github.com/users/privateip/orgs","repos_url":"https://api.github.com/users/privateip/repos","events_url":"https://api.github.com/users/privateip/events{/privacy}","received_events_url":"https://api.github.com/users/privateip/received_events","type":"User","site_admin":false}],"milestone":null,"comments":18,"created_at":"2017-03-02T12:14:03Z","updated_at":"2018-08-26T00:47:01Z","closed_at":null,"author_association":"CONTRIBUTOR","body":"##### ISSUE TYPE\r\n - Feature Idea\r\n\r\n##### COMPONENT NAME\r\nlib/ansible/modules/network/netconf/netconf_config.py\r\n\r\n##### ANSIBLE VERSION\r\n```\r\nansible 2.2.1.0\r\n  config file =\r\n  configured module search path = Default w/o overrides\r\n```\r\n\r\n##### SUMMARY\r\nThe current implementation of netconf-config.py is enforcing lock/unlock of the datastore, discard-changes before edit-config and commit after edit-config (if there are changes). Technically there is nothing to say against this principle. But the current approach might cause performance issues, if you call the module 100 times to create for example 100 VPN services. Reason is, that from netconf server point of view a \"commit\" is relatively compute intense. For example I have seen cases with large configs on Juniper MX, where a commit was taking several minutes.\r\n\r\nSo for performance optimization it makes a lot of sense to call the module 100 times without commit and just do single commit after all the changes - which potentially means to break down the functionality into two modules: one to apply changes and another one to commit changes. \r\n\r\nAn important aspect for this optimization is, that ncclient will open/close the NETCONF-over-SSH session each time the module is called. Using explicit lock()/unlock() NETCONF servers typically will release the lock if the NETCONF session is closed and changes in candidate are automatically discarded. Therefore it makes absolutely sense, not just to control the \"commit\" - but to make the discard-changes and lock/unlock options as well.\r\n"},"comment":{"url":"https://api.github.com/repos/ansible/ansible/issues/comments/416005854","html_url":"https://github.com/ansible/ansible/issues/22192#issuecomment-416005854","issue_url":"https://api.github.com/repos/ansible/ansible/issues/22192","id":416005854,"node_id":"MDEyOklzc3VlQ29tbWVudDQxNjAwNTg1NA==","user":{"login":"ansibot","id":6585283,"node_id":"MDQ6VXNlcjY1ODUyODM=","avatar_url":"https://avatars0.githubusercontent.com/u/6585283?v=4","gravatar_id":"","url":"https://api.github.com/users/ansibot","html_url":"https://github.com/ansibot","followers_url":"https://api.github.com/users/ansibot/followers","following_url":"https://api.github.com/users/ansibot/following{/other_user}","gists_url":"https://api.github.com/users/ansibot/gists{/gist_id}","starred_url":"https://api.github.com/users/ansibot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ansibot/subscriptions","organizations_url":"https://api.github.com/users/ansibot/orgs","repos_url":"https://api.github.com/users/ansibot/repos","events_url":"https://api.github.com/users/ansibot/events{/privacy}","received_events_url":"https://api.github.com/users/ansibot/received_events","type":"User","site_admin":false},"created_at":"2018-08-26T00:47:01Z","updated_at":"2018-08-26T00:47:01Z","author_association":"CONTRIBUTOR","body":"cc @justjais\n[click here for bot help](https://github.com/ansible/ansibullbot/blob/master/ISSUE_HELP.md)\n<!--- boilerplate: notify --->"}}
{"actor":{"display_login":"ansibot"}}