克隆并执行Ansible playbook和role,来自Rundeck完成
我在Rundeck上执行了以下操作:克隆playbook → 从galaxy下载角色 → 执行Ansible。由于有些困难,所以做了备忘录。
环境
我用Mac上的Vagrant建立了一个CentOS7。我编写了一个合适的Vagrantfile来创建两个节点。在node01安装了Rundeck和Ansible,并将Playbook流向node02。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "minimal/centos7"
config.vm.define "node01" do |centos|
centos.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2222
centos.vm.network "private_network", ip: "192.168.33.101"
config.vm.provision "shell", run: "always", inline: "systemctl restart network.service"
centos.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
end
config.vm.define "node02" do |centos|
centos.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2223
centos.vm.network "private_network", ip: "192.168.33.102"
config.vm.provision "shell", run: "always", inline: "systemctl restart network.service"
end
end
如果私有IP出现异常情况,应进行修复。
Vagrant的CentOS7的IP将变为192.168.56.xxx。
安装Rundeck和Ansible。
按照官方指南进行安装。
-
- Rundeck
- Ansible
在启动之前,请将IP地址写入/etc/rundeck/rundeck-config.properties文件。确认在浏览器中是否可以查看。
#loglevel.default is the default log level for jobs: ERROR,WARN,INFO,VERBOSE,DEBUG
loglevel.default=INFO
rdeck.base=/var/lib/rundeck
#rss.enabled if set to true enables RSS feeds that are public (non-authenticated)
rss.enabled=false
# change hostname here
grails.serverURL=http://192.168.33.101:4440
dataSource.dbCreate = update
dataSource.url = jdbc:h2:file:/var/lib/rundeck/data/rundeckdb;MVCC=true
在ansible.cfg中提前做好以下配置会更好。因为有时候事先进行ssh连接也会出问题的情况下…
避免Ansible的SSH连接错误的设置
Rundeck-ansible-plugin升级
插件已过时,并且未安装下一个将要使用的Ansible Playbook Inline,因此需要安装新的插件。请前往 https://github.com/Batix/rundeck-ansible-plugin 进行安装。
从Release中使用wget下载jar文件,并将其放置在/var/lib/rundeck/libext目录下。可以选择删除旧文件,或者将其扩展名更改为合适的。
准备仓库
这样做,创建一个playbook的存储库和一个role的存储库。在playbook的存储库中准备一个requirements.yml文件,以便能够获取role。
-
- https://github.com/tinoji/rundeck-ansible-sample-playbook
- https://github.com/tinoji/rundeck-ansible-sample-role
克隆playbook并获取角色
可以写一个脚本来克隆并拉取已存在的仓库,但是为了方便,我们决定使用Ansible Playbook Inline。git模块会很好地帮助我们完成这个任务。
以下是内容,在命令行中使用git clone和ansible-galaxy。
注意,如果不使用-f(–force)选项,ansible-galaxy无法反映git中的角色更新。
请适时创建目录。如果按照以下方式进行:需要创建目录/home/rundeck/ansible/并将其所有者设置为rundeck:rundeck即可。(如果创建在/home/vagrant/等地,则会出现错误!找不到playbook: /home/vagrant/ansible/rundeck-ansible-sample-playbook/site.yml。这里有些奇怪。可能是要求rundeck用户具有权限的设计要求。)
- hosts: localhost
tasks:
- git:
repo: "https://github.com/tinoji/rundeck-ansible-sample-playbook"
dest: "/home/rundeck/ansible/rundeck-ansible-sample-playbook"
become: yes
- name: install ansible role by galaxy
shell: /bin/bash -lc "ansible-galaxy install -f -p roles/ -r requirements.yml"
args:
chdir: /home/rundeck/ansible/rundeck-ansible-sample-playbook
become: yes
运行Ansible
点击”Add a Step”按钮,选择Ansible playbook。在”inline”中指定克隆目录的playbook。
在”Extra Ansible arguments”中,添加如下选项,包括inventory文件选项和limit选项。
不明确指定limit选项会导致错误?类似于(ERROR! Specified –limit does not match any hosts)。
-i /home/rundeck/ansible/rundeck-ansible-sample-playbook/hosts --limit=all
这个应该可以在Run中工作。以下是日志记录。
/usr/lib64/python2.7/getpass.py:83: GetPassWarning: Can not control echo on the terminal.
passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
SSH password:
Warning: Password input may be echoed.
SUDO password[defaults to SSH password]:
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [git] *********************************************************************
ok: [localhost]
TASK [install ansible role by galaxy] ******************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0
/usr/lib64/python2.7/getpass.py:83: GetPassWarning: Can not control echo on the terminal.
passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
SSH password:
Warning: Password input may be echoed.
SUDO password[defaults to SSH password]:
PLAY [servers] *****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.33.102]
TASK [rundeck-ansible-sample-role : yum install test] **************************
ok: [192.168.33.102]
PLAY RECAP *********************************************************************
192.168.33.102 : ok=2 changed=0 unreachable=0 failed=0
使用任意的ansible.cfg的方法
默认情况下将使用/tmp/rundeck/ansible.cfg。
https://github.com/Batix/rundeck-ansible-plugin/issues/119
目前的插件还没有修改的功能。
如果改變環境變量並做得很好,就可以這樣設置。
https://github.com/Batix/rundeck-ansible-plugin/issues/83
如果通過選項這樣設置,就可以了。
总结
现在只需要在Rundeck的WebUI中进行一些设置,就可以直接运行存储在Github上的Ansible了。(可能还有更好的方法)
起初使用Rundeck的Ansible插件有些困难和麻烦,但是总体来说还是比较实用的。