【Rundeck】我以为通过Rundeck执行Ansible,进展会比预期的更顺利
首先
因为被一个微小的事情暗中揶揄,结果无法抗拒。
安比尔
nginx的Ansible
我制作了用Ansible配置的nginx,前几天进行了调优。
虽然我并没有记载下来,但目前我正在使用awscli以非常杂乱的方式作为启动实例的作业作为一个发射器。
我想要使它变得更加丰富,但由于没有确定方向,主机管理的方法正在疯狂地迷失。
因此,我选择了以不常见的[IP地址]来指定主机并执行Playbook。
– 默认选项卡: 节点
描述: 创建EC2实例。
执行启用: 是
ID: 5ff10465-99ec-4e76-9458-72925c447eef
日志级别: 信息
名称: 创建实例
节点筛选可编辑: 否
节点筛选器:
调度:
排除优先级: 是
一旦失败就停止: 否
排序顺序: 升序
空节点筛选时成功: 否
线程数量: ‘1’
筛选器: ‘name: Rundeck’
默认选择的节点: 是
选项:
– 描述: 请输入服务器名称。
名称: name
必填: 是
– 描述: 请输入AMI镜像的ID。(默认:CentOS8)
名称: AMIID
必填: 是
值: ami-00f65b9dfc6773444
– 描述: 请输入数量。(默认1台)
标签: 数量
名称: count
必填: 是
值: ‘1’
– 描述: 请输入实例类型。(默认:t3.micro)
标签: 实例类型
名称: instancetype
必填: 是
值: t3.micro
– 描述: 请输入要使用的密钥对名称。(默认:aws-1)
名称: keyname
必填: 是
值: aws-1
– 描述: 请输入安全组。(默认:sg-03179fefab86413aa)
名称: securitygroup
必填: 是
值: sg-03179fefab86413aa
– 描述: 请输入子网ID。(默认:subnet-095c2be997f1ffc36)
名称: subnetid
必填: 是
值: subnet-095c2be997f1ffc36
插件:
ExecutionLifecycle: null
计划启用: 是
序列:
命令:
– 执行: ‘aws ec2 run-instances –image-id ${option.AMIID} –count ${option.count}
–instance-type ${option.instancetype} –key-name ${option.keyname} –security-group-ids
${option.securitygroup} –subnet-id ${option.subnetid} –tag-specifications
”ResourceType=instance,Tags=[{Key=Name,Value=${option.name}}]”’
一旦失败就停止: 否
策略: 节点优先
UUID: 5ff10465-99ec-4e76-9458-72925c447eef
当然是可以执行的
$ ansible-playbook -i 192.168.0.98, -u centos site.yml
[DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. Current version: 3.6.8
(default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]. This feature will be removed from ansible-core in version 2.12.
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [all] ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.98]
TASK [nginx : modify ulimit open files] ******************************************************************************************************
changed: [192.168.0.98]
TASK [nginx : modify sysctl net.ipv4.ip_local_port_range] ************************************************************************************
ok: [192.168.0.98]
TASK [nginx : modify sysctl fs.file-max] *****************************************************************************************************
ok: [192.168.0.98]
TASK [nginx : install nginx repository for centos6] ******************************************************************************************
skipping: [192.168.0.98]
TASK [nginx : install nginx repository for centos7] ******************************************************************************************
skipping: [192.168.0.98]
TASK [nginx : install nginx packages] ********************************************************************************************************
ok: [192.168.0.98]
TASK [nginx : copy nginx.conf] ***************************************************************************************************************
changed: [192.168.0.98]
TASK [nginx : copy server.crt] ***************************************************************************************************************
changed: [192.168.0.98]
TASK [nginx : copy server.key] ***************************************************************************************************************
changed: [192.168.0.98]
TASK [nginx : enable and start nginx related service] ****************************************************************************************
changed: [192.168.0.98]
PLAY RECAP ***********************************************************************************************************************************
192.168.0.98 : ok=9 changed=5 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
使用Rundeck来执行Ansible
Rundeck 使用 Ansible
那么,让我们尝试在Rundeck上执行这个操作。
假设提前在Rundeck服务器上进行了git克隆。
选择工作流步骤中的Ansible playbook,并将其设置如下。
-
- ansibleやplaybookのパスに関してはそれぞれ適正なものを記載する。
-
- コマンドラインオプションは全部Extra Ansible argumentsに入れる。
- sshのユーザがデフォルトだとrundeckなので使ってるユーザが違う場合は注意。


