По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Когда вы только начинаете свой путь в IT, естественно и правильно сфокусироваться на изучении языков программирования, стремиться к сертификатам и пополнению портфолио новыми проектами. Но быть выдающимся специалистом —  не значит только лишь блестяще владеть техническими навыками. Если вы хотите подняться на новую ступень карьерной лестницы, нужно продемонстрировать нечто большее, чем просто умение писать код. Исследования в области карьерного образования показывают, что работодатели признают важность софт-скиллов при приеме на работу. Но есть загвоздка: хоть большинство работодателей и согласны с важностью софт-скиллов, мало кто может ответить, какие именно из них критически важны.  Наличие софт-скиллов означает быть доступным, приятным, надежным и заслуживающим доверия – по сути, тем, с кем другим людям нравится работать и о котором они хотят узнать больше. Это открывает вам двери для новых возможностей. В этой статье перечислим 5 наиболее значимых софт скиллов для программистов, а также расскажем, на что обратить внимание при развитии этих навыков. Что такое софт-скиллы Софт-скиллы не связаны с прямыми трудовыми обязанностями сотрудника. В ИТ — это навыки, которые не имеют прямого отношения к разработке или тестированию, но все же необходимы для успешной работы в команде. Люди часто ошибочно приравнивают софт-скиллы к умению общаться, но это не всегда так. Вообще софт-скиллы делятся на две категории: общение (межличностное общение и эмоциональный интеллект) и постановка целей (лидерство, самоконтроль, управление временем). Зачем все это программисту, если его основная задача — написание кода? Самый минимум для каждого профи — это умение эффективно общаться с коллегами. Сегодня большинство продуктов создаются командами, поскольку в одиночку разработать успешный и прибыльный проект практически невозможно. Да, вы можете вложить свой талант, время и усилия, работая без посторонней помощи. Но шансы на успех будут намного выше, если вы будете работать с другими специалистами. ? Быть командным игроком без навыков межличностного общения (умения задавать вопросы, слушать и аргументировать свою точку зрения) практически невозможно. Программистам также нужны софт-скиллы, чтобы планировать свое время, ставить эффективные цели и управлять своими эмоциями.? ? Рано или поздно вы, вероятно, начнете думать о карьерном росте: с каждой новой ступенькой значение soft skills возрастает. Вы просто не сможете получить должность руководителя группы или менеджера без лидерских качеств, эмоционального интеллекта или навыков управления конфликтами.  У многих людей эти навыки не появятся сами по себе – их нужно начинать развивать уже сейчас. И к развитию софт-скиллов следует относиться не менее серьезно, чем к хард-скиллам. Итак, о каких именно навыках идет речь? Давайте разберемся. Коммуникация Программист — это, в первую очередь, технический специалист. Согласитесь, что без специальных знаний коллега без аналогичных знаний просто не поймет, чем вы занимаетесь. И здесь на сцену выходит коммуникативный навык — софт-скилл, который поможет успешно обсуждать свою работу с командой, менеджерами проектов и другими отделами.  Обмен идеями и фидбеком — естественная часть командной работы, но чтобы прийти к успеху в переговорах, вам нужно уметь формулировать свои идеи и относиться к коллегам с уважением. Два профессионала с противоположными идеями должны не спорить, а дискутировать, а для этого необходим эмоциональный интеллект. Коммуникация в рабочих вопросах требует непредвзятости и готовности слушать — в конце концов, чужая идея и правда может оказаться лучше вашей, и это нормально. Единственный способ понять это — переключиться с продвижения собственных предположений на поиск рабочего решения. В бизнесе это часто называют «политикой победы лучших идей» или громоздким термином « меритократия идей ».  Креативность На первый взгляд кажется, что креативность нужна лишь в работе творческих специалистов — художников, дизайнеров и контентщиков. Что тут может предложить программист? На самом деле дела обстоят так: работодатель нанимает вас как профи потому, что вы можете предложить компании что-то уникальное.  Какой бы шаблонной задачей вы не занимались, помните, что вы не просто AI, который может воспроизвести все решения, описанные в учебниках. Вы — классный специалист, который может усовершенствовать любую технологию и придумать нестандартный выход из самой сложной ситуации. Это и есть софт-скилл, который называется креативностью. Найдите возможность творить в своей сфере — и вы поймете, как этот навык повышает ваши шансы на должность мечты. Сотрудничество Расти в карьере — цель многих разработчиков, но важно соблюдать баланс между своими интересами и и интересами команды. Навык сотрудничества также связан с «политикой лучших идей», ведь открытый, дружелюбный специалист может стать той важной точкой, в которой, как в идеальном блюде, сойдутся мысли его команды, собственные идеи и конструктивная критика руководства. Да, в некоторых случаях это означает, что для реализации выберут не вашу идею или решение. Но глобально навыки общения и командной работы принесут только пользу вашей карьере. Если ваша цель — новые грейды и зарплата, роль руководителя может запросто стать вашим будущим. А это значит, что умение слушать, принимать чужую точку зрения и раскрывать сильные стороны своей команды — ключевые навыки. Эмпатия и эмоциональный интеллект Эмпатия — это умение понять, что другой человек чувствует в данный момент. Софт-скиллы программиста начинаются с понимания человеческих взаимодействий, а эмоциональный интеллект играет ключевую роль в этом процессе. Эмпатия, как и коммуникация, помогает понимать точку зрения людей, не связанных с разработкой, и совместно находить решения проблем. Разработчики также должны понимать нужды конечных пользователей, так как изменение требований является обычной практикой в Agile-разработке. Обладая высоким эмоциональным интеллектом, вы сможете: сохранять спокойствие, когда вы сталкиваетесь с непредвиденными обстоятельствами; сохранять фокус на достижении целей организации; понимать проблемы, с которыми могут столкнуться коллеги, и оказывать им помощь. 5. Тайм-менеджмент  Тайм-менеджмент — важнейший навык, когда дело касается работы в IT. Как правило, у программистов есть заинтересованные люди на разных сторонах проекта — и руководители, и заказчики, и конечные пользователи, и PM’ы — и всем важно увидеть результат в срок. Грамотная организация времени помогает сосредоточиться на важных целях и приоритетах, что сделает работу более целенаправленной и эффективной. Неочевидный бонус тайм-менеджмента состоит в том, что когда мы управляем своим временем эффективно, у нас есть больше свободы для отдыха, релаксации, хобби и личного развития — а это повышает качество жизни и хорошо влияет на работу. Что учесть при прокачке софт-скиллов Важно понимать, что софт-скиллы ничем не отличаются от любых других навыков. Вы должны практиковать их регулярно, если хотите прийти к совершенству, и может пройти некоторое время, прежде чем они начнут приносить свои плоды.  Первый шаг к самосовершенствованию — это оценка имеющихся у вас навыков и областей, в которых вы можете вырасти. Подумайте о своей эффективности на рабочем месте и составьте список способностей, которые вы хотите прокачать. Допустим, проблема в том, что вы не всегда четко излагаете свою позицию. В результате между вами и вашими коллегами часто возникают недопонимания, что замедляет совместную работу. Это может привести к срыву сроков, конфликтам и финансовым потерям. «Почему» ясно: вам нужно работать над этим навыком ради своей команды и своей компании. Беспристрастный взгляд коллеги или руководителя также поможет вам оценить ваш уровень софт-скиллов. Попросите кого-нибудь, с кем вы работаете, проанализировать вашу работу — и возьмите конструктивную критику на заметку. Помните, что активное применение новых навыков жизненно важно для достижения цели. Например, если вы хотите лучше решать проблемы, вы можете добровольно взять на себя управление сложным проектом. Если вы хотите лучше управлять своим временем, вы можете попрактиковаться в учете времени и понять, сколько времени вы тратите на каждую задачу.  Заключение  Поскольку IT — одна из самых высокооплачиваемых сфер, спрос на разработчиков программного обеспечения постоянно растут. По этой причине кандидаты должны обладать различными техническими и нетехническими навыками, которые следует учитывать в работе.  При выборе между двумя кандидатами с одинаковыми хард-скиллами предпочтение будет отдано кандидату, который также обладает уверенными софт-скиллами. Выгоднее брать на работу человека, который умеет брать на себя ответственность, любит проявлять инициативу, руководить процессом, умеет общаться с коллективом и хорошо распределять время.    
img
Использование REST API является полезной функцией для реализации ваших сценариев. Вы можете получить доступ к новым функциям, а также расширить возможности создания новых, более продвинутых сценариев. Опыт многих пользователей показывает, что, когда начинаешь использовать REST API в скриптах, то чувствуешь себя довольно неуклюже и непривычно. В этой заметке мы обсудим: Что такое REST API Как читать документацию Как использовать API REST с PowerShell Некоторые советы и подсказки, как облегчить и улучшить практику Что такое "REST"? REST, или RESTful API, это API, который использует HTTP запросы для получения, добавления, удаления или манипулирования данными в различных сервисах. Как правило, то, что нужно сделать с данными, решается тем, какой HTTP-метод вы используете. Вот краткий список методов HTTP и их применение в REST API: GET-Read POST-Create PATCH-Partial update/modify PUT-Update/replace DELETE-Remove Данные, которые возвращает API REST, обычно представляются в формате JSON. Теперь давайте начнём с нашего первого API запроса! Что такое API Работа с документацией Для использования различных API REST необходимо научиться читать и интерпретировать документацию. К счастью, если вы знаете, как читать один тип документации, вы сможете быстро научиться читать другие. В этой статье мы используем petstore.swagger.io, так как он использует популярный фреймворк Swagger, который довольно часто используется в разработке. На предыдущем рисунке показана наиболее важная информация о конечных точках REST API: HTTP-метод-GET/POST/DELETE и т.д. URL-адрес, связанный с конечной точкой REST API (Базовый URL, как правило, представлен в верхней части страницы документации) Краткое описание Подробности Первая страница документации просто замечательная, и, как правило, с помощью этой информации можно выполнить большинство запросов, требующих использования метода HTTP GET. Но такие методы, как POST и SET, обычно требуют, чтобы вы щелкнули и развернули строку, чтобы получить больше информации. Если вы нажмете на одну из строк, то получите информацию, которая выглядит так: Здесь мы представили конечную точку REST, которая может создать новый объект pet. Здесь указывается, как должен выглядеть JSON, предоставленный в теле POST, и какой тип контента он принимает. Другие конечные точки REST указывают, что это за параметры, каким типом данных они должны быть и т.д. Это основы для чтения документации. Теперь, когда общие принцип более-менее ясны, пора начать использовать REST API с PowerShell. Получение первых данных (GET) Используя REST API с PowerShell обычно довольно просто, используется встроенные командлеты, таким образом, нет необходимости в дополнительных модулях. Мы собираемся извлечь данные с помощью метода GET в конечной точке /pet/{ petId}. Если развернуть конечную точку /pet/{ petId} в документации, можно увидеть, что {petId} на самом деле является параметром, который принимает целое число. Это делает URL-адрес для выборки объекта pet с идентификатором 1: https://petstore.swagger.io/v2/pet/1 В документации SWAGGER REST API обычно отображается базовый URL-адрес в верхней части страницы. Теперь начнем с PowerShell. Откройте окно терминала и введите: PS51 > Invoke-RestMethod -Method GET -ContentType "application/json" -Uri "https://petstore.swagger.io/v2/pet/1" id : 1 category : @{id=0; name=string} name : doggie photoUrls : {string} tags : {@{id=0; name=string}} status : available Поскольку в ответе от сервера возвращается тип содержимого "application/json" используется метод Invoke-RestMethod, который автоматически преобразует возвращаемый JSON в объект. Ошибка 404 Not found, как правило, означает, что объект не найден или URL-адрес введен неправильно. Итак, мы выполнили первый вызов REST API. Но возможности метода GET для получения данных довольно ограничены, так что давайте создадим что-нибудь с помощью метода POST. Создание объекта методом POST Метод POST чаще всего используется для создания, например, пользователей или записей и т.д. Запрос POST отправляет BODY, содержащий информацию, конечной точке REST, обычно в формате JSON, но он также может быть в виде формы с кодировкой URL. Вы узнаете, как создать объект JSON, который можно отправить в конечную точку/pet. Можно увидеть, как должен выглядеть JSON, если развернуть строку POST/pet в документации. Начнем с создания хэштаблицы, который можно преобразовать в объект JSON. Raw JSON следует избегать в скриптах PowerShell, поскольку он ограничивает его возможности. $Body = @{ id = 19 category = @{ id = 45 name = "Whatever" } name = "Dawg" photoUrls = @( "string" ) tags = @( @{ id = 0 name = "string" } ) status = "available" } Если вам трудно создать хештаблицу, который преобразуется в нужный JSON, установите модуль PsdKit и используйте команду $ JsonString | ThreadTo-Psd Теперь имеется хэш-таблица, которую можно преобразовать в строку JSON и POST в конечную точку/pet: $JsonBody = $Body | ConvertTo-Json $Uri = "https://petstore.swagger.io/v2/pet" Invoke-RestMethod -ContentType "application/json" -Uri $Uri -Method Post -Body $JsonBody id : 19 category : @{id=45; name=Whatever} name : Dawg photoUrls : {string} tags : {@{id=0; name=string}} status : available При создании объекта он обычно получает созданный для подтверждения объект. Использование DELETE. Метод DELETE используется для удаления данных, а применение очень схоже с методом GET. PS51 > Invoke-RestMethod -Method DELETE -ContentType "application/json" -Uri "https://petstore.swagger.io/v2/pet/1" Только убедитесь, что не удалите ничего важного Использование PUT Метод PUT используется для обновления данных. Это делается аналогично методу POST путем представления полного или частичного объекта JSON: PS51> $Body = [PSCustomObject]@{ id = 19 name = "Dawg with a new name" } PS51> $JsonBody = $Body | ConvertTo-Json PS51> $Uri = "https://petstore.swagger.io/v2/pet" PS51> Invoke-RestMethod -ContentType "application/json" -Uri $Uri -Method PUT -Body $JsonBody id name photoUrls tags -- ---- --------- ---- 19 Dawg with a new name {} {} Обычно API REST возвращает объект JSON с использованными и/или обновленными данными. Можно увидеть, что объект был обновлен с помощью метода GET: PS 51> Invoke-RestMethod -ContentType "application/json" -Uri "https://petstore.swagger.io/v2/pet/19" id : 19 category : @{id=45; name=Whatever} name : Dawg with a new name photoUrls : {string} tags : {@{id=0; name=string}} status : available Создание функций Писать эти команды каждый раз вручную может стать довольно утомительным и на самом деле не масштабируемым. Если мы вызываем конечную точку несколько раз, то лучше создать для нее функцию. Это довольно просто и нужно написать всего несколько строк: Function Get-PetstorePet { [cmdletbinding()] param( # Id of the pet [Parameter(Mandatory,ValueFromPipeline)] [int]$Id ) Begin{} Process{ $RestMethodParams = @{ Uri = "https://petstore.swagger.io/v2/pet/$Id" ContentType = "application/json" Method = "GET" } Invoke-RestMethod @RestMethodParams } End{} } После создания функции ее можно вызвать в сценарии: PS51> Get-PetstorePet -Id 1 id name photoUrls tags -- ---- --------- ---- 1 Doggie {http://picture.url} {} Это можно сделать и для метода POST для создания нового объекта pet в Petstore: Function Add-PetstorePet { [cmdletbinding()] param( # Id of the pet [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [int]$Id, # Name of the pet [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [string]$Name, # Status of the pet (available, sold etc) [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [string]$Status, # Id of the pet category [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [int]$CategoryId, # Name of the pet category [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [string]$CategoryName, # URLs to photos of the pet [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [string[]]$PhotoUrls, # Tags of the pets as hashtable array: @{Id=1;Name="Dog"} [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [Hashtable[]]$Tags ) Begin{} Process{ $Body = @{ id = $Id category = @{ id = $CategoryId name = $CategoryName } name = $Name photoUrls = $PhotoUrls tags = $Tags status = $Status } $BodyJson = $Body | ConvertTo-Json $RestMethodParams = @{ Uri = "https://petstore.swagger.io/v2/pet/" ContentType = "application/json" Method = "Post" Body = $BodyJson } Invoke-RestMethod @RestMethodParams } End{} } И вызов этой функции PowerShell намного упрощает задачу: PS51> $AddPetStorePetsParams = @{ Id = 44 Name = "Birdie" Status = "available" CategoryId = 50 CategoryName = "Hawks" PhotoUrls = "https://images.contoso.com/hawk.jpg" Tags = @( @{ Id=10 Name="Not eagles" } ) } PS51> Add-PetStorePet @AddPetStorePetsParams id : 44 category : @{id=50; name=Hawks} name : Birdie photoUrls : {https://images.domain.com/hawk.jpg} tags : {@{id=0}} status : available Возможно, что многие модули, которые вы ежедневно используете, состоят из функций, который за кулисами используют REST API. Заключение Обучение работы с REST API, главным образом основано на чтении документации. Мы использовали документацию на основе SWAGGER в этом посте, так как она представляет, как могут выглядеть другие стили документации. Кроме того, преобразование вызовов API в функцию может сэкономить много времени, упростить работу и очистить сценарии.
img
Ansible один из двух (наряду с SaltStack) наиболее популярных программных комплексов третьей волны, которые позволяют удалённо управлять конфигурациями. Тем не менее, в сегменте сетевого оборудования лидирует наш сегодняшний герой (если о ПО можно так сказать). В первую очередь это вызвано тем, что Ansible не поставит перед пользователем задачи устанавливать агент на хостинги, требующие от него управления. Тем паче ежели Ваш аппарат взаимодействует с ними через CLI, то Ansible это то, что доктор прописал. Одним выстрелом три "электронных зайца" Вообще, прежде чем знакомить уважаемых читателей со сценарием работы в данном программном комплексе, позвольте перечислить несколько его достоинств: Ansible позволяет параллельно подключать по SSH к устройствам (пользователь может сам определить их число). Ansible может передавать задачи на подключённые машины. Ansible способен разбивать машины, входящих в систему, на подгруппы и передавать специальных задачи для каждой подгруппы. Конечно, указаны не все достоинства Ansible. Просто в данных 3 пунктах, как мне кажется, отражена основная суть работы в данной среде. Выполняя эти три задачи, система автоматически освобождает Вас от головной боли по делегированию задач и функций в компании. Время деньги, как говорится. Сценарии Ну и переходим к основному блюду нашего материала - сценариям (playbook). Они состоят из двух частей набора команд для выполнения (play) и конкретных команд (task). Они выполняются друг за другом. Все записи данных осуществляются с помощью YAMLа. К несомненным плюсам его использования следует отнести то, что он гораздо лучше воспринимается людьми, нежели тот же самый JSON. Ежели Вы больше привыкли Вы к Python, то тут у Вас не возникнет проблем с адаптацией, так как синтаксис у них схожий. А вот так происходит процесс написания сценария (комментарии даны построчно к выводу): Имя сценария обязательный элемент для любого сценария; Сценарий применяется к машинам в подгруппе cisco-routers; Выключение режима сбора событий в конкретной машине (если не выключить данный режим, то система потратит много времени на решение ненужных задач); В разделе task указывается список команд для каждого конкретного случая; После чего происходит выполнение команды: PLAY [Run show commands on routers] *************************************************** TASK [run sh ip int br] *************************************************************** changed: [192.168.100.1] changed: [192.168.100.3] changed: [192.168.100.2] TASK [run sh ip route] **************************************************************** changed: [192.168.100.1] changed: [192.168.100.3] changed: [192.168.100.2] PLAY [Run show commands on switches] ************************************************** TASK [run sh int status] ************************************************************** changed: [192.168.100.100] TASK [run sh vlans] ******************************************************************* changed: [192.168.100.100] PLAY RECAP **************************************************************************** 192.168.100.1 : ok=2 changed=2 unreachable=0 failed=0 192.168.100.100 : ok=2 changed=2 unreachable=0 failed=0 192.168.100.2 : ok=2 changed=2 unreachable=0 failed=0 192.168.100.3 : ok=2 changed=2 unreachable=0 failed=0 И запускаем проверку выполнения команд: SSH password: PLAY [Run show commands on routers] *************************************************** TASK [run s hip int br] *************************************************************** Changed: [192.168.100.1] => {“changed”: true, “rc”: 0, “stderr”: “Shared connection To 192.168.100.1 closed. ”, “stdout”: “ Interface IP-Address OK? Method Status Protocol Ethernet0/0 192. 168.100.1 YES NVRAM up up Ethernet0/1 192.168.200.1 YES NVRAM up up Loopback0 10.1.1.1 YES manual up up ”, “stdout_lines “: [“”, “Interface IP-Address OK? Method Status Protocol”, “Ethernet0/0 192.168.100.1 YES NVRAM up up “, “Ethernet0/1 192.168.200.1 YES NVRAM up up “, “Loopaback0 10.1.1.1 YES manual up up “]} А что внутри? А теперь поговорим о начинке сценария. Основу составляют переменные. Это могут быть данные о машине, выводы команд, а также их можно вводить вручную. Главное не забывать правила написания имён. Их всего два: имена всегда должны состоять из букв, цифр и нижнего подчёркивания; имена всегда должны начинаться с буквы. Переменные могут быть определены разными способами: Инвентарным файлом [cisco-routers] 192.168.100.1 192.168.100.2 192.168.100.3 [cisco-switches] 192.168.100.100 [cisco-routers:vars] ntp_server=192.168.255.100 log_server=10.255.100.1 PLAYBOOKом -name: Run show commands on router: hosts: cisco-routers gather_facts: false vars: ntp_server: 192.168.255.100 log_server: 10.255.100.1 tasks: -name: run sh ip int br raw: s hip int br | ex unass -name: run s hip route raw: sh ip route Специальными файлами, созданными для групп: [cisco-routers] 192.168.100.1 192.168.100.2 192.168.100.3 [cisco-switches] 192.168.100.100 Или группами каталогов |– group_vars _ | |– all.yml | | |–cisco-routers.yml | Каталог с переменными для групп устройств | |–cisco-switches.yml _| | |–host vars _ | |–192.168.100.1 | | |–192.168.100.2 | | |–192.168.100.3 | Каталог с переменными для устройств | |–192.168.100.100 _| | |–myhosts | Инвертарный файл Команда register позволяет сохранять результаты выполнений модулей в переменные. После чего переменная может быть использована в шаблонах, принятиях решений о выполнении заданного сценария. --- - name: Run show commands on routers hosts: cisco-routers gather_facts: false tasks: -name: run s hip int br raw: s hip int br | ex unass register: sh_ip_int_br_result --- debug отображает информацию в стандартном потоке вывода в виде произвольной строки, переменной или фактах о машине. --- - name: Run show commands on routers hosts: cisco-routers gather_facts: false tasks: -name: run s hip int br raw: sh ip int br | ex unass register: sh_ip_int_br_result -name: Debug registered var debug: var=sh_ip_int_br_result.stdout_lines После чего результатом работы станет следующее: SSH password: PLAY [Run show commands on routers] *************************************************** TASK [run sh ip int br] *************************************************************** changed: [192.168.100.1] changed: [192.168.100.2] changed: [192.168.100.3] TASK [Debug registered var] *********************************************************** ok: [192.168.100.1] => { “sh_ip_int_br_result.stdout_lines”: [ “”, “Interface IP-Address OK? Method Status Protocol”, “Ethernet0/0 192.168.100.1 YES NVRAM up up “, “Ethernet0/1 192.168.200.1 YES NVRAM up up “, “Loopback0 10.1.1.1 YES manual up up “ ] } ok: [192.168.100.2] => { “sh_ip_int_br_result.stdout_lines”: [ “”, “Interface IP-Address OK? Method Status Protocol”, “Ethernet0/0 192.168.100.1 YES NVRAM up up “, “Ethernet0/2 192.168.200.1 YES NVRAM administratively down down “, “Loopback0 10.1.1.1 YES manual up up “ ] } ok: [192.168.100.3] => { “sh_ip_int_br_result.stdout_lines”: [ “”, “Interface IP-Address OK? Method Status Protocol”, “Ethernet0/0 192.168.100.3 YES NVRAM up up “, “Ethernet0/2 192.168.200.1 YES NVRAM administratively down down “, “Loopback0 10.1.1.1 YES manual up up “, “Loopback10 10.255.3.3 YES manual up up “ ] } PLAY RECAP **************************************************************************** 192.168.100.1 : ok=2 changed=1 unreachable=0 failed=0 192.168.100.2 : ok=2 changed=1 unreachable=0 failed=0 192.168.100.3 : ok=2 changed=1 unreachable=0 failed=0 Вместо заключения Можно ещё долго приводить примеры работы в системе, но ещё один факт так сказать "вишенка на торте". К плюсам Ansible следует отнести и то, что заданную команду система может выполнять практически до бесконечности. Пока не наступит требуемый результат трансформации не прекратятся. Пользователю можно не беспокоиться - программа сама всё сделает за Вас, а Вы можете заниматься другими делами.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59