Chef中使用lock选项禁用Data Bag用户报错问题咨询
解决Chef Data Bag用户lock动作无效的问题
问题原因
你遇到的报错是因为你的Cookbook代码限制了user资源的可选动作范围,只允许nothing, create, remove, modify, manage这几个选项,并没有包含lock动作——这和官方文档里user资源本身支持lock动作是两回事。
解决办法
方法1:修改Cookbook,允许lock动作
找到Cookbook中处理user资源的代码,通常会有动作校验逻辑,把lock和unlock加入到允许的动作列表中:
原代码示例(带动作校验):
valid_actions = [:nothing, :create, :remove, :modify, :manage] unless valid_actions.include?(user_action.to_sym) raise Chef::Exceptions::ValidationFailed, "Option action must be equal to one of: #{valid_actions.join(', ')}!" end user user_data['username'] do action user_action.to_sym # 其他属性配置 end
修改后:
valid_actions = [:nothing, :create, :remove, :modify, :manage, :lock, :unlock] unless valid_actions.include?(user_action.to_sym) raise Chef::Exceptions::ValidationFailed, "Option action must be equal to one of: #{valid_actions.join(', ')}!" end user user_data['username'] do action user_action.to_sym # 其他属性配置 end
同时确保你的Chef Client版本支持lock动作(Chef 14及以上版本已支持,可通过chef-client --version查看当前版本)。
方法2:改用locked属性(更推荐)
不要在Data Bag里设置action为lock,而是新增一个locked布尔字段,通过user资源的locked属性控制锁定状态,这种方式更符合Chef资源的设计逻辑:
- 修改Data Bag Item:
{ "id": "user1", "username": "user1", "password": "XXXXXXXXXXXXXXXXXXXX", "uid": "833", "gid": "user1", "home": "/home/user1", "shell": "/bin/bash", "comment": "user1", "locked": true, "ssh_auth_key": "false" }
- 更新Cookbook中的user资源代码:
user user_data['username'] do username user_data['username'] password user_data['password'] uid user_data['uid'] gid user_data['gid'] home user_data['home'] shell user_data['shell'] comment user_data['comment'] action :manage locked user_data['locked'] end
当locked设为true时,Chef会自动执行用户锁定操作;设为false则解锁。
内容的提问来源于stack exchange,提问作者p.t3
相关产品推荐
相关产品推荐

