Ansible自动化运维1—模块

目录

1.工作原理

 2.安装Ansible

2.1批量发送文件

3.ansbile资产

4.ansbile Ad-Hoc命令

4.1 ansible常见模块

4.2 script模块

4.3copy模块

4.4yum_repository

4.5yum模块

4.6systemd模块

4.7 group,user

4.8file模块

4.9cron 、debug,template模块

4.95 lineinfile,blockinfile模块



1.工作原理

Ansible自动化运维1—模块_第1张图片

 2.安装Ansible

版本:python >=2.6

1.[root@master ~]# yum -y install ansible        ##安装ansible

    [root@master ~]# ansible --version                 ##查看版本
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible  ##执行目录
  python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

2.主机之间设置免密登录(管理节点和被管理节点)

管理节点是192.1681.105 master  |  被管理  107.108.106 server{1,3}

3.检测于其他的节点的联通性   

[root@master ~]# ansible all -i 192.168.1.106,192.168.1.107 -m ping

##一台机器需要ip地址后面写 ,

## -i 指定Ansible的资产

##-m 只当要运行的模块 如ping  copy模块

##-a  给模块指定参数
192.168.1.106 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.1.107 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

 

2.1批量发送文件

[root@master ~]# touch /tmp/a.conf         ##创建a.conf文件

[root@master ~]# ansible all -i 192.168.1.106,192.168.1.107,192.168.1.108 -m copy -a "src=/tmp/a.conf dest=/tmp/a.conf"

192.168.1.108 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/tmp.aconf", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1662560796.62-67606-205183439120486/source", 
    "state": "file", 
    "uid": 0
}
192.168.1.106 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/tmp.aconf", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1662560796.61-67602-200293745768957/source", 
    "state": "file", 
    "uid": 0
}
192.168.1.107 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/tmp.aconf", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1662560796.61-67604-38084435748781/source", 
    "state": "file", 
    "uid": 0
}

***总结一句话***:ansible用模块,让别人做事情

3.ansbile资产

  • 静态资产
  • 动态资产

##默认文件地址是/etc/ansible/hosts

[root@master ~]# vim /etc/ansible/inventory.ini  ##创建一个自定义资产

server1

[server]
192.168.1.[106:108]


[server2]
1.1.1.1
 

[root@master ~]# ansible all -i /etc/ansible/inventory.ini --list-hosts
 hosts (5):
    server1
    1.1.1.1
    192.168.1.106
    192.168.1.107
    192.168.1.108

3.1资产选择器

[root@master ~]# ansible server -i /etc/ansible/inventory.ini --list-hosts
  hosts (3):  ##server为模块
    192.168.1.106     
    192.168.1.107
    192.168.1.108
##hosts主机名不能被解析

可以通过*或者逻辑符号进行匹配

4.ansbile Ad-Hoc命令

修改调用资产选择器

[root@master ~]# vim /etc/ansible/ansible.cfg 

[defaults]

# some basic default values...

#inventory      = /etc/ansible/hosts  ##资产默认地址文件
#library        = /usr/share/my_modules/
 

4.1 ansible常见模块

command & shell 模块

[root@master ~]# ansible server -i /etc/ansible/inventory.ini -a "echo hellp"
192.168.1.106 | CHANGED | rc=0 >>
hellp
server1 | CHANGED | rc=0 >>
hellp
192.168.1.108 | CHANGED | rc=0 >>
hellp
192.168.1.107 | CHANGED | rc=0 >>
hellp
##调用etc下文件放入server组  在文件路径后面添加-m shell 则是调用shell模块去执行 不加则是默认command 

command 无法执行shell的内置命令和特性、

如下

[root@master ~]# ansible server -i /etc/ansible/inventory.ini -m shell -a "echo 'hello'|grep  -o 'e'"
192.168.1.108 | CHANGED | rc=0 >>
e
192.168.1.107 | CHANGED | rc=0 >>
e
192.168.1.106 | CHANGED | rc=0 >>
e
 

4.2 script模块

[root@master ~]# echo "touch /tmp/testfile" > a.sh

[root@master ~]# ansible server -i /etc/ansible/inventory.ini -m script -a "/root/a.sh"

##-i是文件地址 server是文件地址中的块 -m指定模块 -a执行命令
192.168.1.106 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.1.106 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.1.106 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}
[root@master ~]# ansible server -i hosts -m shell -a "ls -l /tmp/ | grep testfile"

##检查是否生成文件
192.168.1.107 | CHANGED | rc=0 >>
-rw-r--r-- 1 root root  0 9月  12 20:55 testfile
192.168.1.108 | CHANGED | rc=0 >>
-rw-r--r-- 1 root root  0 9月  12 20:55 testfile
192.168.1.106 | CHANGED | rc=0 >>
-rw-r--r-- 1 root root  0 9月  12 20:55 testfile
 

4.3copy模块

常用参数:

  • src 只当拷贝文件源地址
  • dest 只当拷贝文件的目标地址
  • backup 拷贝文件,若源目标文件发生变化,则对文件进行备份
  • woner 指定新拷贝文件的所有者
  • group指定新拷贝文件的所有组
  • mode 指定新拷贝文件的权限

1.拷贝管理节点的a.sh 拷贝到节点上

[root@master ~]# ansible server -i hosts -m copy -a "src=./a.sh dest=/root/"

##-m使用copy  src源地址 desr是目标地址 

[root@master ~]# ansible server -i hosts -m copy -a "src=./a.sh dest=/root/ backup=yes"

##目标文件改变 需要备份时 则加backup=yes  进行备份

                                                     group=nobody 所属组就是noboay

                                                     mode=0755    文件权限
 

4.4yum_repository

