{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":272847366,"defaultBranch":"main","name":"cloud-init","ownerLogin":"dermotbradley","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2020-06-17T01:13:50.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2300518?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1717296633.0","currentOid":""},"activityList":{"items":[{"before":"826c35ee76d7b9d580205375ead49c7df8b37500","after":"a1de3d5f4f20cfab4b1ffb9e5bc432f709451f6a","ref":"refs/heads/cc_users_groups_fix_password_lock_unlock","pushedAt":"2024-06-27T16:13:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Currently cc_user_groups assumes that \"useradd\" never locks the\npassword field of newly created users. This is an incorrect\nassumption.\n\nFrom the useradd manpage:\n\n'-p, --password PASSWORD\n The encrypted password, as returned by crypt(3). The default is\n to disable the password.'\n\nThat is, if cloud-init runs 'useradd' but does not pass it the \"-p\"\noption (with an encrypted password) then the new user's password\nfield will be locked by \"useradd\".\n\ncloud-init only passes the \"-p\" option when calling \"useradd\" when\nuser-data specifies the \"passwd\" option for a new user. For user-data\nthat specifies either the \"hashed_passwd\" or \"plain_text_passwd\"\noptions instead then cloud-init calls \"useradd\" without the \"-p\"\noption and so the password field of such a user will be locked by\n\"useradd\".\n\nFor user-data that specifies \"hash_passwd\" for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password field, however then cloud-init calls \"chpasswd -e\" to\nset the encrypted password which also results in the password field\nbeing unlocked.\n\nFor user-data that specifies \"plain_text_passwd\" for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password. cloud-init then calls \"chpasswd\" to set the password\nwhich also results in the password field being unlocked.\n\nFor user-data that specifies no password at all for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password. The password field is left locked.\n\nIn all the above scenarios \"passwd -l\" may be called later by\ncloud-init to enforce \"lock_passwd: true\").\n\nConversely where \"lock_passwd: false\" applies the above \"usermod\"\nsituation (for \"hash_passwd\", \"plain_text_passwd\" or no password)\nmeans that newly created users may have password fields locked when\nthey should be unlocked.\n\nFor Alpine, \"adduser\" does not support any form of password being\npassed and it always locks the password field. Therefore the password\nneeds to be unlocked if \"lock_passwd: false\".\n\nThis PR changes add_user (in both __init__.py and alpine.py) to\nexplicitly call either lock_passwd or unlock_passwd to achieve the\ndesired final result.\n\nAs a \"safety\" feature when \"lock_passwd: false\" is defined for a\n(either new or existing) user without any password value then it will\n*not* unlock the passsword. This \"safety\" feature can be overriden by\nspecifying a blank password in the user-data (i.e. passwd: \"\").","shortMessageHtmlLink":"Currently cc_user_groups assumes that \"useradd\" never locks the"}},{"before":"4e29a7d378ac7d29130ec3c8bcef272979d0f5bc","after":"826c35ee76d7b9d580205375ead49c7df8b37500","ref":"refs/heads/cc_users_groups_fix_password_lock_unlock","pushedAt":"2024-06-27T15:56:56.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Currently cc_user_groups assumes that \"useradd\" never locks the\npassword field of newly created users. This is an incorrect\nassumption.\n\nFrom the useradd manpage:\n\n'-p, --password PASSWORD\n The encrypted password, as returned by crypt(3). The default is\n to disable the password.'\n\nThat is, if cloud-init runs 'useradd' but does not pass it the \"-p\"\noption (with an encrypted password) then the new user's password\nfield will be locked by \"useradd\".\n\ncloud-init only passes the \"-p\" option when calling \"useradd\" when\nuser-data specifies the \"passwd\" option for a new user. For user-data\nthat specifies either the \"hashed_passwd\" or \"plain_text_passwd\"\noptions instead then cloud-init calls \"useradd\" without the \"-p\"\noption and so the password field of such a user will be locked by\n\"useradd\".\n\nFor user-data that specifies \"hash_passwd\" for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password field, however then cloud-init calls \"chpasswd -e\" to\nset the encrypted password which also results in the password field\nbeing unlocked.\n\nFor user-data that specifies \"plain_text_passwd\" for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password. cloud-init then calls \"chpasswd\" to set the password\nwhich also results in the password field being unlocked.\n\nFor user-data that specifies no password at all for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password. The password field is left locked.\n\nIn all the above scenarios \"passwd -l\" may be called later by\ncloud-init to enforce \"lock_passwd: true\").\n\nConversely where \"lock_passwd: false\" applies the above \"usermod\"\nsituation (for \"hash_passwd\", \"plain_text_passwd\" or no password)\nmeans that newly created users may have password fields locked when\nthey should be unlocked.\n\nFor Alpine, \"adduser\" does not support any form of password being\npassed and it always locks the password field. Therefore the password\nneeds to be unlocked if \"lock_passwd: false\".\n\nThis PR changes add_user (in both __init__.py and alpine.py) to\nexplicitly call either lock_passwd or unlock_passwd to achieve the\ndesired final result.\n\nAs a \"safety\" feature when \"lock_passwd: false\" is defined for a\n(either new or existing) user without any password value then it will\n*not* unlock the passsword. This \"safety\" feature can be overriden by\nspecifying a blank password in the user-data (i.e. passwd: \"\").","shortMessageHtmlLink":"Currently cc_user_groups assumes that \"useradd\" never locks the"}},{"before":"741c64995b55eea428982c8821e2255a8315b7d1","after":"4e29a7d378ac7d29130ec3c8bcef272979d0f5bc","ref":"refs/heads/cc_users_groups_fix_password_lock_unlock","pushedAt":"2024-06-02T03:28:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Currently cc_user_groups assumes that \"useradd\" never locks the\npassword field of newly created users. This is an incorrect\nassumption.\n\nFrom the useradd manpage:\n\n'-p, --password PASSWORD\n The encrypted password, as returned by crypt(3). The default is\n to disable the password.'\n\nThat is, if cloud-init runs 'useradd' but does not pass it the \"-p\"\noption (with an encrypted password) then the new user's password\nfield will be locked by \"useradd\".\n\ncloud-init only passes the \"-p\" option when calling \"useradd\" when\nuser-data specifies the \"passwd\" option for a new user. For user-data\nthat specifies either the \"hashed_passwd\" or \"plain_text_passwd\"\noptions instead then cloud-init calls \"useradd\" without the \"-p\"\noption and so the password field of such a user will be locked by\n\"useradd\".\n\nFor user-data that specifies \"hash_passwd\" for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password field, however then cloud-init calls \"chpasswd -e\" to\nset the encrypted password which also results in the password field\nbeing unlocked.\n\nFor user-data that specifies either \"plain_text_passwd\" for a new\nuser then \"useradd\" is called with no \"-p\" option, so causing\n\"useradd\" to lock the password. cloud-init then calls \"chpasswd\" to\nset the password which also results in the password field being\nunlocked.\n\nFor user-data that specifies no password at all for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password. The password field is left locked.\n\nIn all the above scenarios \"passwd -l\" may be called later by\ncloud-init to enforce \"lock_passwd: true\").\n\nConversely where \"lock_passwd: false\" applies the above \"usermod\"\nsituation (for \"hash_passwd\", \"plain_text_passwd\" or no password)\nmeans that newly created users may have password fields locked when\nthey should be unlocked.\n\nFor Alpine, \"adduser\" does not support any form of password being\npassed and it always locks the password field. Therefore the password\nneeds to be unlocked if \"lock_passwd: false\".\n\nThis PR changes add_user (in both __init__.py and alpine.py) to\nexplicitly call either lock_passwd or unlock_passwd at all times to\nachieve the desired final result.","shortMessageHtmlLink":"Currently cc_user_groups assumes that \"useradd\" never locks the"}},{"before":null,"after":"741c64995b55eea428982c8821e2255a8315b7d1","ref":"refs/heads/cc_users_groups_fix_password_lock_unlock","pushedAt":"2024-06-02T02:50:33.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Currently cc_user_groups assumes that \"useradd\" never locks the\npassword field of newly created users. This is an incorrect\nassumption.\n\nFrom the useradd manpage:\n\n'-p, --password PASSWORD\n The encrypted password, as returned by crypt(3). The default is\n to disable the password.'\n\nThat is, if cloud-init runs 'useradd' but does not pass it the \"-p\"\noption (with an encrypted password) then the new user's password\nfield will be locked by \"useradd\".\n\ncloud-init only passes the \"-p\" option when calling \"useradd\" when\nuser-data specifies the \"passwd\" option for a new user. For user-data\nthat specifies either the \"hashed_passwd\" or \"plain_text_passwd\"\noptions instead then cloud-init calls \"useradd\" without the \"-p\"\noption and so the password field of such a user will be locked by\n\"useradd\".\n\nFor user-data that specifies \"hash_passwd\" for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password field, however then cloud-init calls \"chpasswd -e\" to\nset the encrypted password which also results in the password field\nbeing unlocked.\n\nFor user-data that specifies either \"plain_text_passwd\" for a new\nuser then \"useradd\" is called with no \"-p\" option, so causing\n\"useradd\" to lock the password. cloud-init then calls \"chpasswd\" to\nset the password which also results in the password field being\nunlocked.\n\nFor user-data that specifies no password at all for a new user then\n\"useradd\" is called with no \"-p\" option, so causing \"useradd\" to lock\nthe password. The password field is left locked.\n\nIn all the above scenarios \"passwd -l\" may be called later by\ncloud-init to enforce \"lock_passwd: true\").\n\nConversely where \"lock_passwd: false\" applies the above \"usermod\"\nsituation (for \"hash_passwd\", \"plain_text_passwd\" or no password)\nmeans that newly created users may have password fields locked when\nthey should be unlocked.\n\nFor Alpine, \"adduser\" does not support any form of password being\npassed and it always locks the password field. Therefore the password\nneeds to be unlocked if \"lock_passwd: false\".\n\nThis PR changes add_user (in both __init__.py and alpine.py) to\nexplicitly call either lock_passwd or unlock_passwd at all times to\nachieve the desired final result.","shortMessageHtmlLink":"Currently cc_user_groups assumes that \"useradd\" never locks the"}},{"before":"19cb8cf926a31bef1d60a643a7f9d945f9a16591","after":"e520c944e9792d04ac5881f660c61d9ad27a1989","ref":"refs/heads/main","pushedAt":"2024-06-01T19:29:59.000Z","pushType":"push","commitsCount":19,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"growpart: Fix behaviour for ZFS datasets (#5169)\n\non FreeBSD, ZFS datasets aren't exposed directly as disks devices, so\nstats will fail. Currently, this means that growpart will be skipped for\nFreeBSD ZFS volumes, even tho we are perfectly capable of resizing ZFS.\n\n- Return fs from devent2dev(), which is now inappropriately named\n- Add get_zfs_size() helper, and extend get_size() to accept an `fs`\n parameter.\n- Add _call_resizer() helper, to avoid an indent on `if fs == zfs`\n- Add a unittest to show the behaviour\n\nSponsored by:\tThe FreeBSD Foundation","shortMessageHtmlLink":"growpart: Fix behaviour for ZFS datasets (canonical#5169)"}},{"before":"fabe794f72e7e2573e1ae929f68e858e4237ed79","after":"71d7d920c38673fdd095e7b5b3173af63c12bf88","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-31T02:28:04.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"ec6eb6f85b4d49258a9c0c8de4f28d835a9f5211","after":"fabe794f72e7e2573e1ae929f68e858e4237ed79","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-31T02:00:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"75149def25c3cf65319849164ed7a0479cac4369","after":"ec6eb6f85b4d49258a9c0c8de4f28d835a9f5211","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-29T03:36:25.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"abf8d919c798f06d49983aab8844bc64662db662","after":"75149def25c3cf65319849164ed7a0479cac4369","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-29T03:14:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"bdb1bb2c3eaab05afbfff9244028cd90337b489d","after":"abf8d919c798f06d49983aab8844bc64662db662","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-25T14:38:11.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"3286cc2c3d4fb27161a69a8c14fdec525b809b56","after":"bdb1bb2c3eaab05afbfff9244028cd90337b489d","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-25T14:17:06.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"197409efda9e7f6feec1d6a85f7a6b2ad7ad1ec5","after":"19cb8cf926a31bef1d60a643a7f9d945f9a16591","ref":"refs/heads/main","pushedAt":"2024-05-25T14:11:12.000Z","pushType":"push","commitsCount":90,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"tests(alpine): github trust lxc mounted source dir cloud-init-ro (#5329)","shortMessageHtmlLink":"tests(alpine): github trust lxc mounted source dir cloud-init-ro (can…"}},{"before":"b3430fb008c44f493e3c6257b20c9dfcb5fcd853","after":"3286cc2c3d4fb27161a69a8c14fdec525b809b56","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-10T19:12:10.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"7fb86acd32e8400667a7146b40077a5a813f1be9","after":"b3430fb008c44f493e3c6257b20c9dfcb5fcd853","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-10T18:59:31.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"b88619931ed6ef30bb1c0b7f1f2a0314f81c8ba2","after":"7fb86acd32e8400667a7146b40077a5a813f1be9","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-10T18:31:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"d84c347e6932bd634fde4b094fe918c97d6f78ed","after":"b88619931ed6ef30bb1c0b7f1f2a0314f81c8ba2","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-05-10T18:19:20.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":null,"after":"d84c347e6932bd634fde4b094fe918c97d6f78ed","ref":"refs/heads/alpine-busybox-user-group-tools-support","pushedAt":"2024-04-15T01:28:45.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup\n\nBy default Alpine Linux provides Busybox utilities such as adduser\nand addgroup for managing users and groups. Optionally the Alpine\n\"shadow\" package provides the traditional useradd/groupadd\nutilities.\n\nAdd fallback support for the Busybox user/group management utilities\nfor Alpine Linux.","shortMessageHtmlLink":"cloudinit/distros/alpine.py: add support for Busybox adduser/addgroup"}},{"before":"90fd7ac0e3a97267b9c4d6503835855213369973","after":"197409efda9e7f6feec1d6a85f7a6b2ad7ad1ec5","ref":"refs/heads/main","pushedAt":"2024-04-14T20:08:29.000Z","pushType":"push","commitsCount":143,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"feat(opennebula): Add support for posix shell\n\nA hard dependency on bash is undesirable for many reasons. Use 'set'\nfor getting environment variables, rather than bash features. This also\nworks with bash in posix mode.\n\nNote: The choice to make the datasource configuration implementation a bash\n script was highly unusual. Unfortunately the format is in OpenNebula's\n control, not cloud-init's. Still, adding posix shell support to\n cloud-init's implementation is an incremental improvement.\n\n[1] by outputting ansi-c strings - $'' - rather than multi-line strings","shortMessageHtmlLink":"feat(opennebula): Add support for posix shell"}},{"before":"a9d0bbb97aa6cd98a5d2e363493236ec38d25655","after":"ab0df95e9371fff5d0e3e8ec67aef1b24295a6f0","ref":"refs/heads/improve-openrc-files","pushedAt":"2024-02-20T16:06:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Improve OpenRC files","shortMessageHtmlLink":"Improve OpenRC files"}},{"before":null,"after":"a9d0bbb97aa6cd98a5d2e363493236ec38d25655","ref":"refs/heads/improve-openrc-files","pushedAt":"2024-02-20T04:36:02.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Improve OpenRC files","shortMessageHtmlLink":"Improve OpenRC files"}},{"before":"0754ed2d62c6d58ac83fe85f12f34c86320bb7cb","after":"90fd7ac0e3a97267b9c4d6503835855213369973","ref":"refs/heads/main","pushedAt":"2024-02-20T04:31:11.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"test: Retry longer in test_status.py integration test (#4910)\n\nSaw \"cat: /before-local.start-nostatusjson: No such file or directory\"\r\nfailures. After this change, I no longer see these failures.","shortMessageHtmlLink":"test: Retry longer in test_status.py integration test (canonical#4910)"}},{"before":null,"after":"163c53479d585c3f31f16cfae66c034d41eb742a","ref":"refs/heads/rename-openrc-files-directory","pushedAt":"2024-02-19T01:56:19.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Rename sysvinit/gentoo directory to sysvinit/openrc as the files in\nthere are OpenRC files not specific to Gentoo.","shortMessageHtmlLink":"Rename sysvinit/gentoo directory to sysvinit/openrc as the files in"}},{"before":"a4140119975d81e29e29d77ca5a695be9230431e","after":"0754ed2d62c6d58ac83fe85f12f34c86320bb7cb","ref":"refs/heads/main","pushedAt":"2024-02-18T20:17:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"test: fix verify_clean_log (#4903)\n\nverify_clean_log assumed shadowed warning messages to be contained in a\r\nsingle line entry with a `[WARNING]`, but warnings can be multiline as:\r\n\r\n```\r\n2024-02-16 15:01:49,354 - activators.py[WARNING]: Running ['netplan', 'apply'] resulted in stderr output: Cannot call Open vSwitch: ovsdb-server.service is not running.\r\nFailed to connect system bus: No such file or directory\r\nFalling back to a hard restart of systemd-networkd.service\r\n```\r\n\r\nwrongly asserting the number of expected_warnings.\r\n\r\nMake this check more reliable by asserting that the number of lines\r\ncontaining `WARNINGS` is less or equal than the number of appearances of\r\nthe shadowed warning messages.","shortMessageHtmlLink":"test: fix verify_clean_log (canonical#4903)"}},{"before":"4e87db2be308e6cb0d61f7789b4630810ae1ca35","after":"a4140119975d81e29e29d77ca5a695be9230431e","ref":"refs/heads/main","pushedAt":"2024-02-16T18:27:11.000Z","pushType":"push","commitsCount":22,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"test: limit test_no_hotplug_triggered_by_docker to stable releases\n\ndocker repo does not contain pkgs for devel ubuntu series.","shortMessageHtmlLink":"test: limit test_no_hotplug_triggered_by_docker to stable releases"}},{"before":"4fb7e796cee3dd0438711fc0ae8484755a0dddb7","after":"b1d3687e61a4704f856c00505561576cda5545a7","ref":"refs/heads/alpine-growpart-dev-mapper-fix","pushedAt":"2024-02-16T14:59:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cc_growpart.py: fix handling of /dev/mapper devices for Alpine\n\nUnlike the majority of other Linux distros /dev/mapper entries are NOT\nsymlinks to /dev/dm-X block devices but rather are actual block devices\nthemselves. This is a side-effect of Alpine's use of mdev, rather than\nudev, in its initramfs.\n\nTherefore this change works out the corresponding /dev/dm-X for any\n/dev/mapper/XYZ device on Alpine.","shortMessageHtmlLink":"cc_growpart.py: fix handling of /dev/mapper devices for Alpine"}},{"before":"cb228e150ba64cbb2ebcb45d0de985a71387f367","after":"7eba3edde06e3fa0023cce66dd6fd1bbb9e84ef3","ref":"refs/heads/hotplug-posix-sh-and-openrc-scripts","pushedAt":"2024-02-14T06:53:53.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"blackboxsw","name":"Chad Smith","path":"/blackboxsw","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14128326?s=80&v=4"},"commit":{"message":"Modify hook-hotplug to be POSIX shell, add OpenRC init script\n\nChange hoot-hotplug from being Bash-specific to POSIX shell.\n\nAdd OpenRC init script for starting hotplug \"daemon\".\n\nAdd hotplug \"daemon\" that corresponds to cloud-init's\ncloud-init-hotplugd.service/cloud-init-hotplugd.socket functionality.","shortMessageHtmlLink":"Modify hook-hotplug to be POSIX shell, add OpenRC init script"}},{"before":null,"after":"4fb7e796cee3dd0438711fc0ae8484755a0dddb7","ref":"refs/heads/alpine-growpart-dev-mapper-fix","pushedAt":"2024-02-13T20:56:01.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"cc_growpart.py: fix handling of /dev/mapper devices for Alpine\n\nUnlike the majority of other Linux distros /dev/mapper entries are NOT\nsymlinks to /dev/dm-X block devices but rather are actual block devices\nthemselves. This is a side-effect of Alpine's use of mdev, rather than\nudev, in its initramfs.\n\nTherefore this change works out the corresponding /dev/dm-X for any\n/dev/mapper/XYZ device on Alpine.","shortMessageHtmlLink":"cc_growpart.py: fix handling of /dev/mapper devices for Alpine"}},{"before":"4940351013f5c60149cb8cfd2f3c1debcb937122","after":"4e87db2be308e6cb0d61f7789b4630810ae1ca35","ref":"refs/heads/main","pushedAt":"2024-02-13T17:14:16.000Z","pushType":"push","commitsCount":72,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"test: fix test_cli.test_valid_userdata\n\ncloud-init status should not fail on valid userdata.","shortMessageHtmlLink":"test: fix test_cli.test_valid_userdata"}},{"before":"63c0c7b54acc1d2596e31ae98b2b31e882fedf15","after":"cb228e150ba64cbb2ebcb45d0de985a71387f367","ref":"refs/heads/hotplug-posix-sh-and-openrc-scripts","pushedAt":"2024-02-08T18:00:03.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Modify hook-hotplug to be POSIX shell, add OpenRC init script\n\nChange hoot-hotplug from being Bash-specific to POSIX shell.\n\nAdd OpenRC init script for starting hotplug \"daemon\".\n\nAdd hotplug \"daemon\" that corresponds to cloud-init's\ncloud-init-hotplugd.service/cloud-init-hotplugd.socket functionality.","shortMessageHtmlLink":"Modify hook-hotplug to be POSIX shell, add OpenRC init script"}},{"before":"55861c2a54e8bf5689dcbe8554696eee37fe7f3c","after":"63c0c7b54acc1d2596e31ae98b2b31e882fedf15","ref":"refs/heads/hotplug-posix-sh-and-openrc-scripts","pushedAt":"2024-02-07T02:28:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dermotbradley","name":null,"path":"/dermotbradley","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2300518?s=80&v=4"},"commit":{"message":"Modify hook-hotplug to be POSIX shell, add OpenRC init script\n\nChange hoot-hotplug from being Bash-specific to POSIX shell.\n\nAdd OpenRC init script for starting hotplug \"daemon\".\n\nAdd hotplug \"daemon\" that corresponds to cloud-init's\ncloud-init-hotplugd.service/cloud-init-hotplugd.socket functionality.","shortMessageHtmlLink":"Modify hook-hotplug to be POSIX shell, add OpenRC init script"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEcQoT4QA","startCursor":null,"endCursor":null}},"title":"Activity · dermotbradley/cloud-init"}