ansible初识
Ansible是一种自动化工具,用于配置管理、应用程序部署和任务自动化。它基于Python语言开发,使用SSH协议进行通信,并且不需要在被管理的主机上安装任何客户端。Ansible使用简单的YAML语言来描述任务和配置,使得操作简单、易于理解。
Ansible的主要特点包括:
-
简单易用:Ansible使用YAML语言来定义任务和配置,具有简单、直观的语法,使得操作起来非常容易。同时,Ansible提供了丰富的模块和插件,可以方便地完成各种任务。
-
基于SSH协议:Ansible使用SSH协议进行通信,不需要在被管理的主机上安装任何客户端。这意味着可以更好地保护系统安全,同时也降低了管理工作的复杂度。
-
基于代理:Ansible可以通过代理服务器来管理无法直接访问的主机,如跳板机、防火墙后的主机等。这样可以实现对整个网络的统一管理,提高了灵活性和可扩展性。
-
基于模块化:Ansible提供了丰富的模块和插件,可以用于完成各种任务,如安装软件、配置系统、部署应用程序等。同时,Ansible允许用户编写自定义模块和插件,满足特定需求。
-
可扩展性:Ansible支持多主机和多组主机管理,可以轻松应对大规模环境。同时,Ansible还支持分布式部署和高可用性配置,提供了高效的管理解决方案。
总之,Ansible是一种功能强大、易于使用的自动化工具,适用于各种场景,可以简化管理工作,提高效率。无论是小规模还是大规模环境,Ansible都可以帮助您轻松管理和部署系统。
ansible命令
以下是一些常见的ansible命令:
-
ansible <host-pattern> -m <module>
:运行ansible模块在指定的主机上。 -
ansible-playbook <playbook.yml>
:运行ansible playbook。 -
ansible <host-pattern> --list-hosts
:列出匹配主机模式的主机。 -
ansible <host-pattern> --inventory-file=<inventory-file>
:指定使用的清单文件。 -
ansible <host-pattern> -a <command>
:在远程主机上运行命令。 -
ansible <host-pattern> -e <extra-vars>
:传递额外的变量给playbook或命令。 -
ansible <host-pattern> --limit=<limit>
:限制适用的主机数量。 -
ansible <host-pattern> --tags=<tags>
:只运行指定的标签。 -
ansible <host-pattern> --skip-tags=<tags>
:跳过指定的标签。 -
ansible <host-pattern> --start-at-task=<task-name>
:从指定的任务开始运行。 -
ansible <host-pattern> --check
:进行干运行,检查可能对主机造成的变化。 -
ansible <host-pattern> --diff
:在执行任务之前显示文件的差异。 -
ansible <host-pattern> --become
:使用sudo或类似特权升级。 -
ansible <host-pattern> --become-user=<user>
:以指定的用户身份运行命令。 -
ansible-doc <module>
:查看模块的文档。
ansible 模块
Ansible是一个自动化的IT操作工具,它可以通过使用模块来实现各种不同的任务。以下是一些常用的Ansible模块:
- command模块:用于在远程主机上执行命令。
- copy模块:用于在远程主机上复制文件和目录。
- file模块:用于在远程主机上管理文件和目录的属性。
- template模块:用于在远程主机上使用模板生成文件。
- apt/yum模块:用于在远程主机上执行软件包管理器(APT或Yum)的操作。
- service模块:用于在远程主机上管理系统服务的状态。
- user模块:用于在远程主机上管理用户和用户组。
- shell模块:用于在远程主机上执行Shell脚本。
- git模块:用于在远程主机上执行Git操作。
- docker_compose模块:用于在远程主机上管理Docker容器的状态和操作。
以上只是一些常见的Ansible模块,Ansible还提供了许多其他模块来满足不同的需求。您可以通过查看Ansible的官方文档来了解更多关于模块的信息。Ansible是一个自动化的IT操作工具,它可以通过使用模块来实现各种不同的任务。以下是一些常用的Ansible模块:
- command模块:用于在远程主机上执行命令。
- copy模块:用于在远程主机上复制文件和目录。
- file模块:用于在远程主机上管理文件和目录的属性。
- template模块:用于在远程主机上使用模板生成文件。
- apt/yum模块:用于在远程主机上执行软件包管理器(APT或Yum)的操作。
- service模块:用于在远程主机上管理系统服务的状态。
- user模块:用于在远程主机上管理用户和用户组。
- shell模块:用于在远程主机上执行Shell脚本。
- git模块:用于在远程主机上执行Git操作。
- docker_compose模块:用于在远程主机上管理Docker容器的状态和操作。
Ansible的synchronize
模块
Ansible的synchronize
模块是用于在远程主机之间进行数据同步的模块。它使用rsync算法来高效地复制文件和目录。
synchronize
模块的使用方法如下:
yaml
- name: Synchronize files
synchronize:
src: /path/to/source
dest: /path/to/destination
mode: push # 可选。默认为`push`。指定同步方向为推送(push)或拉取(pull)。
delete: yes # 可选。默认为`no`。指定是否删除目标目录中不存在于源目录中的文件。
recursive: yes # 可选。默认为`yes`。指定是否递归复制目录。
archive: yes # 可选。默认为`yes`。指定是否启用归档模式(copy所有文件属性)。
compress: yes # 可选。默认为`no`。指定是否启用压缩。
详细解释如下:
src
: 源文件或目录的路径。dest
: 目标文件或目录的路径。mode
: 同步方向。可选值为push
(推送)或pull
(拉取)。默认为push
,即将源文件复制到目标主机。delete
: 指定是否删除目标目录中不存在于源目录中的文件。可选值为yes
或no
。默认为no
,即不删除。recursive
: 指定是否递归复制目录。可选值为yes
或no
。默认为yes
,即递归复制。archive
: 指定是否启用归档模式,即复制文件时保留所有文件属性。可选值为yes
或no
。默认为yes
,即启用。compress
: 指定是否启用压缩。可选值为yes
或no
。默认为no
,即不启用。
使用synchronize
模块进行文件同步的示例:
yaml
- name: Synchronize files
synchronize:
src: /path/to/source
dest: /path/to/destination
mode: push
delete: yes
recursive: yes
archive: yes
compress: yes
上面的任务将源目录/path/to/source
中的文件,同步到目标主机的/path/to/destination
目录中,同时删除目标目录中不存在于源目录中的文件。复制过程中会保留所有文件属性,并启用压缩以提高传输效率。
"fetch"模块从目标主机上获取文件
在Ansible中,可以使用"fetch"模块从目标主机上获取文件。fetch模块将目标主机上的文件复制到控制主机上。
以下是fetch模块的用法示例:
yaml
- name: Fetch a file from remote hosts
hosts: your_hosts
tasks:
- name: Fetch a file
fetch:
src: /path/to/remote/file
dest: /path/to/local/directory
在上面的示例中,我们指定了要从远程主机获取的文件的路径src
,以及要将文件复制到的本地目录dest
。
请注意,fetch模块在每个目标主机上执行,因此它必须在一个包含目标主机的playbook中使用。
1、4台虚拟机,1台作为主控端,3台被控端,虚拟机1使用ansible对被控端服务器进行ping测试
192.168.99.130
bash
yum install ansible
编辑/etc/hosts
conf
192.168.99.132 h1
192.168.99.144 h2
192.168.99.118 h3
/etc/ansible/hosts 添加
bash
h1
h2
h3
bash
ssh-keygen -t rsa
ssh-copy-id root@192.168.99.132
ssh-copy-id root@192.168.99.144
ssh-copy-id root@192.168.99.118
bash
ansible h1,h2,h3 -m ping
2、将2、3分为一组A,4单独分为一组B进行ping测试
puppet
[A]
h1
h2
[B]
h3
bash
ansible A,B -m ping
3、有一个大组包含了组A和B的所有主机,进行ping测试
bash
[A]
h1
h2
[B]
h3
[gr1:children]
A
B
bash
ansible gr1 -m ping
4、在234三台机的tmp目录下创建一个文件
bash
ansible gr1 -m command -a 'touch /tmp/test'
5、修改所有主机的yum源为aliyun源
bash
ansible gr1 -m yum_repository -a 'name=base baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/ description=ali_repo gpgcheck=no enabled=yes state=present'
ansible gr1 -m yum_repository -a 'name=epel baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=yes gpgcheck=no gpgcakey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 description=epel_repo state=present file=AlicloudEpel'
6、远程安装httpd、nginx、ntpdate
bash
ansible gr1 -m yum -a 'name=httpd,nginx,ntpdate'