{"action":"created","issue":{"url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/404","labels_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/404/labels{/name}","comments_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/404/comments","events_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/404/events","html_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/404","id":75376745,"number":404,"title":"Renewer","user":{"login":"schoen","id":1750103,"avatar_url":"https://avatars.githubusercontent.com/u/1750103?v=3","gravatar_id":"","url":"https://api.github.com/users/schoen","html_url":"https://github.com/schoen","followers_url":"https://api.github.com/users/schoen/followers","following_url":"https://api.github.com/users/schoen/following{/other_user}","gists_url":"https://api.github.com/users/schoen/gists{/gist_id}","starred_url":"https://api.github.com/users/schoen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/schoen/subscriptions","organizations_url":"https://api.github.com/users/schoen/orgs","repos_url":"https://api.github.com/users/schoen/repos","events_url":"https://api.github.com/users/schoen/events{/privacy}","received_events_url":"https://api.github.com/users/schoen/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":20,"created_at":"2015-05-11T22:15:34Z","updated_at":"2015-05-21T20:52:41Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/pulls/404","html_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/404","diff_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/404.diff","patch_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/404.patch"},"body":"I'm creating this pull request because the renewer functionality is now working and is passing our tests.\r\n\r\nThere are several outstanding problems or concerns that I'm aware of:\r\n\r\n* This is dependent on the `cli` branch (which I think has already been merged into `master`). (But, as discussed below, this branch breaks some of the functionality of that branch!)\r\n* Although all the unit tests still pass, the integration between the cert enrollment and the revoker is now missing, and so the revoker will potentially no longer be able to actually revoke certs.  We should consider changes to `storage.py` and the revoker so that they work together properly and no revoker functionality is lost.\r\n* The initial version of this PR breaks CLI verbs other than `run`. The reason for this is that there are now three separate actions instead of two: we now have obtaining a cert (auth), enrolling it in the renewal database (a function of storage.py rather than of a configurator plugin), and deploying it in a server (install). The taxonomy of CLI verbs from the CLI branch was based on the separation of auth/install, and does not consider whether or not to perform enroll. Also, the interface of some of the client methods that the other CLI branch verbs used has changed to reflect integration with the renewer branch. So, these verbs probably need to be rethought quite a bit.\r\n* There is some discussion to be had about how to store or represent renewer defaults, perhaps using constant.py instead of the DEFAULTS variable in the renewer and storage code. Especially relevant is default file paths for renewal configs, which need to come from somewhere somehow.\r\n* The current version uses `/tmp/etc` instead of `/etc`, which should be changed, but then some tests may affect the system's real `/etc` directory.\r\n* We should look more closely at file permissions for the creation of the `/etc/letsencrypt` hierarchy and individual files within it.\r\n* Serializing the renewal parameters (the `config` of the client at the time that a cert was originally obtained) results in saving a whole bunch of extraneous information in the renewal config file that I'm pretty sure will scare or confuse users who want to look at that file.\r\n* We also need to think about whether to explicitly write the default renew/deploy intervals into the renewal config file in order to more clearly advise the user of the possibility of changing those intervals.\r\n* Actually running the renewer produces an error \"[Errno 2] No such file or directory\" from a source that I haven't managed to track down yet.  Mysteriously, this doesn't crash or harm the renewal process at all, and the renewal still completes successfully.\r\n* I haven't tested whether we can inhibit successive autorenewals if autorenewal is attempted multiple times without deployment (that is, if we run the renewer 20 times during the autorenew-is-appropriate interval for a lineage before we reach the autodeploy-is-appropriate interval for that lineage, do we get 1 renewal operation or 20?). I have code to look at the most recent version as opposed to the deployed version, but I'm not sure whether that code is currently being used.\r\n\r\nI'm happy to talk about some or all of these before we apply the PR."},"comment":{"url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/comments/104417191","html_url":"https://github.com/letsencrypt/lets-encrypt-preview/pull/404#issuecomment-104417191","issue_url":"https://api.github.com/repos/letsencrypt/lets-encrypt-preview/issues/404","id":104417191,"user":{"login":"coveralls","id":2354108,"avatar_url":"https://avatars.githubusercontent.com/u/2354108?v=3","gravatar_id":"","url":"https://api.github.com/users/coveralls","html_url":"https://github.com/coveralls","followers_url":"https://api.github.com/users/coveralls/followers","following_url":"https://api.github.com/users/coveralls/following{/other_user}","gists_url":"https://api.github.com/users/coveralls/gists{/gist_id}","starred_url":"https://api.github.com/users/coveralls/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coveralls/subscriptions","organizations_url":"https://api.github.com/users/coveralls/orgs","repos_url":"https://api.github.com/users/coveralls/repos","events_url":"https://api.github.com/users/coveralls/events{/privacy}","received_events_url":"https://api.github.com/users/coveralls/received_events","type":"User","site_admin":false},"created_at":"2015-05-21T20:52:41Z","updated_at":"2015-05-21T20:52:41Z","body":"\n[![Coverage Status](https://coveralls.io/builds/2621492/badge)](https://coveralls.io/builds/2621492)\n\nCoverage increased (+0.56%) to 94.9% when pulling **fcd8670bafb72b2c5bf99084449eaf76936b84bc on renewer** into **58156a29d376a83b01be8256894f277d5e5f5b0e on master**.\n"}}