Rundeck复用Ansible AWS动态Inventory遇问题求助
环境背景
已在AWS管理账号的同一EC2服务器上配置Rundeck与Ansible,使用以下AWS EC2动态Inventory从多个AWS账号拉取资产:
plugin: aws_ec2 regions: - us-east-1 - us-west-2 assume_role_arns: - 'arn:aws:iam::prod1accountnum:role/ansible' - 'arn:aws:iam::prod2accountnum:role/ansible' hostnames: - private-ip-address keyed_groups: - key: tags.Name separator: '' compose: ansible_connection: '''ssh''' ansible_port: 22 ansible_shell_type: '''cmd''' ansible_ssh_common_args: '''-o StrictHostKeyChecking=no''' ansible_user: '''Administrator''' ansible_ssh_private_key_file: |- { 'vpc-0123xxxx': '~/.ssh/prod1.pem', 'vpc-0456xxx': '~/.ssh/prod2.pem' }[vpc_id]
本地测试正常,可获取资产并执行命令:
ansible tag_server1 -i ec2.yaml -m win_ping
ansible-playbook get-logs.yaml -i ec2.yaml --extra-vars "path=/temp/"
但Rundeck中出现两种问题:
问题1:通过Ansible插件/File方式导入Inventory无法获取资产
排查方向
权限与路径验证
确认Rundeck运行用户(通常为rundeck)对/etc/ansible/hosts.yml文件有读权限,同时对~/.ssh/下的pem文件也有读权限。可执行sudo -u rundeck cat /etc/ansible/hosts.yml验证。
替换Inventory中ansible_ssh_private_key_file的~为绝对路径(比如/home/rundeck/.ssh/prod1.pem),避免Rundeck用户家目录与测试用户不一致导致路径失效。Ansible插件配置修正
检查项目配置中resources.source.1.config.ansible-inventory指向的文件是否与本地测试的Inventory完全一致;关闭ansible-disable-limit(设为false),该选项可能干扰Inventory分组解析;确认Rundeck的Ansible插件版本与本地Ansible版本兼容,避免版本差异导致解析失败。AWS凭证同步
本地测试用的AWS凭证(~/.aws/credentials)需复制到Rundeck用户的家目录(/var/lib/rundeck/.aws/),或通过IAM角色给Rundeck实例赋予AssumeRole的权限,确保Rundeck能正常调用AWS API拉取资产。
问题2:使用Rundeck EC2插件导入节点后,执行作业提示无匹配主机
错误信息
[WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: Could not match supplied host pattern, ignoring:all [WARNING]: provided hosts list is empty, only localhost is available [WARNING]: Could not match supplied host pattern, ignoring:prod1-server [WARNING]: No hosts matched, nothing to do
排查方向
节点属性映射调整
在EC2插件配置中,将Hostname来源设置为tags.Name或private-ip-address,确保节点名与Ansible Inventory中的标识一致;添加节点属性映射,将ansible_host对应privateIpAddress,保证Ansible能识别目标主机。作业执行配置检查
确认作业的Node Executor设置为com.batix.rundeck.plugins.AnsibleNodeExecutor,File Copier设置为sshj-scp(需继承项目默认配置),避免使用默认SSH执行器绕过Ansible Inventory;检查作业的Node Filter,确认筛选出的节点存在tags.Name=prod1-server属性(可在Rundeck节点页面查看详情)。Inventory生成属性补充
项目配置中project.ansible-generate-inventory=true会自动生成临时Inventory,需在EC2插件配置中添加Ansible必需的属性映射:ansible_connection设为sshansible_user设为Administratoransible_ssh_private_key_file根据VPC ID映射对应PEM文件(可通过Rundeck节点属性模板实现)
额外验证步骤
- 切换到
rundeck用户执行ansible tag_server1 -i /etc/ansible/hosts.yml -m win_ping,确认命令能正常执行,排除环境差异问题。 - 查看Rundeck日志(
/var/log/rundeck/rundeck.log),搜索AnsibleResourceModelSource或EC2NodeSource相关错误,定位具体失败原因。
内容的提问来源于stack exchange,提问作者m12345

