栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux自动化运维-ansible

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux自动化运维-ansible

一、安装及简易配置

1、服务端安装ansilbe  IP:192.168.176.189

2、将所需管控主机添加至 /etc/ansible/hosts

3、添加 ssh秘钥进行认证

[root@master ~]# ssh-keygen -t rsa -P ""
[root@master ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.176.191
[root@master ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.176.192

4、进行连通性测试:

[root@master ~]# ansible all -m ping


二、部分模块使用

1、usergroup

[root@master ~]# ansible all -m group -a "name=mygrp gid=3000 state=present"
[root@master ~]# ansible all -m user -a "name=testusr uid=3000 groups=mygrp state=present"

 2、copy

复制文件

[root@master ~]# ansible all -m copy -a "src=/etc/fstab dest=/tmpfstab.ansible mode=600"

 复制目录

[root@master ~]# ansible all -m copy -a "src=/etc/pam.d/ dest=/tmp/copy "

 输出文本

[root@master ~]# ansible all -m copy -a "content='hi test.txtn' dest=/tmp/hi.txt "

 3、command

注意:command本身不使用shell 解析命令

[root@master ~]# ansible all -m command -a "ifconfig"
[root@master ~]# ansible all -m command -a "chdir=/var/tmp mkdir test.dir"
[root@master ~]# ansible all -m command -a "echo test | passwd --stdin testuser"

4、 shell

[root@master ~]# ansible all -m shell -a "echo test | passwd --stdin testuser"

5、file

[root@master ~]# ansible all -m file -a "src=/var/tmp/fstab.ansible path=/var/tmp/fstab.link state=link"
# 创建一个链接

6、cron

[root@master ~]# ansible all -m cron -a "minute=*/3 job='/usr/sbin/update 192.168.176.189 &> /dev/null' name=test"

# 定义一个名为test的定时任务,每三分钟自动往189主机校时

7、yum

[root@master ~]# ansible all -m yum -a "name=nginx state=installed"

8、service

[root@master ~]# ansible all -m service -a "name=nginx state=started"

 9、script

[root@master ~]# ansible all -m script -a "/tmp/test.sh"


三、playbook

yaml语法格式:

 1、数组(清单): 短杆+空白字符作为起始

- Casaba
- North

或者:方括号围住,并用逗号+空白区隔

[milk, pump, pie]

2、散列表(关联数组):

区块形式:缩进跟换行符

    name: john
    age: 33

内置形式:大括号中使用逗号+空白字符分隔

{name: john, age: 33}

3、区块的字符:

两种方式:

        1、使用(|字符):保存新行

        2、使用(>字符) :折叠新行

Playbook

Playbook的核心元素:

        Hosts:关联到的主机

        Tasks:任务列表

        Variables:变量

        Templates:包含了模板语法的文本文件

        Handlers:由特定条件触发的任务

        Roles

playbook的基础组件:

        Hosts:运行指定任务的目标主机

        remoute_user:在远程主机上执行任务的用户

                sudo_user:

        tasks:任务列表

                模块,模块参数;

                格式:

                        (1)action:module arguments

                        (2)module:arguments

                           注意:shell和command模块后面直接跟命令,而非key=value类的参数列表

                (1)某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers

                (2)任务可通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用

handlers:

        任务,在特定条件下触发;

        接受到其他任务的通知时被触发

                notify :HANDLER TASK NAME

 variables:

        1、facts:可直接调用;

        2、ansible-playbook 命令的命令行中的自定义变量

                -e VARS, --extra-vars=VARS

        3、通过roles传递变量

        4、Host Inventory

                a、向不同的主机传递不同的变量

                        IP/HOSTNAME varaiable=value var2=value2

                b、向组中的主机传递相同的变量

                        [groupname:vars]

                        variable=value

                注意:invertory参数:

                       用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量

                                ansible_ssh_host

                                 ansible_ssh_port

                                 ansible_ssh_user

                                 ansible_ssh_pass

                                 ansible_sudo_pass

运行playbook的方式

1、测试     

        ansible-playbook xx --check

                只检测可能会发生的改变,但不好着呢正执行操作

        ansible-playbook xx --list-hosts

                列出运行任务的主机

2、运行 

 运行

1、

[root@master playbooks]# vim first.yaml

[root@master playbooks]# ansible-playbook --syntax-check first.yaml 
# 检查playbook的.yaml文件语法错误

[root@master playbooks]# ansible-playbook -C first.yaml 
# 干跑测试,不执行

[root@master playbooks]# ansible-playbook  first.yaml 
# 真正执行


2、

首先更改redis配置文件

[root@master playbooks]# vim /etc/redis.conf 
# 更改监听的ip及密码

其次将文件复制到当前路径下

[root@master playbooks]#  cp /etc/redis.conf .

在更改yaml文件,新增如下内容,并测试文件语法,并干跑

 没问题后直接执行

 切换主机,虽然配置文件更改了,但是监听端口并未改变


3、

于是,新增yaml内部模块,handlers

# Handlers:由特定条件触发的任务

接收其他任务的通知时触发:

        notify:HANDLER TASK NAME

     

[root@master playbooks]# cp first.yaml second.yaml
[root@master playbooks]# vim second.yaml 

 编辑redis.conf配置文件,新更改密码

[root@master playbooks]# ansible-playbook --syntax-check second.yaml 
[root@master playbooks]# ansible-playbook -C second.yaml 
[root@master playbooks]# ansible-playbook  second.yaml 

4、

标签式执行任务

首先,继续更改redis配置文件,随后,标签式执行ansible

[root@master playbooks]# vim redis.conf 
[root@master playbooks]# ansible-playbook -t configfile second.yaml 

仅仅执行替换配置文件并重启 


variables:

variables:

        1、facts:可直接调用;

                注意:可使用setup模块直接获取目标主机的facters

     2、用户自定义变量:

        a、ansible-playbook 命令的命令行中的自定义变量

                -e VARS, --extra-vars=VARS

[root@master playbooks]# ansible-playbook -e pkagename=memcached -C fourth.yaml 


 b、 在playbook中定义变量的方法:

        vars:

        - var1:value1

        - var2:value2

变量引用:{{  variable }}

[root@master playbooks]# ansible-playbook -e username=test five.yaml

 


3、通过roles传递变量

        4、Host Inventory

                a、向不同的主机传递不同的变量

                        IP/HOSTNAME varaiable=value var2=value2

                b、向组中的主机传递相同的变量

                        [groupname:vars]

                        variable=value

                注意:invertory参数:

                       用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量

                                ansible_ssh_host

                                 ansible_ssh_port

                                 ansible_ssh_user

                                 ansible_ssh_pass

                                 ansible_sudo_pass

四、模板:templates

模板:templates

        文本文件,嵌套有脚本

        Jinja2:

                字面量:

                        字符串:使用单引号,或双引号

                        数字:整数,浮点数

                        列表:[item1, item2]

                        元组:(item1,item2)

                        字典:{key1:value1,key2:value2,}

                算术运算:

                        +,-,*,/,等

                比较操作:

                        ==,!=等..

                逻辑运算:

                        and,or,not

条件测试:

        when语句,在task中使用,jinja2的语法格式:

循环:迭代,需要重复执行的任务;

          对迭代的项引用,固定变量名为"item"

         而后,要在task中使用with_items给定要迭代的元素列表;

                列表方法:

                        字符串

                        字典

五、角色:roles

角色集合:

每个角色,以特定的层级目录结构进行组织:

        mysql/

                files/:存放由copy或script模块等调用的文件

                templates/:template 模块查找所需要模板文件的目录

                 tasks/:至少应该包含一个名为main.yaml的文件,其他的文件需要在此文件中

                                通过include进行包含

                handlers/:至少应该包含一个名为main.yml的文件,其他文件需要在此文件中通过

                                include进行包含

                vars/:至少应该汉堡一个名为main.yml文件,其他文件需要在此文件中通过

                            include进行包含

                meta/:至少应该包含一个名为main.yml文件,定义当前角色的特殊设定及依赖关系,其他文件需要在此文件中通过 include进行包含

                default/:设定默认变量时使用此目录中的main.yml文件

在playbook调用角色方法1:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/344175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号