对于工作流步骤来说,只需在Rundeck上执行Ansible-playbook即可。
由于只查看指定的主机清单文件,因此在Rundeck上不需要节点配置。
(只是作为虚拟指定节点是必要的)
此外,其他的ansible步骤也可以说,因为作业可以设置become,所以不必在playbook中指定是一个优点。
平时虽然我们通常会考虑sudo并编写playbook,但这有时候会有点困难。
在这种情况下,坦率地说,Rundeck只提供了一个UI界面而已,可能会更容易理解。
完成之后

– 默认选项卡:节点
描述:以工作流步骤执行 ansible-playbook 的示例作业。
允许执行:是
ID:f977bc3a-df86-4edc-9061-ec3893b04942
日志级别:INFO
名称:ansible-playboook(工作流步骤)
可编辑的节点过滤器:否
节点过滤器:
调度:
排除优先:是
继续执行:否
排序顺序:升序
空节点过滤器成功:否
线程计数:1
过滤器:’name: Rundeck’
默认选择节点:是
插件:
执行生命周期:空
允许计划:是
顺序:
命令:
– 配置:
脚本:cd Ansible/;git pull
描述:将源代码更新到最新状态。
节点步骤:否
类型:nixy-local-workflow-step
– 配置:
ansible基础目录路径:./Ansible/nginx
ansible变成:false
ansible禁用限制:false
ansible额外参数:-i hosts –diff –limit production
ansible-playbook:site.yml
ansible SSH身份验证类型:私钥
ansible SSH密码选项:option.password
ansible SSH使用代理:false
ansible SSH用户:centos
描述:安装ngnx。
节点步骤:否
类型:com.batix.rundeck.plugins.AnsiblePlaybookWorkflowStep
继续执行:否
策略:节点优先
UUID:f977bc3a-df86-4edc-9061-ec3893b04942

番外編
节点流程步骤 (Nodes Flow Steps)

因此,出场的是Node Step的Ansible Playbook Workflow Node Step。
不过,在此之前,我想分享一下清单文件的内容。
在名为production的组中,只注册了一台名为nginx-test的服务器。
(不想写IP地址,但每次启动时写一个DNS地址似乎因果关系相反)
$ cat Ansible/nginx/hosts
[production]
nginx-test ansible_ssh_host=192.168.0.98
[all:vars]
env=production


总结一下就是
感受到了一股绝对不容许医疗失误的坚定意志。
后记
写得太过认真,会被“用Jenkins就好了”这个诅咒给压垮,所以稍微搞笑了一下。
虽然如此,感觉可以正常地使用Ansible with Rundeck。暂时可以用这种形式来运作。
虽然以为什么都不会轻松,但实际上确实有一些地方变得轻松了,而且将工作放在Rundeck上也有好处。
(比如可以通过Rundeck的一个界面来确认活动和执行结果)
最重要的是,Rundeck的步骤和Ansible可以正常地共存,这可能是最大的好处。
虽然在开头已经提到了,但是说到这种情况的话,“用~~~就好了问题”就会出现。
在Rundeck中,可以在一个界面上进行基础设施的脚本步骤,开发可以使用playbook来区分。与其他部分不冲突。
另外,虽然是基础的地方,但我认为有“实际上大家在敲ansible的命令有所不同问题”。
对于这种问题,通过这样的界面可以强制指定执行命令,实现标准化,这是一个很大的优势。
现在终于可以推进目标了,所以预计会有一段时间没有更新。(虽然这样写了又会更新吧)
有时间的话,想更深入地挖掘其他方面。