{"action":"created","issue":{"url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/185","labels_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/185/labels{/name}","comments_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/185/comments","events_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/185/events","html_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/185","id":55368457,"number":185,"title":"Reverter","user":{"login":"jdkasten","id":1581662,"avatar_url":"https://avatars.githubusercontent.com/u/1581662?v=3","gravatar_id":"","url":"https://api.github.com/users/jdkasten","html_url":"https://github.com/jdkasten","followers_url":"https://api.github.com/users/jdkasten/followers","following_url":"https://api.github.com/users/jdkasten/following{/other_user}","gists_url":"https://api.github.com/users/jdkasten/gists{/gist_id}","starred_url":"https://api.github.com/users/jdkasten/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdkasten/subscriptions","organizations_url":"https://api.github.com/users/jdkasten/orgs","repos_url":"https://api.github.com/users/jdkasten/repos","events_url":"https://api.github.com/users/jdkasten/events{/privacy}","received_events_url":"https://api.github.com/users/jdkasten/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-01-24T11:42:57Z","updated_at":"2015-01-26T09:25:10Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/pulls/185","html_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/185","diff_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/185.diff","patch_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/185.patch"},"body":"Here are the changes...\r\n\r\n1. Split up augeas_configurator.py into augeas_configurator.py and reverter.py\r\nreverter.py contains all of the configuration logging and rollback features that should be usable by more classes than just the Augeas-based configurators.  \r\n\r\n2. Improved the reverter class and added 100% test coverage of Reverter class.  I think the testing is pretty thorough.\r\nHaving a separate Reverter class allowed...\r\n\r\n3.  Better main.py startup functionality.  I have started to place more appropriate errors in the Installers.  They should be able to fail with NoInstallation (if for instance Apache can't be found), or Misconfigured.  The startup scripts can use the new minimalist Reverter class to view config changes and to rollback the configuration when the webserver is misconfigured.\r\nSide note about Misconfigured initialization error:\r\nThe ApacheConfigurator can't fully initialize without running a module test that fails if the server is misconfigured.  The module information is necessary in order to accurately parse the config files. I imagine this problem of initialization misconfiguration will generalize.\r\n\r\n4.  The Revoker class doesn't need a functioning installer to act appropriately.  It can get much of the functionality without the installer.  So I made it optional.\r\n\r\n5.  I attempted to make sure that client.py was safe from having partial functionality. (None Installers/Authenticators)\r\n\r\n6. Caught a few bugs or potential bugs along the way.  If you have noticed your /var/lib/letsencrypt folder has filled with nonce.crt files, I found the source of that problem in dvsni.py and made sure it couldn't happen again.\r\n\r\nI believe everything works, pylint, pep8 ect... but I will go over formatting/documentation again.\r\nInput is appreciated."},"comment":{"url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/comments/71433113","html_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/185#issuecomment-71433113","issue_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/185","id":71433113,"user":{"login":"kuba","id":106176,"avatar_url":"https://avatars.githubusercontent.com/u/106176?v=3","gravatar_id":"","url":"https://api.github.com/users/kuba","html_url":"https://github.com/kuba","followers_url":"https://api.github.com/users/kuba/followers","following_url":"https://api.github.com/users/kuba/following{/other_user}","gists_url":"https://api.github.com/users/kuba/gists{/gist_id}","starred_url":"https://api.github.com/users/kuba/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kuba/subscriptions","organizations_url":"https://api.github.com/users/kuba/orgs","repos_url":"https://api.github.com/users/kuba/repos","events_url":"https://api.github.com/users/kuba/events{/privacy}","received_events_url":"https://api.github.com/users/kuba/received_events","type":"User","site_admin":false},"created_at":"2015-01-26T09:25:10Z","updated_at":"2015-01-26T09:25:10Z","body":"You can bump up coverage to 66%"}}