ansible基本模块使用
ansible基本模块使用
eddy_linux 发表于2年前
ansible基本模块使用
  • 发表于 2年前
  • 阅读 985
  • 收藏 2
  • 点赞 0
  • 评论 0
-a MODULE_ARGS, --args=MODULE_ARGS
-m MODULE_NAME, --module-name=MODULE_NAME

1.测试ping
[root@eddy ~]# ansible all -m ping
eddy | success >> {
    "changed": false,
    "ping": "pong"
}

[root@eddy ~]# ansible all -m ping -u eddy
#以用户eddy去ping所有主机

[root@eddy ~]# ansible all -m ping -u eddy --sudo
#以用户eddy用root身份去ping所有主机

2.查看模块帮助
可以通过ansible-doc进行查看

[root@eddy ~]# ansible-doc  shell
less 436
Copyright (C) 1984-2009 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
> SHELL

  The [shell] module takes the command name followed by a list of
  space-delimited arguments. It is almost exactly like the [command]
  module but runs the command through a shell (`/bin/sh') on the
  remote node.

Options (= is mandatory):

- chdir
        cd into this directory before running the command [Default:
        None]

- creates
        a filename, when it already exists, this step will *not* be
        run. [Default: None]

- executable
        change the shell used to execute the command. Should be an
        absolute path to the executable. [Default: None]

= free_form
        The shell module takes a free form command to run, as a
        string.  There's not an actual option named "free form".  See
        the examples! [Default: None]

- removes
        a filename, when it does not exist, this step will *not* be
        run. [Default: None]

- warn
        if command warnings are on in ansible.cfg, do not warn about
        this particular line if set to no/false. [Default: True]

Notes:  If you want to execute a command securely and predictably, it may be
        better to use the [command] module instead. Best practices
        when writing playbooks will follow the trend of using
        [command] unless [shell] is explicitly required. When running
        ad-hoc commands, use your best judgement. To sanitize any
        variables passed to the shell module, you should use "{{ var |
        quote }}" instead of just "{{ var }}" to make sure they don't
        include evil things like semicolons.

EXAMPLES:
# Execute the command in remote shell; stdout goes to the specified
# file on the remote.
- shell: somescript.sh >> somelog.txt

# Change the working directory to somedir/ before executing the command.
- shell: somescript.sh >> somelog.txt chdir=somedir/

# You can also use the 'args' form to provide the options. This command
# will change the working directory to somedir/ and will only run when
# somedir/somelog.txt doesn't exist.
- shell: somescript.sh >> somelog.txt
  args:
    chdir: somedir/
    creates: somelog.txt




3.并行性和shell命令
[root@eddy ~]# ansible eddy -a '/sbin/reboot' -f 10 重启eddy组下的所有主机10次 默认情况下使用command模块,但不支持管道和shell变量,shell模块支持

[root@eddy ~]# ansible eddy -m shell -a 'echo $PATH'

[root@eddy ~]# ansible eddy -m command -a 'uptime'
eddy | success | rc=0 >>
 11:34:27 up 17 days, 22:43,  2 users,  load average: 0.08, 0.02, 0.01
等价于
[root@eddy ~]# ansible eddy  -a 'uptime'
eddy | success | rc=0 >>
 11:34:44 up 17 days, 22:43,  2 users,  load average: 0.06, 0.02, 0.00

4.传输文件
[root@eddy ~]# ansible eddy -m copy -a 'src=/etc/hosts dest=/opt/hosts'
eddy | success >> {
    "changed": true,
    "checksum": "4cd5e5c28fa400e428c592f89b05e2d3feadb3e0",
    "dest": "/opt/hosts",
    "gid": 0,
    "group": "root",
    "md5sum": "6acaf54c3f3c419e70ce09e6dc7956f7",
    "mode": "0644",
    "owner": "root",
    "size": 152,
    "src": "/root/.ansible/tmp/ansible-tmp-1447823306.59-157076705372231/source",
    "state": "file",
    "uid": 0
}

5.修改权限
[root@eddy ~]# ll /opt/hosts
-rw-r--r-- 1 root root 152 Nov 18 13:08 /opt/hosts
[root@eddy ~]# ansible eddy -m file -a 'dest=/opt/hosts mode=600'
eddy | success >> {
    "changed": true,
    "gid": 0,
    "group": "root",
    "mode": "0600",
    "owner": "root",
    "path": "/opt/hosts",
    "size": 152,
    "state": "file",
    "uid": 0
}
[root@eddy ~]# ll /opt/hosts
-rw------- 1 root root 152 Nov 18 13:08 /opt/hosts

创建目录
[root@eddy ~]# ansible eddy -m file -a 'dest=/opt/eddy/yys/linux mode=755 owner=eddy group=eddy state=directory'
eddy | success >> {
    "changed": true,
    "gid": 500,
    "group": "eddy",
    "mode": "0755",
    "owner": "eddy",
    "path": "/opt/eddy/yys/linux",
    "size": 4096,
    "state": "directory",
    "uid": 500
}

删除文件或者目录
[root@eddy ~]# ansible eddy -m file -a 'dest=/opt/eddy/yys/linux state=absent'
eddy | success >> {
    "changed": true,
    "path": "/opt/eddy/yys/linux",
    "state": "absent"
}
[root@eddy ~]# ansible eddy -m file -a 'dest=/opt/hosts state=absent'
eddy | success >> {
    "changed": true,
    "path": "/opt/hosts",
    "state": "absent"
}



6.管理软件包
EXAMPLES:
- name: install the latest version of Apache
  yum: name=httpd state=latest

- name: remove the Apache package
  yum: name=httpd state=absent

- name: install the latest version of Apache from the testing repo
  yum: name=httpd enablerepo=testing state=present

- name: install one specific version of Apache
  yum: name=httpd-2.2.29-1.4.amzn1 state=present

- name: upgrade all packages
  yum: name=* state=latest

- name: install the nginx rpm from a remote repo
  yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present

- name: install nginx rpm from a local file
  yum: name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present

- name: install the 'Development tools' package group
  yum: name="@Development tools" state=present
[root@eddy ~]# ansible eddy -m yum -a 'name=httpd state=present'
确认httpd已经安装,但不更新
[root@eddy ~]# rpm -qa|grep httpd
[root@eddy ~]# ansible eddy -m yum -a 'name=httpd state=present'
eddy | success >> {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: security\nSetting up Install Process\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.2.15-45.el6.centos will be installed\n--> Processing Dependency: httpd-tools = 2.2.15-45.el6.centos for package: httpd-2.2.15-45.el6.centos.x86_64\n--> Processing Dependency: apr-util-ldap for package: httpd-2.2.15-45.el6.centos.x86_64\n--> Running transaction check\n---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will be installed\n---> Package httpd-tools.x86_64 0:2.2.15-45.el6.centos will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package             Arch         Version                    Repository    Size\n================================================================================\nInstalling:\n httpd               x86_64       2.2.15-45.el6.centos       centos       829 k\nInstalling for dependencies:\n apr-util-ldap       x86_64       1.3.9-3.el6_0.1            centos        15 k\n httpd-tools         x86_64       2.2.15-45.el6.centos       centos        77 k\n\nTransaction Summary\n================================================================================\nInstall       3 Package(s)\n\nTotal download size: 921 k\nInstalled size: 3.1 M\nDownloading Packages:\n--------------------------------------------------------------------------------\nTotal                                           1.1 MB/s | 921 kB     00:00     \nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r  Installing : httpd-tools-2.2.15-45.el6.centos.x86_64                      1/3 \n\r  Installing : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                         2/3 \n\r  Installing : httpd-2.2.15-45.el6.centos.x86_64                            3/3 \n\r  Verifying  : httpd-2.2.15-45.el6.centos.x86_64                            1/3 \n\r  Verifying  : apr-util-ldap-1.3.9-3.el6_0.1.x86_64                         2/3 \n\r  Verifying  : httpd-tools-2.2.15-45.el6.centos.x86_64                      3/3 \n\nInstalled:\n  httpd.x86_64 0:2.2.15-45.el6.centos                                           \n\nDependency Installed:\n  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1                                        \n  httpd-tools.x86_64 0:2.2.15-45.el6.centos                                     \n\nComplete!\n"
    ]
}

[root@eddy ~]# rpm -qa|grep httpd
httpd-tools-2.2.15-45.el6.centos.x86_64
httpd-2.2.15-45.el6.centos.x86_64

[root@eddy ~]# ansible eddy -m yum -a 'name=httpd-2.2 state=present'
确认安装一个特定版本
ansible eddy -m yum -a 'name=httpd-2.2 state=last'
确认安装最新版本
[root@eddy ~]# ansible eddy -m yum -a 'name=httpd state=absent'
卸载一个已安装
[root@eddy ~]# ansible eddy -m yum -a 'name=httpd state=absent'
eddy | success >> {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: security\nSetting up Remove Process\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.2.15-45.el6.centos will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package      Arch          Version                        Repository      Size\n================================================================================\nRemoving:\n httpd        x86_64        2.2.15-45.el6.centos           @centos        2.9 M\n\nTransaction Summary\n================================================================================\nRemove        1 Package(s)\n\nInstalled size: 2.9 M\nDownloading Packages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r  Erasing    : httpd-2.2.15-45.el6.centos.x86_64                            1/1 \n\r  Verifying  : httpd-2.2.15-45.el6.centos.x86_64                            1/1 \n\nRemoved:\n  httpd.x86_64 0:2.2.15-45.el6.centos                                           \n\nComplete!\n"
    ]
}

7.服务管理
root@eddy ~]# ansible eddy -m service -a 'name=nginx state=running,started,stopped,restarted,reloaded'

8.搜索系统信息
[root@eddy ~]# ansible eddy -m setup
eddy | success >> {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.162.61.94",
            "112.124.120.242"
        ],
        "ansible_all_ipv6_addresses": [],
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "12/16/2014",
        "ansible_bios_version": "4.0.1",
        "ansible_cmdline": {
            "KEYBOARDTYPE": "pc",
            "KEYTABLE": "us",
            "LANG": "en_US.UTF-8",
            "SYSFONT": "latarcyrheb-sun16",
            "quiet": true,
            "rd_NO_DM": true,
            "rd_NO_LUKS": true,
            "rd_NO_LVM": true,
            "rd_NO_MD": true,
            "rhgb": true,
            "ro": true,
            "root": "UUID=94e4e384-0ace-437f-bc96-057dd64f42ee"
        },
        "ansible_date_time": {
            "date": "2015-11-18",
            "day": "18",
            "epoch": "1447825984",
            "hour": "13",
            "iso8601": "2015-11-18T05:53:04Z",
            "iso8601_micro": "2015-11-18T05:53:04.737741Z",
            "minute": "53",
            "month": "11",
            "second": "04",
            "time": "13:53:04",
            "tz": "CST",
            "tz_offset": "+0800",
            "weekday": "Wednesday",
            "year": "2015"
        },
        "ansible_default_ipv4": {
            "address": "X.X.X.X",
            "alias": "eth1",
            "gateway": "X.X.X.X",
            "interface": "eth1",
            "macaddress": "00:16:3e:00:40:1c",
            "mtu": 1500,
            "netmask": "X.X.X.X",
            "network": "X.X.X.X",
            "type": "ether"
        },
        "ansible_default_ipv6": {},
        "ansible_devices": {
            "xvda": {
                "holders": [],
                "host": "",
                "model": null,
                "partitions": {
                    "xvda1": {
                        "sectors": "41940992",
                        "sectorsize": 512,
                        "size": "20.00 GB",
                        "start": "2048"
                    }
                },
                "removable": "0",
                "rotational": "0",
                "scheduler_mode": "cfq",
                "sectors": "41943040",
                "sectorsize": "512",
                "size": "20.00 GB",
                "support_discard": "0",
                "vendor": null
            }
        },
        "ansible_distribution": "CentOS",
        "ansible_distribution_major_version": "6",
        "ansible_distribution_release": "Final",
        "ansible_distribution_version": "6.5",
        "ansible_domain": "",
        "ansible_env": {
            "CVS_RSH": "ssh",
            "G_BROKEN_FILENAMES": "1",
            "HOME": "/root",
            "LANG": "C",
            "LC_CTYPE": "C",
            "LESSOPEN": "|/usr/bin/lesspipe.sh %s",
            "LOGNAME": "root",
            "MAIL": "/var/mail/root",
            "PATH": "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
            "PWD": "/root",
            "SHELL": "/bin/bash",
            "SHLVL": "2",
            "SSH_CLIENT": "X.X.X.X 44220 XXXX",
            "SSH_CONNECTION": "X.X.X.X 44220 X.X.X.X XXXX",
            "USER": "root",
            "_": "/usr/bin/python"
        },
        "ansible_eth0": {
            "active": true,
            "device": "eth0",
            "ipv4": {
                "address": "X.X.X.X",
                "netmask": "X.X.X.X",
                "network": "X.X.X.X"
            },
            "macaddress": "00:16:3e:00:0f:62",
            "module": "xen_netfront",
            "mtu": 1500,
            "promisc": false,
            "type": "ether"
        },
        "ansible_eth1": {
            "active": true,
            "device": "eth1",
            "ipv4": {
                "address": "X.X.X.X",
                "netmask": "X.X.X.X",
                "network": "X.X.X.X"
            },
            "macaddress": "00:16:3e:00:40:1c",
            "module": "xen_netfront",
            "mtu": 1500,
            "promisc": false,
            "type": "ether"
        },
        "ansible_fips": false,
        "ansible_form_factor": "Other",
        "ansible_fqdn": "eddy",
        "ansible_hostname": "eddy",
        "ansible_interfaces": [
            "lo",
            "eth1",
            "eth0"
        ],
        "ansible_kernel": "2.6.32-431.23.3.el6.x86_64",
        "ansible_lo": {
            "active": true,
            "device": "lo",
            "ipv4": {
                "address": "X.X.X.X",
                "netmask": "X.X.X.X",
                "network": "X.X.X.X"
            },
            "mtu": 16436,
            "promisc": false,
            "type": "loopback"
        },
        "ansible_lsb": {
            "codename": "Final",
            "description": "CentOS release 6.5 (Final)",
            "id": "CentOS",
            "major_release": "6",
            "release": "6.5"
        },
        "ansible_machine": "x86_64",
        "ansible_memfree_mb": 138,
        "ansible_memory_mb": {
            "nocache": {
                "free": 761,
                "used": 233
            },
            "real": {
                "free": 138,
                "total": 994,
                "used": 856
            },
            "swap": {
                "cached": 0,
                "free": 0,
                "total": 0,
                "used": 0
            }
        },
        "ansible_memtotal_mb": 994,
        "ansible_mounts": [
            {
                "device": "/dev/xvda1",
                "fstype": "ext4",
                "mount": "/",
                "options": "rw,barrier=0",
                "size_available": 17495089152,
                "size_total": 21136797696,
                "uuid": "94e4e384-0ace-437f-bc96-057dd64f42ee"
            }
        ],
        "ansible_nodename": "eddy",
        "ansible_os_family": "RedHat",
        "ansible_pkg_mgr": "yum",
        "ansible_processor": [
            "GenuineIntel",
            "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz"
        ],
        "ansible_processor_cores": 1,
        "ansible_processor_count": 1,
        "ansible_processor_threads_per_core": 1,
        "ansible_processor_vcpus": 1,
        "ansible_product_name": "HVM domU",
        "ansible_product_serial": "8ffbe0b4-0f8e-4341-af50-6166468d70f6",
        "ansible_product_uuid": "8FFBE0B4-0F8E-4341-AF50-6166468D70F6",
        "ansible_product_version": "4.0.1",
        "ansible_python_version": "2.6.6",
        "ansible_selinux": false,
        "ansible_ssh_host_key_dsa_public": "AAAAB3NzaC1kc3MAAACBAJKuO5QUWmpOv5tVL24HJWQkASwuLnqxISxLZlfUakbUtOOzZPqJCdyRCjrs+8CtE5yfrq2BdIA4KRmXNJiz7attp6HHz0zDzAeBbUO/ttt3SpeIhEzX1e5pUorinoIpD5K1DghLaDk9s1nY+pHyxFkI5hrtPF35PbKZDP38WtRvAAAAFQDvcLJa2GAhGoGmcVfi9F0lnkgGtwAAAIBZCo1E/LL5SBPpy2gcCH00/VXyvWkRKuHpcTJc6YSlvaWttOLqQf21an80EoTGvVJxThKKjIOf1lXFqtrqkS2EVIc2cuDOVszC70NqNw0ou8L9VOiLDXHuXAElar/Ic3sgQhPpzzUWDzMIBB6YLqyWKfYorMSEAWP0/bSNSJYB9gAAAIA2qLHzF52/scTIscC60RCgE2K3YYPCI4p61YNmYuNgyjGeSVH+4vD1JI4czbxKbLZHqpnbN3LrMuQg/6MjfFkUeH5X5RmtUCd5hlPsky06Si29ltrFyDVXnykr4/g+g6P7T7U8ojgRnA8mvrcQthizZG9aflk3OzgYhVQSUJiAbA==",
        "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAABIwAAAQEAprbgXfwUE2ZIQ1GsO9fOFb46oZGJ4V1+7nthfFvof8dbS1ll8cTxzvC6RPbSmZFwwbA47jt6wf2fTlTW7iHcR7atx6SPj5l0BODFqw6+2q4PxebCN65XuigX8p+gphGhe5exh9i6sPl7zRGGPeKdLNnZp17DyqumnsB6zRiWU24QmFMepldlgDvK8ETVYHAD+/GjKYrqfJYb6u5+F8VR7FsCfuNGTC41dVt4vGx8xdIboRbDnrzODm16rWpDGf1cNmfjjaCVuR9bF1ZmS89Y94BTVkwXgpICYmL7uUS2TaDHtM9MJ5Az+j/k+YnSnS0a8LcTljXIhqi5HgFH3U61Nw==",
        "ansible_swapfree_mb": 0,
        "ansible_swaptotal_mb": 0,
        "ansible_system": "Linux",
        "ansible_system_vendor": "Xen",
        "ansible_user_dir": "/root",
        "ansible_user_gecos": "root",
        "ansible_user_gid": 0,
        "ansible_user_id": "root",
        "ansible_user_shell": "/bin/bash",
        "ansible_user_uid": 0,
        "ansible_userspace_architecture": "x86_64",
        "ansible_userspace_bits": "64",
        "ansible_virtualization_role": "guest",
        "ansible_virtualization_type": "xen",
        "module_setup": true
    },
    "changed": false
}
[root@eddy ~]# ansible eddy -m setup --tree /tmp/facts
把信息以主机名的方式存储到/tmp/facts目录下
[root@eddy ~]# ansible eddy -m setup -a 'filter=ansible_*_mb'
搜索内存信息
eddy | success >> {
    "ansible_facts": {
        "ansible_memfree_mb": 136,
        "ansible_memory_mb": {
            "nocache": {
                "free": 760,
                "used": 234
            },
            "real": {
                "free": 136,
                "total": 994,
                "used": 858
            },
            "swap": {
                "cached": 0,
                "free": 0,
                "total": 0,
                "used": 0
            }
        },
        "ansible_memtotal_mb": 994,
        "ansible_swapfree_mb": 0,
        "ansible_swaptotal_mb": 0
    },
    "changed": false
}

[root@eddy ~]# ansible eddy -m setup -a 'filter=ansible_eth[0-9]'
搜索网卡信息
eddy | success >> {
    "ansible_facts": {
        "ansible_eth0": {
            "active": true,
            "device": "eth0",
            "ipv4": {
                "address": "X.X.X.X",
                "netmask": "X.X.X.X",
                "network": "X.X.X.X"
            },
            "macaddress": "00:16:3e:00:0f:62",
            "module": "xen_netfront",
            "mtu": 1500,
            "promisc": false,
            "type": "ether"
        },
        "ansible_eth1": {
            "active": true,
            "device": "eth1",
            "ipv4": {
                "address": "X.X.X.X",
                "netmask": "X.X.X.X",
                "network": "X.X.X.X"
            },
            "macaddress": "00:16:3e:00:40:1c",
            "module": "xen_netfront",
            "mtu": 1500,
            "promisc": false,
            "type": "ether"
        }
    },
    "changed": false
}


共有 人打赏支持
粉丝 19
博文 132
码字总数 185568
×
eddy_linux
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: