ansible常用套路(一)

一、SSH互信

1 配置/etc/ansible/hosts 文件
[zabbix_agent]
172.26.4.203
172.26.4.204
172.26.4.205
[zabbix_agent:vars]
ansible_ssh_user=root
ansible_ssh_pass=root1234
ansible_ssh_port=22

  

2 在ansible-server端生成秘钥对
ssh-keygen -t rsa

  

3 创建playbook
1) 第一种方式: 
# 新增本地(ansible-server)公钥内容到远端客户端.ssh目录中authorized_keys文件,没有则创建authorized_keys文件
# state: 1) present 添加,2) absent 删除
---
- hosts: zabbix_agent
  gather_facts: false

  tasks:
    - name: deliver authorized_keys
      authorized_key:
        user: root
        key: "{{ lookup('file', '/root/.ssh/id_rsa.pub) }}"

# 解释:
# 添加或移除authorized keys为特定用户:比如上面的是添加读取本地的id_rsa.pub文件到远端主机的authorized_keys文件中
# 把ansible-server中的/root/.ssh/id_ras.pub中的文件内容,拷贝到其他主机中的/root/.ssh/authorized_keys 文件中,实现SSH互信

  

第二种书写方式:

- hosts: zabbix_agent
  remote_user: root

  tasks:
  - name: mkdir /root/.ssh
    command: mkdir -p /root/.ssh

  - name: copy ssh key
    copy: src=/root/.ssh/id_rsa.pub dest=/root/.ssh owner=root group=root mode=0644

 

这个playbook是经过测试的

# 新增本地(ansible-server)公钥内容到远端客户端.ssh目录中authorized_keys文件,没有则创建authorized_keys文件
# state: 1) present 添加,2) absent 删除
---
- hosts: zabbix_agent
  gather_facts: false
  remote_user: root

  tasks:
  - name: deliver authorized_keys
    authorized_key:
      user: root
      key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"

 

4 运行
cd /etc/ansible/playbook/ssh_trust
ansible-playbook rsync_key.yml 

  

5 可能出现的错误和解决方法

这里只会罗列出,我遇到的错误以及解决方法,如果你和我一样遇到了这个错误,那么恭喜你。咱俩还挺有缘

[root@ansible-server ssh_trust]# ansible-playbook rsync_key.yml 

PLAY [zabbix_agent] ************************************************************************************************************************************************

TASK [deliver authorized_keys] *************************************************************************************************************************************
fatal: [172.26.4.204]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."}
fatal: [172.26.4.203]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."}
fatal: [172.26.4.205]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."}
	to retry, use: --limit @/etc/ansible/playbook/ssh_trust/rsync_key.retry

PLAY RECAP *********************************************************************************************************************************************************
172.26.4.203               : ok=0    changed=0    unreachable=0    failed=1   
172.26.4.204               : ok=0    changed=0    unreachable=0    failed=1   
172.26.4.205               : ok=0    changed=0    unreachable=0    failed=1 


2)原因和解决办法:
ssh第一次连接的时候一般会提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中。而本机的~/.ssh/known_hosts文件中并有fingerprint key串
解决方法:在ansible.cfg文件中更改下面的参数:
#host_key_checking = False 将#号去掉即可

  

 

二 批量安装配置zabbix-agent

上面的很简单是不是,下面咱们来票大的。这里需要说明的是,使用playbook编写文件时,尽量使用ansible提供的模块,尽量避免使用shell这个模块。因为ansible具有【幂等性】这个特点,具体什么是幂等性,请自行谷歌吧。这里只是简单的说一下。举个栗子,假如我们创建一个文件,第一次没有,我们运行可以创建成功,如果第二次运行一般会报错,说文件已存在。如果使用ansible提供的模块,因为具备【幂等性】特点,则不会报错。他应该有检查机制,存在则不创建了。好了,下面开始咱们看一下使用ansible的最常用的套路吧

如果各位看官对playbook有兴趣可以移步:https://galaxy.ansible.com/

下面开始我们的实战了,激动不。

1 定义hosts文件

这个hosts文件位于/etc/ansible/hosts 如果是yum安装的,一般配置文件都位于这里,hosts文件中定义的组,主机等等。都是我们操作的对象

