Ansible playbooks常用模块案例操作
打开git bash 连接ansible服务器,然后进入deploy用户
#ssh
进入python3.6虚拟环境
#su - deploy
#source .py3-a2.5-env/bin/activate
加载ansible 2.5版本
#source .py3-a2.5-env/ansible/hacking/env-setup -q
验证ansible加载效果
#ansible-playbook --version
1、File模块
登录到目标主机进行预配置工作
#ssh
创建两个系统用户
# useradd foo
# useradd deploy
登出,回到ansible的主机,进入到test_playbooks目录。编辑主任务文件,添加测试任务。保存退出
# vi roles/testbox/tasks/main.yml
?
- name: create a file # 创建文件file file: ‘path=/root/foo.txt state=touch mode=0755 owner=foo group=foo‘ #path为文件路径 #state为所用命令 #mode 为文件权限 #owner 为设置的系统用户名称 #group 为宿主
执行测试任务
# ansible-playbook -i inventory/testenv ./deploy.yml
?
查看文件是否创建成功
# ssh ls -l /root/foo.txt
创建安装nginx需要的文件,复制下面的脚本,进行保存
# vi roles/testbox/files/nginx.repo
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
2、Copy模块
先创建一个files目录,在目录下创建一个脚本文件,添加一下内容,保存退出
# mkdir roles/testbox/files
# vi roles/testbox/files/foo.sh
echo "This is a test script"
编辑主任务配置文件,保存退出。
# vi roles/testbox/tasks/main.yml
?
- name: copy a file copy: ‘remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes‘ #remote_src 定义当前拷贝任务是将ansible本地server文件传送到目标主机中 #src 本地文件 传送 #dest 目标主机文件 #mode 设置文件权限 #force 定义拷贝任务强制执行
编辑好文件之后,执行任务
# ansible-playbook -i inventory/testenv ./deploy.yml
?
3、Stat模块、Debug模块
编辑主任务配置文件,添加以下内容
# vi roles/testbox/tasks/main.yml
# 获取远程foo.sh的文件状态信息 - name: check if foo.sh exists stat: ‘path=/root/foo.sh‘ register: script_stat # 将stat文件信息,放到when的判断语句中,如果判断成功,dubug输出foo.sh exists - debug: msg="foo.sh exists" when: script_stat.stat.exists
编辑好文件之后,执行任务
# ansible-playbook -i inventory/testenv ./deploy.yml
?
4、Command/Shell模块
编辑主任务配置文件,添加以下内容
# vi roles/testbox/tasks/main.yml
# 远程执行foo.sh脚本 - name: run the script command: ‘sh /root/foo.sh‘
编辑好文件之后,执行任务
# ansible-playbook -i inventory/testenv ./deploy.yml
?
5、Template模块、Packaging模块、Service模块
添加一些参数到testenv的文件当中,添加如下参数
# vi vi inventory/testenv
?
server_name=test.example.com port=80 user=deploy worker_processes=4 max_open_file=65505 root=/www
创建templates目录,然后创建一个nginx.conf.j2的模块文件,添加配置信息
# mkdir roles/testbox/templates
# vi roles/testbox/templates/nginx.conf.j2
# For more information on configuration, see: user {{ user }}; # user变量 worker_processes {{ worker_processes }}; # 变量 error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections {{ max_open_file }}; #变量 } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ ‘$status $body_bytes_sent "$http_referer" ‘ ‘"$http_user_agent" "$http_x_forwarded_for"‘; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # Load config files from the /etc/nginx/conf.d directory # The default server is in conf.d/default.conf #include /etc/nginx/conf.d/*.conf; server { listen {{ port }} default_server; # 端口变量 server_name {{ server_name }}; #服务器名称变量 #charset koi8-r; #access_log logs/host.access.log main; location / { root {{ root }}; # root变量 index index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }
编辑主任务配置文件,添加以下下内容
# vi roles/testbox/tasks/main.yml
# 将模板写入目标主机配置文件 - name: write the nginx config file template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/conf.d/default.conf # yum安装nginx - name: ensure nginx is at the latest version yum: pkg=nginx state=latest # 启动nginx服务 - name: start nginx service service: name=nginx state=started
编辑好文件之后,执行任务
# ansible-playbook -i inventory/testenv ./deploy.yml
?
检查nginx.conf.j2文件的参数变量,是否写入nginx主配置文件
# ssh cat /etc/nginx/conf.d/default.conf
?
检查远程主机nginx是否启动
# ssh ps -ef | grep nginx
?
main.yml文件
- name: Print server name and user to remote testbox shell: "echo ‘Currently {{ user }} is logining {{ server_name }}‘ > {{ output }}" - name: create a file file: ‘path=/root/foo.txt state=touch mode=0755 owner=foo group=foo‘ - name: copy a file copy: ‘remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes‘ - name: check if foo.sh exists stat: ‘path=/root/foo.sh‘ register: script_stat - debug: msg="foo.sh exists" when: script_stat.stat.exists - name: run the script command: ‘sh /root/foo.sh‘ - name: Create a directory if it does not exist file: ‘path=/etc/nginx state=directory mode=0755‘ - name: write the nginx config file template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf - name: copy a file copy: ‘remote_src=no src=roles/testbox/files/nginx.repo dest=/etc/yum.repos.d/nginx.repo mode=0644 force=yes‘ - name: ensure nginx is at the latest version yum: pkg=nginx state=latest - name: start nginx service service: name=nginx state=started
- name: Print server name and user to remote testbox shell: "echo ‘Currently {{ user }} is logining {{ server_name }}‘ > {{ output }}" # 远程创建文件 - name: create a files file: ‘path=/root/foo.txt state=touch mode=0755 owner=foo group=foo‘ # 将本地的文件拷贝到远程主机 - name: copy a files copy: ‘remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes‘ # 获取文件状态 - name: check if foo.sh exists stat: ‘path=/root/foo.sh‘ register: script_stat # 判断文件是否存在 - debug: msg="foo.sh exists" when: script_stat.stat.exists # 远程执行脚本文件 - name: run the script command: ‘sh /root/foo.sh‘ # 创建一个nginx的目录 - name: Create a directory if it does not exist file: ‘path=/etc/nginx state=directory mode=0755‘ # 从本地模板中写入nginx.conf文件 - name: write the nginx config file template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf # 拷贝本地nginx安装需要的脚本 - name: copy a file copy: ‘remote_src=no src=roles/testbox/files/nginx.repo dest=/etc/yum.repos.d/nginx.repo mode=0644 force=yes‘ # yum安装nginx - name: ensure nginx is at the latest version yum: pkg=nginx state=latest # 启动nginx - name: start nginx service service: name=nginx state=started