Ansible 基础

一,ansible概述



1,概述

---自动化统一配置管理工具


2,相关自动化工具

a, puppet,安装ruby环境楠,学习楠,没有远程执行功能

b, ansible,轻量,ssh远程执行,串行,200+台服务器会慢一些

c, saltstack,C&S架构,salt-master和salt-minion,并行大规模批量会比ansible快,也支持ssh

3,自动化优点

1)效率快

2)减少重复性工作

3)减少人力成本

4)提高工作精确度


4,ansible功能及优点

1)远程执行,统一配置管理,新建文件等;

2)事件驱动,通过模块,对服务进行不同的事件驱动;

3)通过playbook统一管理,可以一条命令完成一整套架构;

4)跨平台,跨系统

在Ubuntu上安装apache服务名字叫apt-get install apache

在CentOS上安装apache服务名字叫yum install apache


在CentOS6上启动服务器使用命令:/etc/init.d/nginx start

在CentOS7上启动服务器使用命令:systemctl start nginx




二、Ansible架构


1,构成

connection plugins   连接插件,用于连接主机,被管理端

core modules            核心模块,连接主机实现操作,依赖于具体的模块做具体的事情

custom modules        自定义模块,可根据自己需求,编写具体的模块;

plugins                       完成模块功能的补充;

playbook ansible        剧本,将多个任务写在剧本中,由ansible自动执行

inventor                      定义ansible需要操作的主机范围


2,执行流程

1)ansible读取playbook剧本,剧本会记录对哪些主机执行哪些任务;

2)ansible通过主机清单找到要执行的主机,然后调用具体的模块;

3)通过连接插件,连接对应的主机并推送对应的任务;

4)被管理的主机将ansible发来的任务解析为本地shell并执行




三、Ansible安装


1,环境准备

2,安装

[root@m01~]# yum install -y ansible


3,常用参数

# ansible [options]

-v          #显示详细信息

-i          #主机清单文件路径,默认是在/etc/ansible/hosts

-m          #使用的模块名称,默认使用command模块

-a          #使用的模块参数,模块的具体动作

-k          #提示输入ssh密码,而不使用基于ssh的密钥认证

-C          #模拟执行测试,但不会真的执行

-T          #执行命令的超时


--version  #ansible版本及模块路径

[root@m01~]# ansible --version

ansible 2.9.14

  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 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]



4,配置文件详解

[root@m01 ~]# cat /etc/ansible/ansible.cfg

#inventory      = /etc/ansible/hosts      #主机列表配置文件

#library        = /usr/share/my_modules/  #库文件存放目录

#remote_tmp    = ~/.ansible/tmp          #临时py文件存放在远程主机目录

#local_tmp      = ~/.ansible/tmp          #本机的临时执行目录

#forks          = 5                      #默认并发数

#sudo_user      = root                    #默认sudo用户

#ask_sudo_pass = True                    #每次执行是否询问sudo的ssh密码

#ask_pass      = True                    #每次执行是否询问ssh密码

#remote_port    = 22                      #远程主机端口

host_key_checking = False                #跳过检查主机指纹

log_path = /var/log/ansible.log          #ansible日志


host_key_checking = False 

一定要改,去掉注释

四,主机清单配置


1,单主机配置

1)IP+端口+主机名+密码

[root@m01~]# vim /etc/ansible/hosts

[web01]

10.0.0.7 ansible_ssh_port=22 ansible_sshuser=root ansible_ssh_psss='1'

[web02]

10.0.0.9 ansible_ssh_port=22 ansible_sshuser=root ansible_ssh_pass='1'

测试

[root@m01~]# ansible web01 -m ping

10.0.0.7 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}


[root@m01~]# ansible web02 -m ping

10.0.0.9 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

2)主机名+密码;配置etc/hosts

[root@m01~]# vim /etc/ansible/hosts

[lb01]

lb01 ansible_ssh_pass='1'

[lb02]

lb02 ansible_ssh_pass='1'


[root@m01~]# vim /etc/hosts

10.0.0.4 lb01

10.0.0.5 lb02


3)基于密钥方式

a,生成密钥对

[root@m01~]# ssh-keygen

