Ansible 2.0@r_rudiएࢁ࢙ (πΩϊϫגࣜձࣾ)
View Slide
͓લͩΕΑ• एࢁ ࢙@r_rudi / πΩϊϫגࣜձࣾ CTO• WebΞϓϦ։ൃ͔Βӡ༻·Ͱ• ීஈgolangͰWebΞϓϦॻ͍ͯ·͢• ஶॻʮೖAnsibleʯ• Amazonʹͯൢചத(ిࢠॻ੶)
Ansible 2.0ͱ• ࠷৽1.9.3 (1.9.4͕rc2)• 1ܥͱฏߦͯ͠2ܥ͕͍ؒ։ൃ͞Ε͍ͯͨ• গͳ͘ͱࠓ2݄Ҏ߱• ෦ߏΛ΄΅Ұ͔Βॻ͖ͨ͠• ίʔυ໊: ”Over the Hills and Far Away” (Led Zeppelin)
2.0Ͱ࠷ॏཁͳ• ࠓ͜Ε͚ͩΛ֮͑ͯؼͬͯԼ͍͞ • ैདྷͷplaybookͱ100%ޓੑ͕͋Γ·͢• طଘͷplaybookΛม͑Δඞཁ͋Γ·ͤΜΛɺࢦ͍ͯ͠·͢
Ճػೳ
block• taskΛ͞ΒʹׂͰ͖·͢tasks:- block:- yum: name={{ item }} state=installedwith_items:- httpd- memcached- template: src=templates/src.j2 dest=/etc/foo.conf- service: name=bar state=started enabled=Truewhen: ansible_distribution == 'CentOS'
blockʹΑΔྫ֎ॲཧtasks:- block:- debug: msg='࣮ߦ͞Ε·͢'- fail: msg=“fail!!!”- debug: msg=‘Τϥʔ͕ى͖ΔͨΊɺ࣮͜͜ߦ͞Ε·ͤΜ'rescue:- debug: msg=‘Τϥʔ͕͓͖·ͨ͠'- fail: msg=“rescueͰfail!!”- debug: msg='࣮͜͜ߦ͞Ε·ͤΜ'always:- debug: msg="ඞ࣮ͣߦ͞Ε·͢"
blockͰઃఆͷ্ॻ͖- hosts: remote_user: someuser tasks:- block:- shell: whoami - shell: touch /etc/hosts become_user: root
strategy plugin• λεΫ࣮ߦઓུΛมߋ͢Δ• linear: શϗετͷ࣮ߦऴྃΛͭ(v1ͱಉ͡)• free: ͨͣʹͲΜͲΜ࣮ߦ͍ͯ͘͠• pluginͳͷͰɺՃՄೳ
includeͰwith͕͑ΔΑ͏ʹ• includeมΛ্ॻ͖Ͱ͖͕ͨɺwithʹΑΔ܁Γฦ͠Ͱ͖ͳ͔ͬͨɻtasks:- include: foo.yml some_var={{ item }} with_items: [‘a’, ‘b’, ‘c’]
includeͰมΛ͏• ैདྷมల։͕ग़དྷͳ͔ͬͨ• distributionຖʹwhenΛॻ͘ΑΓߦઅ- include: included_{{ inventory_hostname }}.yml
meta: refresh_inventory• inventoryϑΝΠϧ࠷ॳͷҰճ͔͠ಡΈࠐ·ͳ͔ͬͨ• dynamic inventoryͳͲͰʹtasks: - meta: refresh_inventory
taskϨϕϧͰͷม• taskϨϕϧͰఆٛɾ্ॻ͖͕Մೳʹvars:aa: "AA"tasks:- debug: msg="{{ aa }}"- debug: msg="{{ aa }}"vars:aa: “BB"- debug: msg="{{ aa }}”-> AA-> BB-> AA
Ϟδϡʔϧ/pluginͷՃ• 140Ҏ্ͷ৽نϞδϡʔϧͷՃ• openstackɺdockerɺzabbixɺvmware…• inventory, connection pluginՃ• serf, consul, dockerͳͲ• callback plugin͕ಉࠝɻansible.cfgʹॻ͚ͩ͘Ͱ༗ޮԽ(callback_whitelist)
ྫ: profile_tasks plugin[defaults]callback_whitelist = profile_tasksTASK [debug msg={{ aa }}] ******************************************************Monday 14 September 2015 16:00:20 +0900 (0:00:00.074) 0:00:00.162 ******ok: [localhost] => {"changed": false,"msg": "AA"}Monday 14 September 2015 16:00:20 +0900 (0:00:00.078) 0:00:00.241 ******===============================================================================TASK: debug msg={{ aa }} ------------------------------------------------ 0.08sTASK: debug msg={{ aa }} ------------------------------------------------ 0.08sTASK: debug msg={{ aa }} ------------------------------------------------ 0.07s
มߋ෦
෦ߏͷཧ• มཧ (VariableManager)• ैདྷมͷཧʹ͕ଟ͔ͬͨ• มల։ͷॱং͕͔ΓͮΒ͔ͬͨ• pluginߏͷཧ• ܧঝߏͷཧ
෦APIͷมߋ• ࣗ࡞pluginʹଟগͷมߋ͕ඞཁ• lookupLookupBase classΛܧঝ͢ΔΑ͏ʹ• callback ‘v2_’ Λ͚Δ• connection΄ͱΜͲͷਓ͕࡞͍ͬͯͳ͍ͣ• filterมߋͳ͠
ࣗ࡞Ϟδϡʔϧ• Ҿͷ͠ํ͕มΘͬͨͷͰɺมߋ͕ඞཁʹͳΓ·͢• http://qiita.com/h-hirokawa/items/8eecd64d01ad80175179
ࡉ͔ͳมߋ• templateͰboolΛจࣈܕʹม͍͕ͯͨ͠ɺมߋ͠ͳ͍Α͏ʹ• ۭͷมͱNoneΛۭനʹม͍͕ͯͨ͠ɺมߋ͠ͳ͍Α͏ʹ• jinja2ͰͷΤεέʔϓͰ \\ ͱ͍ͯͨ͠ͷΛ \ ʹ• YAMLϑΝΠϧதͰ > Λ͍ͬͯͨ߹ʹ࠷ޙͷվߦΛͦͷ··͢Α͏ʹ
python 3ରԠ• ೦ͳ͕ΒೖΓ·ͤΜͰͨ͠• ͨͩ͠ɺ४උਐΊ͍ͯΔ༷ࢠ• python 3ରԠPRΛड͚ೖΕ͍ͯΔ
·ͱΊ• Ansible 2.0ɻ·ͩग़ͯ·ͤΜɻɻɻ• playbookͷޓੑ 100%• 140Ҏ্ͷϞδϡʔϧͷՃ• blockʹΑΔྫ֎ॲཧͷՃ• ࣗ࡞ͷpluginʹमਖ਼͕ඞཁ
એ: PythonΤϯδχΞཆಡຊ• AnsibleͷΛॻ͍ͯ·͢• 9݄17ʹansibleষͷಡॻձΛΓ·͢• http://pymook.connpass.com/• ͋Β͔͡ΊಡΜͰ͖ͯؾʹͳͬͨɺΘ͔Βͳ͔ͬͨͱ͜ΖΛஶऀʹฉ͘ձͰ͢