常用参数

  • name 仓库名称
  • description 仓库描述信息 必须要添加的参数
  • baseurl yum的存储库 repodata 目录所在目录的url  必须添加的参数
  • file 仓库文件把偶才能到本地的文件名 不包含repo 默认是name的值
  • state preset确认仓库文件  absent确认删除仓库文件
  • gpgcheck 检查gpg yes|no 没有默认值 

4.5yum模块

常用参数 

  • name 安装软件包名,多软件包逗号隔开
  • state 对当前只当的软件安装 移除操作

     -  present 确认已经安装 ,但不升级

        installed 确认已经安装

        latest 确保安装,且升级为最新

        absent和removed  确认已移除

[root@master ~]# ansible server -i hosts -m yum -a"name=nginx state=installed"
##安装nginx包 只要修改state状态

4.6systemd模块

常用模块

  • daemon_reload 重新载入systemd 扫描新的或有变动的单元
  • enabled 是否开机自启动 yes|no
  • name  必选项 服务名称 比如httpd  vsftpd
  • state 对档期那服务执行启动,停止,重启等操作(started,stopped,restarted,reloaded)

[root@master ~]# ansible server -i hosts -m systemd -a "name=nginx state=restarted enabled=yes"
 

4.7 group,user

group常用参数

  • name 组名称
  • system 是否系统组 yes|no  默认为no
  • state  删除,创建 yes/no 默认是no

user常用参数

  • name 必须的参数 指定用户名
  • password 设置用户的密码 这里接受的是加密的值,他会直接存到shadow中 默认不设置密码
  • update_password 假如设置的密码不同于原始密码吗,则会更新密码,在1,3中被加入
  • home 指定用户的家目录
  • shell 设置用户的shell
  • comment 用户的描述信息
  • create_home 创建用户时,是否创建其家目录,默认创建,假如不创建,设置为no 
  • group设置用户主组
  • groups 将用户加入到多个其他组中,多个用逗号隔开,默认会把用户从其他已经加入的组删除
  • appednd yes|no 和groups配合使用,yes时不会吧用户从其他已经加入的组删除
  • system 设置为yes时 将会创建一个系统长啊后
  • 而expires 设置用户的国企时间,值为时间,会转化为天数后,放在shadow的最后第8个字段里面
  • generate_ssh_key 设置为yes将会为用户生成密钥,这不会覆盖原来的密钥
  • ssh_key_type 那个用户的密钥类型,默认rsa 
  • state 删除或添加用户 p为添加 absent 为删除 默认值为present
  • remove 当于state=absent一起使用 删除一个用户及关联的目录,比如家目录,邮箱目录,可选的值是:yes/no
[root@master ~]# pass=$(echo "1" | openssl passwd -1 -stdin) ##设置变量pass密码值
[root@master ~]# echo $pass
$1$BnyMNtTD$Dty.g5lCJLvoCJmzeGINc0
[root@master ~]# ansible server -i hosts -m user -a "name=huawei password=${pass}"

4.8file模块

常用参数

  • group 定义文件的属组
  • mode定义文件的权限
  • owner定义文件的属主
  • path 必选项 定义文件的路径
  • recurs 递归的设置文件的属性,只对目录有效
  • src要被软硬原文件的路径 只应用羽state=link的情况
  • dest 被连接到的路径只用于state=link的情况
  • state

-directory 如果目录不存在 创建目录

-file 文件不存在 则不会被创建爱你 存在则返回文件的信息 常用语文件是否查存在

    link 创建软连接

-hard 创建硬连接

-touch 如果文件不存在 则会创建一个新的文件 如果文件或目录已经存在 则更新期最后的修     改时间

-absent 删除目录文件或者取消连接文件

[root@MASTER ~]# ansible all -m file -a "path=/root/ceshi owner=ceshi group=ceshi mode=0777" 

4.9cron 、debug,template模块

cron常用参数

  • name 只当一个cron job的名字 便于日后删除
  • minute hour day month weekdat 指定分钟 时 日 设置成格式默认是* 
  • job指定要执行的内容 通常写个脚本 
  • state 只当这个job砖塔i 可以新增present 或则删除absent  默认为新增
[root@master ~]# ansible master -i hosts -m cron -a "name='ceshi' minute='0' job='ls -alh >/dev/null'"
[root@master ~]# crontab -l ##查看任务
#Ansible: ceshi
0 * * * * ls -alh >/dev/null
[root@master ~]# ansible master -i hosts -m cron -a "name='ceshi' state=absent"
##删除ceshi这个任务

debug模块

常用参数

  • var 直接打印一个指定的变量值
  • msg打印一段可以格式化的字符串

template模块

常用参数

  • src 指定ansible控制端的文件路径
  • dest 只当ansible被控端的文件路径
  • owner group mode定制文件的 主 组 权限
  • mode 只当文件的权限
  • backup 床啊金一个包含时间信息的备份文件 这样如果您已某种方式错误的破坏了原始文件 就可以将其回复 yes|no

4.95 lineinfile,blockinfile模块

常用参数

  • path 目标文件路径 必须
  • state 可选值absent 删除| present 替换(默认值)
  • regexp 在文件的每一行查找正则表达式 对于state=present 只找最后一行替换
  • line 在文件插入 替换的行 需要state=present
  • create 文件不存是 是否要创建文件并添加内容 yes|no
[root@master ~]# ansible master -i hosts -m lineinfile -a "path=./sudoers regexp='^#' state=absent"
##删除dudoers文件下所有#开头的:
[root@master ~]# ansible master -i hosts -m lineinfile -a "path=./sudoers regexp='^34' line='ok' state=present"
##匹配34开头的 并且匹配相关值最后一行修改成ok

你可能感兴趣的:(linux,运维,ansible,自动化)