/etc/ansible/hosts

[zabbix_agent]
172.26.4.203
172.26.4.204
172.26.4.205
[zabbix_agent:vars]
ansible_ssh_user=root
ansible_ssh_pass=root1234
ansible_ssh_port=22

  

2 查看我们的目录结构

下面的目录结构是不是觉得很多,是很多,但是每个都是很有用的。

给你一个创建的shell吧,下面创建的目录是在 /etc/ansible 目录中创建的

#!/bin/bash

mkdir zabbix_centos7
mkdir zabbix_centos7/zabbix_agent
mkdir zabbix_centos7/zabbix_agent/roles
mkdir zabbix_centos7/zabbix_agent/roles
mkdir zabbix_centos7/zabbix_agent/roles/{common,install,uninstall,configure}/{handlers,files,meta,tasks,templates,vars} -p

  

下面是展开的样子

[root@ansible-server ansible]# tree zabbix_centos7
zabbix_centos7
├── init.sh
├── readme.md
└── zabbix_agent
    ├── roles
    │   ├── common
    │   │   ├── files
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   ├── tasks
    │   │   │   └── main.yml
    │   │   ├── templates
    │   │   └── vars
    │   │       └── main.yml
    │   ├── configure
    │   │   ├── files
    │   │   │   └── zabbix_scripts
    │   │   │       ├── discovery_tcp_port.sh
    │   │   │       └── tcp_connect_status.sh
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   ├── tasks
    │   │   │   ├── 01-sync-clock.yml
    │   │   │   ├── 02-allow-sudo.yml
    │   │   │   ├── 03-sync-conf_files.yml
    │   │   │   └── main.yml
    │   │   ├── templates
    │   │   │   ├── Userparameter_script.conf
    │   │   │   └── zabbix_agentd.conf
    │   │   └── vars
    │   │       └── main.yml
    │   ├── install
    │   │   ├── files
    │   │   │   └── ansible-zabbix-4.0.0.tar.gz
    │   │   ├── handlers
    │   │   ├── meta
    │   │   ├── tasks
    │   │   │   ├── 01-create-user.yml
    │   │   │   ├── 02-copy-code.yml
    │   │   │   ├── 03-start-zabbix.yml
    │   │   │   ├── 04-add-iptables.yml
    │   │   │   └── main.yml
    │   │   ├── templates
    │   │   │   ├── zabbix_agentd.conf
    │   │   │   └── zabbix-agent.service
    │   │   └── vars
    │   │       └── main.yml
    │   └── uninstall
    │       ├── files
    │       ├── handlers
    │       ├── meta
    │       ├── tasks
    │       │   ├── main.yml
    │       │   └── uninstall_zabbix.yml
    │       ├── templates
    │       └── vars
    │           └── main.yml
    ├── zabbix_configure.retry
    ├── zabbix_configure.yml
    ├── zabbix_delete.retry
    ├── zabbix_delete.yml
    ├── zabbix_install.retry
    └── zabbix_install.yml

  

3 安装程序的tasks任务列表
1)定义安装程序入口文件 zabbix_install.yml
[root@ansible /etc/ansible/zabbix_centos7/zabbix_agent ]# vim zabbix_install.yml 
---
- hosts: testhosts
  remote_user: root
  gather_facts: True
  roles:
    - common
    - install

2) 定义安装程序-创建用户任务01-create-user.yml
[root@ansible /etc/ansible/zabbix_rhel/zabbix_agent ]# vim roles/install/tasks/01-create-user.yml 
---
- name: Create zabbix user
  user: name={{ zabbix_user }} state=present create_home=no shell=/sbin/nologin

3) 定义安装程序-拷贝安装文件任务02-copy-code.yml
[root@ansible /etc/ansible/zabbix_rhel/zabbix_agent ]# vim roles/install/tasks/02-copy-code.yml 
---
- name: Create src dir
  file: path=/opt/source state=directory mode=0755

- name: Create install dir
  file: path={{ zabbix_dir }} state=directory mode=0755