[root@m01~]# ssh-copy-id [email protected]

[root@m01~]# ssh-copy-id [email protected]


b,配置hosts

[root@m01~]# vim /etc/ansible/hosts

[web1]

web01

[web3]

web03


2.主机组配置清单

1)主机组清单

[root@m01~]# vim /etc/ansible/hosts

...

[lb_group]

lb01 ansible_ssh_pass='1'

lb02 ansible_shh_pass='2'


[web_group]

web01

web02

测试

[root@m01~]# ansible lb_group -m ping

lb01 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

lb02 | UNREACHABLE! => {

    "changed": false,

    "msg": "Failed to connect to the host via ssh: ssh: connect to host lb02 port 22: Connection timed out",

    "unreachable": true

}


## lb02服务器没有打开

2)查看指定主机组的主机

[root@m01~]# ansible web_group --list-host

  hosts (2):

    web01

    web02


[root@m01~]# ansible lb_group --list-host

  hosts (2):

    lb01

    lb02


3,操作不同的主机组

[root@m01~]# ansible 'web_group,lb_group' -m ping


[root@m01~]# vim hosts

lb01 ansible_ssh_pass='1'

lb02 ansible_shh_pass='2'


[root@m01~]# ansible '*' -m ping -i ./hosts

lb01 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

lb02 | UNREACHABLE! => {

    "changed": false,

    "msg": "Failed to connect to the host via ssh: ssh: connect to host lb02 port 22: Connection timed out",

    "unreachable": true

}



4.定义多组


##整合web_group 和 lb_group

[root@m01 ~]# cat /etc/ansible/ansible.cfg

...

[nginx_group:children]

web_group

lb_group



##查看

[root@m01~]# ansible nginx_group --list-host

[root@m01~]# ansible nginx_group:chlidren --list-host##children(可以忽略 )

[WARNING]: Found both group and host with same name: lb01

[WARNING]: Could not match supplied host pattern, ignoring: chlidren

  hosts (4):

    web01

    web02

    lb01

    lb02



五、Ansible ad-hoc



1,ad-hoc

ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存


2,ad-hoc结果返回颜色

绿色:被管理主机端没有被修改

黄色:被管理主机端发生改变

红色:报错



六、ad-hoc常用模块



常用模块:

command                         # 执行shell命令(不支持管道等特殊字符)

shell                                # 执行shell命令

scripts                               # 执行shell脚本

yum_repository                # 配置yum仓库  (不常用)

yum                                 # 安装软件

copy                                # 变更配置文件

file                                   # 建立目录或文件

service                            # 启动与停止服务

mount                             # 挂载设备

cron                               # 定时任务

get_url                           # 下载软件

firewalld                        # 防火墙

selinux                          # selinux


[root@m01 ~]# ansible-doc -l            # 查看所有模块说明


[root@m01 ~]# ansible-doc copy      # 查看指定模块方法

搜索   EXAMPLES:示例


[root@m01 ~]# ansible-doc -s copy  # 查看指定模块参数x




1.Ansible命令模块



1)command模块

[root@m01~]# ansible web01 -m command -a 'free -m'

[WARNING]: Found both group and host with same name: lb01

web01 | CHANGED | rc=0 >>

              total        used        free      shared  buff/cache  available

Mem:            468        206          5          30        256        180

Swap:          1023          0        1023


不支持特殊字符

[root@m01~]# ansible web01 -m command -a "ifconfig eth0 | awk 'NR==2 {print \$2}'"

[WARNING]: Found both group and host with same name: lb01

web01 | FAILED | rc=1 >>

|: 未知的主机