- name: Copy zabbix agentd code file to clients
  copy: src=ansible-zabbix-{{ zabbix_version }}.tar.gz dest=/opt/source/ansible-zabbix-{{ zabbix_version }}.tar.gz
        owner=root group=root

- name: Uncompression ansible-zabbix-{{ zabbix_version }}.tar.gz
  shell: tar xf /opt/source/ansible-zabbix-{{ zabbix_version }}.tar.gz -C {{ zabbix_dir }}

- name: Copy zabbix start scripts
  template: src=zabbix-agent.service dest=/usr/lib/systemd/system/zabbix-agent.service owner=root group=root mode=0755

- name: Copy zabbix config file
  template: src=zabbix_agentd.conf dest={{ zabbix_dir }}/etc/zabbix_agentd.conf owner={{ zabbix_user }} group={{ zabbix_user }}
            mode=0644

- name: Modify zabbix basedir permission
  file: path={{ zabbix_dir }} owner={{ zabbix_user }} group={{ zabbix_user }} mode=0755 recurse=yes

- name: Link zabbix-agent.service command
  file: src={{ zabbix_dir }}/sbin/zabbix_agentd dest=/usr/local/sbin/zabbix_agentd state=link

- name: Delete ansible-zabbix-{{ zabbix_version }}.tar.gz source file
  shell: rm -f /opt/source/ansible-zabbix-{{ zabbix_version }}.tar.gz

4) 定义安装程序-启动zabbix_agentd服务任务03-start-zabbix.yml 
[root@ansible /etc/ansible/zabbix_rhel/zabbix_agent ]# vim roles/install/tasks/03-start-zabbix.yml 
---
- name: add permit tmp
  file: path=/tmp owner=root mode=0777 recurse=yes
- name: Start zabbix service
  service: name=zabbix-agent.service state=started enabled=yes

5) 定义安装程序-添加iptable规则04-add-iptables.yml 
---
- name: insert iptables rule for zabbix
  lineinfile: dest=/etc/sysconfig/iptables create=yes state=present regexp="{{ zabbix_agentd_port }}"
              insertafter="^:OUTPUT"
              line="-A INPUT -p tcp --dport {{ zabbix_agentd_port }} -s {{ zabbix_server_ip }} -j ACCEPT"

  notify: stop firewalld

6) 定义安装程序-tasks任务列表的主调用接口文件main.yml
---
- include: 01-create-user.yml
- include: 02-copy-code.yml
- include: 03-start-zabbix.yml
- include: 04-add-iptables.yml

  

总结一下上面的

总结: tasks任务列表说明:
Playbook允许用户将tasks任务细分为多个任务列表,通过一个main任务来调用。
当然你也可以将涉及的所有任务全部写到main.yml文件中。

  

继续...

下面的提供一下git地址吧。自行去看吧。

https://github.com/wanstack/playbook

 

转载于:https://www.cnblogs.com/wanstack/p/9870257.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用ansible时,有一些常用的命令可以帮助您完成自动化运维任务。其中最常用的命令是ansibleansible-playbook。 ansible命令是用来管理和配置远程主机的工具,可以通过ssh协议连接到远程主机并执行命令。您可以使用ansible命令对单个主机或多个主机进行操作,例如执行命令、复制文件、安装软件等。该命令的路径通常是/usr/bin/ansibleansible-playbook命令是用来执行Ansible Playbook的工具。Ansible Playbook是一种以YAML格式编写的自动化任务脚本,可以定义一系列的任务和配置,用来管理和配置远程主机。与ansible命令相比,ansible-playbook更适用于执行复杂的自动化任务。该命令的路径通常是/usr/bin/ansible-playbook。 除了上述两个常用命令之外,还有一些其他有用的命令和模块,例如ansible-doc命令可以用来查看ansible模块的详细文档和示例用法。还有一些常用模块,例如ping模块可以用来检测主机的连通性。 总结起来,ansible常用的命令包括ansibleansible-playbook,可以用来管理和配置远程主机。此外,还有其他有用的命令和模块可以帮助您完成自动化运维任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [自动化运维工具---ansible的12个常用模块介绍](https://blog.csdn.net/weixin_51326240/article/details/115465298)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值