ifconfig: `--help' gives usage information.non-zero return code



2)shell模块

[root@m01~]# ansible web01 -m shell -a 'free -m'

[WARNING]: Found both group and host with same name: lb01

web01 | CHANGED | rc=0 >>

              total        used        free      shared  buff/cache  available

Mem:            468        206          6          30        256        181

Swap:          1023          0        1023



支持特殊符号

[root@m01~]# ansible web01 -m shell -a "ifconfig eth0 | awk 'NR==2 {print \$2}'"

[WARNING]: Found both group and host with same name: lb01

web01 | CHANGED | rc=0 >>

10.0.0.7



3) script模块


先准备一个脚本

[root@m01~]# cat qq.sh

#!/bin/bash

touch /root/yueliang


[root@m01~]# ansible web01 -m script -a ./qq.sh

[WARNING]: Found both group and host with same name: lb01

web01 | CHANGED => {

    "changed": true,

    "rc": 0,

    "stderr": "Shared connection to web01 closed.\r\n",

    "stderr_lines": [

        "Shared connection to web01 closed."

    ],

    "stdout": "",

    "stdout_lines": []

}


到web01验证查看:

[root@web01 ~]# ll

-rw-r--r-- 1 root root  0 2020-11-15 00:02 yueliang




2.Ansible软件管理模块



1)yum模块


语法

name: httpd (服务名称)

            http://...   (下载路径)

            /usr/local/src/nginx.rpm   (本地文件路径)

state:latest           最新版(不常用)

             present          (下载)

             absent           (卸载)


示例

a,)  服务名称

[root@m01~]# ansible web_group -m yum -a "name=httpd state=present"

[WARNING]: Found both group and host with same name: lb01

web03 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "msg": "",

    "rc": 0,

    "results": [

        "httpd-2.4.6-93.el7.centos.x86_64 providing httpd is already installed"

    ]

}

web01 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "msg": "",

    "rc": 0,

    "results": [

        "httpd-2.4.6-93.el7.centos.x86_64 providing httpd is already installed"

    ]

}

调整 state=absent    就是卸载


相当于被控制主机端执行  yum install -y httpd


b,) 链接地址

[root@m01~]# ansible web_group -m yum -a "name=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present"

web03 | CHANGED => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": true,

    "changes": {

        "installed": [

            "/root/.ansible/tmp/ansible-tmp-1605752822.97-19202-199062966729605/zabbix-agent-4.0.0-2.el7.x86_64PWvubI.rpm"

        ]

.......

相当于被控制端执行 wget https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm 


c,)文件路径

[root@m01 ~]# ansible web_group -m yum -a "name=/root/php71w-cli-7.1.31-1.w7.x86_64.rpm state=present

相当于yum localinstall -y 


2)   yum_repository模块    (不常用  不建议用)

语法

yum_repository:

name: epel      仓库的描述信息

description: EPEL YUM repo

baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/

mirrorlist: http://mirrorlist.repoforge.org/el7/mirrors-rpmforge

file: external_repos

enabled: no  是否启用这个仓库,0表示不启用,1表示启用

gpgcheck: no     是否检查合法性,0是否

    

执行命令后如下:

[root@m01~]# ansible web01 -m yum_repository -a "name='nginx stable repo' description='nginx repo' baseurl='http://nginx.org/packages/centos/7/$basearch/' gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key state=present file=nginx"


[root@web01 ~]# cat /etc/yum.repos.d/nginx.repo

[nginx stable repo]

baseurl = http://nginx.org/packages/centos/7//

enabled = 1

gpgcheck = 1

gpgkey = https://nginx.org/keys/nginx_signing.key

name = nginx repo




3.文件管理模块



1)copy模块


语法

copy:

    src: /srv/myfiles/foo.conf            文件原路径

    dest: /etc/foo.conf                       目标地址

    owner:                                            属主

    group:                                            属组

    mode: '0644'                                      权限

    content                                             一行简短的文本

不常用:

   backup

   follow                                           是否识别软连接



 content   例:

[root@m01~]# ansible web01 -m copy -a "content=234567890 dest=/tmp/index"


[root@web01 ~]# cat /tmp/index

234567890

本地先准备好要推送的文件:

[root@m01~]# cat /etc/yum.repos.d/php.repo

[php-webtatic]

name = PHP Repository

baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/

gpgcheck = 0



执行命令

[root@m01~]# ansible web_group -m copy -a "src=/etc/yum.repos.d/php.repo dest=/tmp/ mode=666 owner=www group=www"



查看

[root@web01 ~]# ll /tmp/

总用量 4

-rw-rw-rw- 1 www  www  109 2020-11-15 02:59 php.repo




2)file模块

语法

- name: Change file ownership, group and permissions

  file:

    path: /etc/foo.conf

    owner: foo

    group: foo

    mode: '0644'

    state: link, touch, hard, directory, file, absent

    recurse: yes / no       递归


实例

1,创建目录

[root@m01~]# ansible web01 -m file -a 'path=/etc/abc owner=www group=www mode=755 state=directory'


   查看

[root@web01 ~]# ll -d /etc/abc/

drwxr-xr-x 2 www www 6 2020-11-22 16:31 /etc/abc/


2,新建两个目录,递归授权

[root@m01~]# ansible web01 -m file -a 'path=/abc/bcc state=directory'

[root@m01~]# ansible web01 -m file -a 'path=/abc state=directory recurse=yes mode=777'


备注:

可以递归创建目录;

创建文件时,上层目录必须存在;

创建的上层目录已存在,不会改变上层的目录的权限,需要加上递归授权recurse


3, 删除abc及下面的所有目录目录

[root@web01 ~]# ll /etc/abc/ccc -d

drwxrwxrwx 2 www www 6 2020-11-22 16:44 /etc/abc/ccc/bbb/


[root@m01~]# ansible web01 -m file -a 'path=/etc/abc owner=www group=www mode=777 state=absent'


4,创建软连接

[root@m01~]# ansible web01 -m file -a 'src=/etc/rsyncd.conf dest=/root/rsync state=link'


[root@web01 ~]# ll /root/rsync

lrwxrwxrwx 1 root root 16 2020-11-22 16:51 /root/rsync -> /etc/rsyncd.conf


3.get_url 模块

 --相当于wget


语法:

  get_url:

    url: http://example.com/path/file.conf

    dest: /etc/foo.conf          #下载后保存路径

    mode: '0440'

    checksum                    #下载时进行验证


示例:

[root@m01~]# ansible web01 -m get_url -a 'url=https://mirrors.aliyun.com/apache/archiva/2.2.5/src/apache-archiva-2.2.5-src.zip mode=777 dest=/tmp'


[root@web01 ~]# ll /tmp/

-rwxrwxrwx 1 root root 18955403 2020-11-22 17:28 apache-archiva-2.2.5-src.zip


备注:

checksum=md5:a4e52205a104c2db0c3e5a5ae1335de8'

用于大型企业,公有专门的下载包库,司会给个类似md5值,防止下载包被人串改




示例:

配置较多,看主要的黑色字体即可


[root@web01 ~]# vim /etc/nginx/conf.d/autoindex.conf

limit_conn_zone $remote_addr zone=limit_conn:1m;

limit_req_zone $remote_addr zone=limit_req:1m rate=1r/s;

server {

    listen 80;

    server_name www.autoindex.com;

    charset utf-8;

    limit_conn limit_conn 1;

    limit_req zone=limit_req;

    location /nginx_status {

      stub_status;

}

    location /download {

        root /code/auto;

        autoindex on;

        autoindex_exact_size off;

        autoindex_localtime on;

        allow 10.0.0.0/24;

        deny all;

        #auth_basic "输入登陆用户密码";

        #auth_basic_user_file /etc/nginx/auth_basic;

}

        location / {

             root /code/auto;

             index index.html;

    }

}


#查看站点

[root@web01 /code/auto/download]# ll

drwxr-xr-x 2 www  www      33 2020-09-10 23:06 aaaa

... ...

-rw-r--r-- 1 root root 727290 2020-11-23 08:55 sersync2.5.4_64bit_binary_stable_final.tar.gz


配置hosts,访问


另一台服务器下载:

[root@web03 ~]# wget http://www.autoindex.com/download/sersync2.5.4_64bit_binary_stable_final.tar.gz


[root@web03 ~]# ll

-rw-r--r--  1 root root    0 2020-11-26 12:32 sersync2.5.4_64bit_binary_stable_final.tar.gz


接收方一定要配置:

[root@web03 ~]# vim /etc/hosts

10.0.0.7 www.autoindex.com


web01的仓库文件设置md5值:

[root@web01 /code/auto/download]# ll

-rw-r--r-- 1 root root 727290 2020-11-23 08:55 sersync2.5.4_64bit_binary_stable_final.tar.gz


[root@web01 /code/auto/download]# md5sum sersync2.5.4_64bit_binary_stable_final.tar.gz

cf202bc0568653ba5f486b5a2952301e  sersync2.5.4_64bit_binary_stable_final.tar.gz


[root@m01~]# ansible web03 -m get_url -a 'url="http://www.autoindex.com/download/sersync2.5.4_64bit_binary_stable_final.tar.gz" dest=/tmp/ mode=777 checksum=md5:cf202bc0568653ba5f486b5a2952301e'


##如果改变md5值,会报错



五、Ansible服务管理模块



1.service模块   &  systemd模块


语法:

service:

    name: httpd

    state: started

             stopped         #停止服务

             restarted       #重启服务

             reloaded       #重载服务

    enabled: yes

                   no

service示例:

[root@m01~]# ansible web01 -m service -a 'name=nginx state=stopped'


[root@m01~]# ansible web01 -m service -a 'name=nginx state=started enabled=yes'


systemd示例:

[root@m01~]# ansible web01 -m systemd -a 'name=nginx state=stopped'


[root@m01~]# ansible web01 -m systemd -a 'name=nginx state=started enabled=yes'


daemon_reload: 后台启动

                             yes

                             no 



六、用户管理模块



1.group 模块


语法

group:

    name: somegroup

    state: present

             absent

     gid : 666


示例:

#建组,会随机产生一个gid

[root@m01~]# ansible web01 -m group -a 'name=z  state=present'


#修改gid,组名不改即可

[root@m01~]# ansible web01 -m group -a 'name=z gid=1234 state=present'


#删除组

[root@m01~]# ansible web01 -m group -a 'name=z state=absent'


2.user 模块

语法

user:

    name: johnd

    comment: John Doe                #用户注释

    uid: 1040

    group: admin

    shell: /bin/zsh

             /sbin/nologin

append: yes                           #是否使用附加组

create_home:yes                #是否创建家目录

remove: yes                           #移除家目录

expires: 1422403387             #用户的有效时间

enerate_ssh_key: yes

    ssh_key_bits: 2048

    ssh_key_file: .ssh/id_rsa

password:'123456'                 #用户的密码

state:present                          #创建用户

            absent                           #删除用户


示例

[root@m01~]# ansible web01 -m user -a 'name=xzx uid=998 create_home=yes shell=/sbin/nologin state=present'


[root@m01~]# ansible web01 -m user -a 'name=xzx create_home=yes state=absent'


备注:用户名和用户组名一样的话,删除用户会连同用户一起删除

如果组下有其他用户,不会和用户一起删除



七、其他模块


1.cron 定时任务模块

语法

cron:

    name: "check dirs"

    minute: "0"

    hour: "5,2" 

    day:

    month:

   weekday:

  job: "ls -alh > /dev/null"

  disabled:                 #是否开启定时任务(是否禁用)注释掉/不删除

  state:                 present

                            absent


示例:

[root@m01~]# ansible web01 -m cron -a 'name=时间同步 minute=*/5 job="/user/sbin/ntpdate time1.aliyun.com &>/dev/null"'


[root@web01 ~]# crontab -l

#Ansible: 时间同步

*/5 * * * * /user/sbin/ntpdate time1.aliyun.com &>/dev/null



#注释掉

[root@m01~]# ansible web01 -m cron -a 'name=时间同步 minute=*/5 job="/usr/sbin/ntpdate time1.aliyun.com &>/dev/null" disabled=yes'


#删除

[root@m01~]# ansible web01 -m cron -a "name=时间同步 state=absent"


注意⚠️          &>/dev/null     符号和/dev之间不能有空格



2.mount 挂载模块


语法

mount:

    path: /mnt/dvd              本地需要挂载的目录

    src: /dev/sr0                  远程提供的挂载点

    fstype: iso9660                   挂载类型,一般都是nfs

    opts: ro,noauto                   自动挂载的参数     ro,      noauto

    state: present                    写入自动挂载,需要重启

             mounted                     写入了自动挂载,不需要重启,直接挂载了(常用)

             unmounted                 取消挂载,但不删除自动挂载配置

             absent                          取消挂载,并删除自动挂载配置(常用)


示例:

#配置主机清单

[root@m01~]# vim /etc/ansible/hosts

[web_group]

web01

web03

[nfs]

nfs ansibl_ssh_pass='1'


[root@m01~]# vim /etc/hosts

10.0.0.7 web01

10.0.0.9 web03

172.16.1.31 nfs


# 服务端配置

#安装nfs

[root@m01~]# ansible nfs -m yum -a 'name=nfs-utils state=present'


#配置

[root@m01~]# ansible nfs -m copy -a 'content="/date 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports'


#建组 用户 及共享目录

[root@m01~]# ansible nfs -m group -a 'name=www gid=666'

[root@m01~]# ansible nfs -m user -a 'name=www uid=666 group=www create_home=no shell=/sbin/nologin'


[root@m01~]# ansible nfs -m file -a 'path=/date owner=www group=www state=directory'


#启动

[root@m01~]# ansible nfs -m systemd -a 'name=nfs state=started'


#客户端配置

[root@m01~]# ansible web_group -m file -a 'path=/date state=directory'


#挂载

[root@m01~]# ansible web_group -m mount -a 'src=172.16.1.31:/date path=/date fstype=nfs state=mounted'


#验证

[root@web01 ~]# cat /etc/fstab

... ...

172.16.1.31:/date /date nfs defaults 0 0


#卸载

[root@m01~]# ansible web_group -m mount -a 'src=172.16.1.31:/date path=/date state=absent'



3.selinux 模块


#语法

selinux:

    state: enforcing            #开启

              disabled             #关闭

              permissive        #临时关闭


示例:

[root@m01~]# ansible web_group -m selinux -a 'state=disabled'


4.firewalld 模块


语法:

firewalld:

    service: https

    permanent: yes

    state: enabled
              disabled

    zone: dmz

    source: 192.0.2.0/24

    interface: eth2            #绑定网卡

    masquerade: yes         #   IP伪装

    rich_rule: rule service name="ftp" audit limit value="1/m" accept


示例:

#开启防火墙

[root@m01~]# ansible web_group -m service -a 'name=firewalld state=started'


#开启http服务

[root@m01~]# ansible web_group -m firewalld -a 'service=nginx state=enabled'

#富规则,允许172.1.1.0网段访问

[root@m01~]# ansible web_group -m firewalld -a 'rich_rule="rule family=ipv4 source address=172.1.1.0/24 accept" state=enabled'


#关闭防火墙

[root@m01~]# ansible web_group -m systemd -a 'name=firewalld state=stopped'



5.unarchive 解压模块

语法

unarchive:

    src: foo.tgz                         需要解压包的路径

    dest: /var/lib/foo                 解压到的位置

    remote_src: yes                    解压包是否在受控端(默认no)


示例

压缩包在web01上

[root@m01~]# ansible web01 -m unarchive -a 'src=/tmp/WeCenter_3-2-1.zip dest=/tmp/ remote_src=yes'


压缩包在本地m01上

[root@m01~]# ansible web01 -m unarchive -a 'src=/opt/WeCenter_3-2-1.zip dest=/opt/'



6.archive 压缩模块

语法

archive:

    path: /path/to/foo                       要压缩的文件路径

    dest: /path/to/foo.tgz                  压缩后存放的位置

    format: zip   bz2     tar                压缩格式


示例:

[root@m01~]# ansible web01 -m archive -a 'path=/etc/nginx/conf.d/zh.conf dest=/opt/zh'


#指定压缩包格式

[root@m01~]# ansible web01 -m archive -a 'path=/code/pp dest=/opt/code.zip format=zip'



7.setup 模块


#查看服务器所有信息

[root@m01~]# ansible web01 -m setup


常用参数

ansible_all_ipv4_addresses:仅显示ipv4的信息。

ansible_devices:仅显示磁盘设备信息。

ansible_distribution:显示是什么系统,例:centos,suse等。

ansible_distribution_major_version:显示是系统主版本。

ansible_distribution_version:仅显示系统版本。

ansible_machine:显示系统类型,例:32位,还是64位。

ansible_eth0:仅显示eth0的信息。

ansible_hostname:仅显示主机名。

ansible_fqdn:显示完整的主机名。

ansible_kernel:仅显示内核版本。

ansible_lvm:显示lvm相关信息。

ansible_memtotal_mb:显示系统总内存。

ansible_memfree_mb:显示可用系统内存。

ansible_memory_mb:详细显示内存情况。

ansible_swaptotal_mb:显示总的swap内存。

ansible_swapfree_mb:显示swap内存的可用内存。

ansible_mounts:显示系统磁盘挂载情况。

ansible_processor:显示cpu个数(具体显示每个cpu的型号)。

ansible_processor_vcpus:显示cpu个数(只显示总的个数)。


示例:

查看cpu个数

[root@m01~]# ansible web01 -m setup -a 'filter=ansible_processor'




八,Ansible 搭建交作业



1,确认使用的服务器,配置主机清单

[root@m01~]# vim /etc/ansible/hosts

[web_group]

web01 ansible_ssh_pass='1'

web02 ansible_ssh_pass='1'

[nfs]

nfs ansible_ssh_pass='1'


[root@m01~]# vim /etc/hosts

10.0.0.7 web01

10.0.0.8 web02

172.16.1.31 nfs


2,准备需要的包

[root@m01~]# ll /package/

-rw-r--r-- 1 root root    28921 2020-11-29 21:07 kaoshi.zip

-rw-r--r-- 1 root root 19889622 2020-11-29 21:07 php.tar.gz


3,准备配置文件

[root@m01~]# yum install -y httpd

[root@m01~]# vim /etc/httpd/conf/httpd.conf

... ...

User www

Group www


4,搭建流程

#1,所有主机创建统一组

ansible 'all' -m group -a 'name=www gid=666 state=present' &&\

#2,所有主机创建统一用户

ansible 'all' -m user -a 'name=www uid=666 group=www create_home=no shell=/sbin/nologin state=present' &&\

#3,下载httpd

ansible 'web_group' -m yum -a 'name=httpd state=present' &&\

#4,配置httpd

ansible 'web_group' -m copy -a 'src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/' &&\

#5,解压php

ansible 'web_group' -m unarchive -a 'src=/package/php.tar.gz dest=/tmp' &&\

#6,安装php

ansible 'web_group' -m shell -a 'yum localinstall -y /tmp/*.rpm' &&\

#7,解压交作业代码

ansible 'web_group' -m unarchive -a 'src=/package/kaoshi.zip dest=/var/www/html'

#8,创建上传作业目录

ansible 'web_group' -m file -a 'path=/var/www/html/upload state=directory'

#9,授权交作业目录

ansible 'web_group' -m file -a 'path=/var/www/html state=directory owner=www group=www recurse=yes'

#10,启动httpd

ansible 'web_group' -m systemd -a 'name=httpd state=started enabled=yes' &&\


#11,服务端下载nfs

ansible nfs -m yum -a 'name=nfs-utils state=present' &&\

#12,服务端配置nfs

ansible nfs -m copy -a 'content="/date 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports' &&\

#13,服务端创建目录并授权

ansible nfs -m file -a 'path=/date state=directory owner=www group=www' &&\

#14,启动nfs

ansible nfs -m service - a 'name=nfs state=started'

#15,挂载

ansible web_group -m mount -a 'path=/var/www/html/upload src=172.16.1.31:/date fstype=nfs state=mounted'


把以上放在一个脚本里执行

[root@m01~]# vim jiaozuoye.sh

#!/bin/bash

... ...


[root@m01~]# ansible 'all' -m ping

[root@m01~]# sh jiaozuoye.sh

成功后配置hosts 访问


10.0.0.7

10.0.0.8

各上传一张图片

10.0.0.7图省略

查看同步:

[root@web01 ~]# ll /var/www/html/upload

-rw-r--r-- 1 www www  13467 2020-11-30 11:38 1_1.jpg

-rw-r--r-- 1 www www 499181 2020-11-30 11:37 33_33.png


[root@nfs /date]# ll

-rw-r--r-- 1 www www  13467 2020-11-30 11:38 1_1.jpg

-rw-r--r-- 1 www www 499181 2020-11-30 11:37 33_33.png

你可能感兴趣的:(Ansible 基础)